在Android Studio上将数据添加到我的SQLite数据库时出错
Android Studio和SQLite的新成员,希望能提供一些帮助 创建一个应用程序,其中有人输入他们的好友详细信息,并将其添加到数据库中 我已经创建了我的数据库类和我的活动来添加朋友,但每当我尝试将他们添加到数据库时,我都会在logcat中收到一个错误,说明:在Android Studio上将数据添加到我的SQLite数据库时出错,android,sqlite,Android,Sqlite,Android Studio和SQLite的新成员,希望能提供一些帮助 创建一个应用程序,其中有人输入他们的好友详细信息,并将其添加到数据库中 我已经创建了我的数据库类和我的活动来添加朋友,但每当我尝试将他们添加到数据库时,我都会在logcat中收到一个错误,说明: 11-16 20:40:20.083 2641-2641/com.example.kod45.myapplication E/SQLiteDatabase: Error inserting EMAIL=pm@gmail.com NA
11-16 20:40:20.083 2641-2641/com.example.kod45.myapplication E/SQLiteDatabase: Error inserting EMAIL=pm@gmail.com NAME=paul ID=1 SURNAME=pail
android.database.sqlite.SQLiteException: table friends_table has no column named EMAIL (code 1): , while compiling: INSERT INTO friends_table(EMAIL,NAME,ID,SURNAME) VALUES (?,?,?,?)
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(table friends_table has no column named EMAIL (code 1): , while compiling: INSERT INTO friends_table(EMAIL,NAME,ID,SURNAME) VALUES (?,?,?,?))
以下是我的数据库处理程序:
public class DBHandler extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "Friends.db";
public static final String TABLE_NAME = "friends_table";
public static final String ID_COL = "ID";
public static final String EMAIL = "EMAIL";
public static final String FIRST_NAME = "NAME";
public static final String SURNAME = "SURNAME";
public DBHandler(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db)
{
String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ ID_COL + " INTEGER PRIMARY KEY,"
+ EMAIL + "TEXT,"
+ FIRST_NAME + "TEXT,"
+ SURNAME + "TEXT" + ")";
db.execSQL(CREATE_FRIENDS_TABLE);
}
public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
// example of drop old tables and Re-
//create tables.
//you can alter tables such as add
//columns, etc. but not drop tables
db.execSQL("drop table if exists "
+ TABLE_NAME);
onCreate(db);
}
public void addNewFriend(Friend newFriend)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ID_COL, newFriend.getFriendID());
values.put(EMAIL, newFriend.getEmailAddress());
values.put(FIRST_NAME, newFriend.getFirstName());
values.put(SURNAME, newFriend.getSurname());
db.insert(TABLE_NAME, null, values);
db.close();
}
public ArrayList<Friend> getAllFriends()
{
ArrayList<Friend> friendList = new ArrayList<Friend>();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor.moveToFirst()) {
do
{
Friend friend = new Friend();
friend.setFriendID(Integer.parseInt(cursor.getString(0)));
friend.setEmailAddress(cursor.getString(1));
friend.setFirstName(cursor.getString(2));
friend.setSurname(cursor.getString(3));
//Adding to list
friendList.add(friend);
}
while (cursor.moveToNext()) ;
}
return friendList;
}
这是一个非常容易纠正的错误, 你基本上应该阅读错误信息,这是你职业生涯的一部分 您有一个插入错误,因为 表friends\u表没有名为EMAIL的列(代码1): 那么你认为会是什么呢? 当然,您必须创建一个专栏电子邮件。 当然,您会认为您创建了电子邮件,但是您缺少的是空格。基本上,在创建表时,您必须注意SQL查询的格式是否完美 因此,要写“文本”,你应该写“文本”,在“电子邮件”和“姓氏”两个字段上都留一个空格,因为这样写是错误的
你也应该考虑如果你用一个仿真器或设备运行你的应用程序,你必须在代码> >卸载\代码>你的应用程序之前,这样你就可以从头开始安装一个新的“正确”的数据库。p> 这是一个非常容易修复的错误, 你基本上应该阅读错误信息,这是你职业生涯的一部分 您有一个插入错误,因为
表friends\u表没有名为EMAIL的列(代码1): 那么你认为会是什么呢? 当然,您必须创建一个专栏电子邮件。 当然,您会认为您创建了电子邮件,但是您缺少的是空格。基本上,在创建表时,您必须注意SQL查询的格式是否完美 因此,要写“文本”,你应该写“文本”,在“电子邮件”和“姓氏”两个字段上都留一个空格,因为这样写是错误的你也应该考虑如果你用一个仿真器或设备运行你的应用程序,你必须在代码> >卸载\代码>你的应用程序之前,这样你就可以从头开始安装一个新的“正确”的数据库。p> 表create SQL在最后3列的列名和列类型之间没有空格
改变 String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ ID_COL + " INTEGER PRIMARY KEY,"
+ EMAIL + "TEXT,"
+ FIRST_NAME + "TEXT,"
+ SURNAME + "TEXT" + ")";
致:-
然后执行以下操作之一
- 删除应用程序的数据并重新运行
- 卸载应用程序并重新运行
- 更改
公共静态最终int数据库\u版本=1代码>至
并重新运行应用程序公共静态最终int数据库\u版本=2
你也可以考虑以下内容: 1) 您可以使用以下方法简化光标的循环:-
while(cursor.moveToNext) {
....
}
2) 通过利用游标的getColumnIndex(columnname)
方法,而不是硬编码偏移量,可以减少确定/计算列偏移量的问题
使用1和2,您的代码可以是:-
while(cursor.moveToNext()) {
Friend friend = new Friend();
friend.setFriendID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ID_COL))));
friend.setEmailAddress(cursor.getString(cursor.getColumnIndex(EMAIL)));
friend.setFirstName(cursor.getString(cursor.getColumnIndex(FIRST_NAME)));
friend.setSurname(cursor.getString(cursor.getColumnIndex(SURNAME)));
//Adding to list
friendList.add(friend);
}
表create SQL在最后3列的列名和列类型之间没有空格 改变
String CREATE_FRIENDS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ ID_COL + " INTEGER PRIMARY KEY,"
+ EMAIL + "TEXT,"
+ FIRST_NAME + "TEXT,"
+ SURNAME + "TEXT" + ")";
致:-
然后执行以下操作之一
- 删除应用程序的数据并重新运行
- 卸载应用程序并重新运行
- 更改
公共静态最终int数据库\u版本=1代码>至
并重新运行应用程序公共静态最终int数据库\u版本=2
你也可以考虑以下内容: 1) 您可以使用以下方法简化光标的循环:-
while(cursor.moveToNext) {
....
}
2) 通过利用游标的getColumnIndex(columnname)
方法,而不是硬编码偏移量,可以减少确定/计算列偏移量的问题
使用1和2,您的代码可以是:-
while(cursor.moveToNext()) {
Friend friend = new Friend();
friend.setFriendID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ID_COL))));
friend.setEmailAddress(cursor.getString(cursor.getColumnIndex(EMAIL)));
friend.setFirstName(cursor.getString(cursor.getColumnIndex(FIRST_NAME)));
friend.setSurname(cursor.getString(cursor.getColumnIndex(SURNAME)));
//Adding to list
friendList.add(friend);
}
就这样!这是我没有寻找的东西,但我现在会的。非常感谢你!就这样!这是我没有寻找的东西,但我现在会的。非常感谢你!