Я полагаю, ваша проблема в том, что вы пытаетесь определить несколько ПЕРВИЧНЫХ ИНДЕКСОВ для 2-й таблицы.
То есть у вас есть: -
- для COL3
INTEGER PRIMARY KEY AUTOINCREMENT
- для COL1
INTEGER PRIMARY KEY
Вы можете иметь только один ПЕРВИЧНЫЙ ИНДЕКС (вы можете иметь несколько неосновных индексов).
Если бы вы посмотрели журнал, у вас было бы что-то похожее (при первом запуске): -
05-11 01:38:10.133 1215-1215/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{soanswers.soanswers/soanswers.soanswers.MainActivity}: android.database.sqlite.SQLiteException: table "tbl002" has more than one primary key (code 1): , while compiling: CREATE TABLE tbl002 ( column3 INTEGER PRIMARY KEY AUTOINCREMENT, column4 TEXT,column5 INTEGER,column1 INTEGER PRIMARY KEY,column6 TEXT, FOREIGN KEY (column1) REFERENCES tbl001(column1));
Так что при предположении вы захотите: -
String createTable2 = "CREATE TABLE " + TABLE_NAME2 + " ( " +
COL3 + " INTEGER PRIMARY KEY, " +
COL4 + " TEXT,"
+
COL5 + " INTEGER," +
COL1 + " INTEGER," +
COL6 + " TEXT, " +
" FOREIGN KEY (" + COL1 + ") REFERENCES " + TABLE_NAME + "(" + COL1 + "));";
Обратите внимание, что вам нужно будет удалить Данные приложения или удалить Приложение (если вы можете позволить себе потерять любые существующие данные) после внесения изменений, чтобы изменения вступили в силу.
- Есть и другие способы, но это самый простой.
Добавление индекса (необязательно): -
Следующее добавило бы дополнительный индекс согласно table2 col1: -
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + " ( " + COL1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL2 + " TEXT);";
/*
String createTable2 = "CREATE TABLE " + TABLE_NAME2 + " ( " + COL3 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL4 + " TEXT,"
+ COL5 + " INTEGER," + COL1 + " INTEGER PRIMARY KEY," + COL6 + " TEXT, " + " FOREIGN KEY (" + COL1 + ") REFERENCES "
+ TABLE_NAME + "(" + COL1 + "));";
*/
String createTable2 = "CREATE TABLE " + TABLE_NAME2 + " ( " +
COL3 + " INTEGER PRIMARY KEY, " +
COL4 + " TEXT,"
+
COL5 + " INTEGER," +
COL1 + " INTEGER," +
COL6 + " TEXT, " +
" FOREIGN KEY (" + COL1 + ") REFERENCES " + TABLE_NAME + "(" + COL1 + "));";
String crtTable2Col1Index = "CREATE INDEX IF NOT EXISTS col1index ON " +
TABLE_NAME2 + "(" + COL1 + ")"; //<<<< ADDED
db.execSQL(createTable);
db.execSQL(createTable2);
db.execSQL(crtTable2Col1Index); //<<<< ADDED
}
- col1index будет именем индекса
Дополнительно
Обратите внимание, что вы намереваетесь использовать FOREIGN KEYS, вам необходимо включить FOREIGN KEYS (если вы этого не сделали). Вы можете сделать это, переопределив метод onConfigure
, например, : -
@Override
public void onConfigure (SQLiteDatabase db) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
db.setForeignKeyConstraintsEnabled(true);
} else {
db.execSQL("pragma foreign_keys = ON");
}
}