SQLiteException:表已经存在 [英] SQLiteException: table already exists

查看:687
本文介绍了SQLiteException:表已经存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我添加到我的数据库表称为MEDIA_TABLE,我得到了以下错误code:

  05-15 20:56:22.976:E / AndroidRuntime(5968):android.database.sqlite.SQLiteException:表personal_stats已经存在(code 1),而编译:CREATE TABLE personal_stats(_id INTEGER PRIMARY KEY AUTOINCREMENT,图片文字,视频文字);
 

我的第二个表工作正常。

我想卸载我的应用程序并安装它,它不会工作,也许有表的数据库是否有限制?

下面是我的onCreate code:

  @覆盖
公共无效的onCreate(SQLiteDatabase DB){
    db.execSQL(CREATE TABLE+ TABLE_NAME +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_DATE +TEXT+
            COLUMN_EXERCISE +TEXT+
            COLUMN_WEIGHT +TEXT+
            COLUMN_REPS +TEXT+
            COLUMN_SET_TIME +TEXT+
            COLUMN_WORKOUT_TIME +TEXT+
            COLUMN_DISTANCE +TEXT+
            COLUMN_SPEED +TEXT+
            COLUMN_REST_TIME +TEXT+
            COLUMN_NUMBER_OF_SETS +TEXT+
            COLUMN_FIELDS_PARAMETER +TEXT+
            COLUMN_NOT_ON_LIST_EXERCISE +TEXT+
            COLUMN_HERAT_BEAT +TEXT+
            COLUMN_CALORIES +TEXT+
            COLUMN_COMMENT +TEXT););

    db.execSQL(CREATE TABLE+ SECOND_TABLE_NAME +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_AGE +TEXT+
            COLUMN_AGE_PW +TEXT+
            COLUMN_GENDER +TEXT+
            COLUMN_HEIGHT +TEXT+
            COLUMN_HEIGHT_PW +TEXT+
            COLUMN_BODY_WEIGHT +TEXT+
            COLUMN_BODY_WEIGHT_PW +TEXT+
            COLUMN_PROFILE_PIC +TEXT+
            COLUMN_FAT +TEXT+
            COLUMN_FAT_PW +TEXT););

    db.execSQL(CREATE TABLE+ MEDIA_TABLE +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_PICS +TEXT+
            COLUMN_VIDEO +TEXT););

}

@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(DROP TABLE IF EXISTS+ TABLE_NAME);
    db.execSQL(DROP TABLE IF EXISTS+ SECOND_TABLE_NAME);
    db.execSQL(DROP TABLE IF EXISTS+ MEDIA_TABLE);
    的onCreate(DB);
}

编辑 :
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(CREATE TABLE IF NOT EXISTS+ TABLE_NAME);
    db.execSQL(CREATE TABLE IF NOT EXISTS+ SECOND_TABLE_NAME);
    db.execSQL(CREATE TABLE IF NOT EXISTS+ MEDIA_TABLE);
    的onCreate(DB);
}
 

解决方案

您应该使用 CREATE TABLE IF NOT EXISTS 而不是 CREATE TABLE 。您的code将如下所示:

  @覆盖
公共无效的onCreate(SQLiteDatabase DB){
    db.execSQL(CREATE TABLE IF NOT EXISTS+ TABLE_NAME +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_DATE +TEXT+
            COLUMN_EXERCISE +TEXT+
            COLUMN_WEIGHT +TEXT+
            COLUMN_REPS +TEXT+
            COLUMN_SET_TIME +TEXT+
            COLUMN_WORKOUT_TIME +TEXT+
            COLUMN_DISTANCE +TEXT+
            COLUMN_SPEED +TEXT+
            COLUMN_REST_TIME +TEXT+
            COLUMN_NUMBER_OF_SETS +TEXT+
            COLUMN_FIELDS_PARAMETER +TEXT+
            COLUMN_NOT_ON_LIST_EXERCISE +TEXT+
            COLUMN_HERAT_BEAT +TEXT+
            COLUMN_CALORIES +TEXT+
            COLUMN_COMMENT +TEXT););

    db.execSQL(CREATE TABLE IF NOT EXISTS+ SECOND_TABLE_NAME +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_AGE +TEXT+
            COLUMN_AGE_PW +TEXT+
            COLUMN_GENDER +TEXT+
            COLUMN_HEIGHT +TEXT+
            COLUMN_HEIGHT_PW +TEXT+
            COLUMN_BODY_WEIGHT +TEXT+
            COLUMN_BODY_WEIGHT_PW +TEXT+
            COLUMN_PROFILE_PIC +TEXT+
            COLUMN_FAT +TEXT+
            COLUMN_FAT_PW +TEXT););

    db.execSQL(CREATE TABLE IF NOT EXISTS+ MEDIA_TABLE +(+
            COLUMN_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
            COLUMN_PICS +TEXT+
            COLUMN_VIDEO +TEXT););

}

@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(DROP TABLE IF EXISTS+ TABLE_NAME);
    db.execSQL(DROP TABLE IF EXISTS+ SECOND_TABLE_NAME);
    db.execSQL(DROP TABLE IF EXISTS+ MEDIA_TABLE);
    的onCreate(DB);
}
 

I added to my DB the table called "MEDIA_TABLE" and i got the following error code:

05-15 20:56:22.976: E/AndroidRuntime(5968): android.database.sqlite.SQLiteException: table personal_stats already exists (code 1): , while compiling: CREATE TABLE personal_stats (_id INTEGER PRIMARY KEY AUTOINCREMENT, pictures TEXT, videos TEXT);

My second table works fine.

i tried to uninstall my app and install it and it wont work, maybe there is a limit of tables in DB?

Here is my onCreate code:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_DATE + " TEXT, " +
            COLUMN_EXERCISE + " TEXT, " +
            COLUMN_WEIGHT + " TEXT, " +
            COLUMN_REPS + " TEXT, " +
            COLUMN_SET_TIME + " TEXT, " +
            COLUMN_WORKOUT_TIME + " TEXT, " +
            COLUMN_DISTANCE + " TEXT, " +
            COLUMN_SPEED + " TEXT, " +
            COLUMN_REST_TIME + " TEXT, " +
            COLUMN_NUMBER_OF_SETS + " TEXT, " +
            COLUMN_FIELDS_PARAMETER + " TEXT, " +
            COLUMN_NOT_ON_LIST_EXERCISE + " TEXT, " +
            COLUMN_HERAT_BEAT + " TEXT, " +
            COLUMN_CALORIES + " TEXT, " +
            COLUMN_COMMENT + " TEXT);");

    db.execSQL("CREATE TABLE " + SECOND_TABLE_NAME + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_AGE + " TEXT, " +
            COLUMN_AGE_PW + " TEXT, " +
            COLUMN_GENDER + " TEXT, " +
            COLUMN_HEIGHT + " TEXT, " +
            COLUMN_HEIGHT_PW + " TEXT, " +
            COLUMN_BODY_WEIGHT + " TEXT, " +
            COLUMN_BODY_WEIGHT_PW + " TEXT, " +
            COLUMN_PROFILE_PIC + " TEXT, " +
            COLUMN_FAT + " TEXT, " +
            COLUMN_FAT_PW + " TEXT);");

    db.execSQL("CREATE TABLE " +  MEDIA_TABLE + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_PICS + " TEXT, " +
            COLUMN_VIDEO + " TEXT);");

}       

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    db.execSQL("DROP TABLE IF EXISTS " + SECOND_TABLE_NAME);
    db.execSQL("DROP TABLE IF EXISTS " + MEDIA_TABLE);
    onCreate(db);   
}

EDIT :
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("CREATE TABLE IF NOT EXISTS" + TABLE_NAME);
    db.execSQL("CREATE TABLE IF NOT EXISTS" + SECOND_TABLE_NAME);
    db.execSQL("CREATE TABLE IF NOT EXISTS" + MEDIA_TABLE);
    onCreate(db);   
}

解决方案

You should use CREATE TABLE IF NOT EXISTS instead of CREATE TABLE. Your code would then look like this:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE IF NOT EXISTS" + TABLE_NAME + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_DATE + " TEXT, " +
            COLUMN_EXERCISE + " TEXT, " +
            COLUMN_WEIGHT + " TEXT, " +
            COLUMN_REPS + " TEXT, " +
            COLUMN_SET_TIME + " TEXT, " +
            COLUMN_WORKOUT_TIME + " TEXT, " +
            COLUMN_DISTANCE + " TEXT, " +
            COLUMN_SPEED + " TEXT, " +
            COLUMN_REST_TIME + " TEXT, " +
            COLUMN_NUMBER_OF_SETS + " TEXT, " +
            COLUMN_FIELDS_PARAMETER + " TEXT, " +
            COLUMN_NOT_ON_LIST_EXERCISE + " TEXT, " +
            COLUMN_HERAT_BEAT + " TEXT, " +
            COLUMN_CALORIES + " TEXT, " +
            COLUMN_COMMENT + " TEXT);");

    db.execSQL("CREATE TABLE IF NOT EXISTS" + SECOND_TABLE_NAME + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_AGE + " TEXT, " +
            COLUMN_AGE_PW + " TEXT, " +
            COLUMN_GENDER + " TEXT, " +
            COLUMN_HEIGHT + " TEXT, " +
            COLUMN_HEIGHT_PW + " TEXT, " +
            COLUMN_BODY_WEIGHT + " TEXT, " +
            COLUMN_BODY_WEIGHT_PW + " TEXT, " +
            COLUMN_PROFILE_PIC + " TEXT, " +
            COLUMN_FAT + " TEXT, " +
            COLUMN_FAT_PW + " TEXT);");

    db.execSQL("CREATE TABLE IF NOT EXISTS" +  MEDIA_TABLE + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_PICS + " TEXT, " +
            COLUMN_VIDEO + " TEXT);");

}       

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    db.execSQL("DROP TABLE IF EXISTS " + SECOND_TABLE_NAME);
    db.execSQL("DROP TABLE IF EXISTS " + MEDIA_TABLE);
    onCreate(db);   
}

这篇关于SQLiteException:表已经存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆