Java SQLiteException:表已存在
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16571969/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQLiteException: table already exists
提问by tomer
I added to my DB the table called "MEDIA_TABLE" and i got the following error code:
我将名为“MEDIA_TABLE”的表添加到我的数据库中,并收到以下错误代码:
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:
这是我的 onCreate 代码:
@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);
}
采纳答案by Triode
You should use CREATE TABLE IF NOT EXISTS
instead of CREATE TABLE
. Your code would then look like this:
您应该使用CREATE TABLE IF NOT EXISTS
而不是CREATE TABLE
. 您的代码将如下所示:
@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);
}
回答by Sunil Kumar
use this way
用这种方式
db.execSQL("create table if not exists table_name(rank int, correct_answer int, optionselect int);";
回答by DragonFire
For me I was creating multiple tables and had the same TABLE_NAME like this. This was causing a conflict.
对我来说,我正在创建多个表,并且具有相同的 TABLE_NAME 像这样。这引起了冲突。
// Define Table
public static final class groupMembersTable implements BaseColumns {
public static final String TABLE_NAME = "group_members_list";
public static final String COLUMN_GROUP_FIREBASE_ID = "group_firebase_id";
public static final String COLUMN_MEMBER_FIREBASE_ID = "from_user_id";
}