Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Studio上将数据添加到我的SQLite数据库时出错_Android_Sqlite - Fatal编程技术网

在Android Studio上将数据添加到我的SQLite数据库时出错

在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

Android Studio和SQLite的新成员,希望能提供一些帮助

创建一个应用程序,其中有人输入他们的好友详细信息,并将其添加到数据库中

我已经创建了我的数据库类和我的活动来添加朋友,但每当我尝试将他们添加到数据库时,我都会在logcat中收到一个错误,说明:

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);
}

就这样!这是我没有寻找的东西,但我现在会的。非常感谢你!就这样!这是我没有寻找的东西,但我现在会的。非常感谢你!