Я пытаюсь использовать базу данных в своем приложении для Android, но когда я запускаю операцию, которая будет использовать DB helper/Contract, он сработает. Я пробовал некоторые проверки достоверности запросов, и я не вижу ошибок. Следующее, что я использую для использования моего dbhelper, но вторая строка вызывает сбой.
DBhelper dbHelper = new DBhelper(this);
mDatabase = dbHelper.getWritableDatabase();
Код для моего dbcontract:
public final class DBcontract {
private DBcontract(){}
public static class DB_table1 implements BaseColumns {
public static final String TABLE_Name = "Timer_table";
public static final String COL_1 = "id";
public static final String COL_2 = "Title";
public static final String COL_3 = "Startvalue";
public static final String COL_4 = "Endvalue";
public static final String COL_5 = "Timer";
}
}
и dbhelper:
public class DBhelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "archeage.db";
//Create table query
public static final String CREATE_TABLE =
"" + "CREATE TABLE " + TABLE_Name + " ( "
+ DBcontract.DB_table1.COL_1 + " INTEGER PRIMARY KEY AUTO_INCREMENT, "
+ DBcontract.DB_table1.COL_2 + " TEXT NOT NULL, "
+ DBcontract.DB_table1.COL_3 + " INTEGER NOT NULL, "
+ DBcontract.DB_table1.COL_4 + " INTEGER NOT NULL, "
+ DBcontract.DB_table1.COL_5 + " INTEGER NOT NULL"
+ ");";
//delete table query
public static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_Name;
public DBhelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DELETE_TABLE);
onCreate(db);
}
}
редактировать ошибки logcat:
04-09 13:27:51.233 28939-28939/com.example.xang.archeage E/SQLiteLog: (1) near "AUTO_INCREMENT": syntax error
04-09 13:27:51.236 28939-28939/com.example.xang.archeage E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.xang.archeage, PID: 28939
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.xang.archeage/com.example.xang.archeage.Timerpopup}: android.database.sqlite.SQLiteException: near "AUTO_INCREMENT": syntax error (code 1): , while compiling: CREATE TABLE Timer_table ( id INTEGER PRIMARY KEY AUTO_INCREMENT, Title TEXT NOT NULL, Startvalue INTEGER NOT NULL, Endvalue INTEGER NOT NULL, Timer INTEGER NOT NULL);
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2779)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2844)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1572)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6361)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Caused by: android.database.sqlite.SQLiteException: near "AUTO_INCREMENT": syntax error (code 1): , while compiling: CREATE TABLE Timer_table ( id INTEGER PRIMARY KEY AUTO_INCREMENT, Title TEXT NOT NULL, Startvalue INTEGER NOT NULL, Endvalue INTEGER NOT NULL, Timer INTEGER NOT NULL);
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1699)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1630)
at com.example.xang.archeage.DBhelper.onCreate(DBhelper.java:41)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.example.xang.archeage.Timerpopup.onCreate(Timerpopup.java:27)
at android.app.Activity.performCreate(Activity.java:6675)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2732)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2844)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1572)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6361)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Ваша проблема заключается в том, что AUTO_INCREMENT
не является ключевым словом для правильного ключевого слова AUTOINCREMENT
.
Однако вы можете отказаться от AUTOINCREMENT
и просто использовать INTEGER PRIMARY KEY
после прочтения:
Ключевое слово AUTOINCREMENT накладывает дополнительный процессор, память, дисковое пространство и служебные данные ввода-вывода на диске, и их следует избегать, если это не требуется строго. Обычно это не нужно.
Нет необходимости добавлять AUTO_INCREMENT; ПЕРВИЧНЫЙ КЛЮЧ будет автоматически увеличиваться. Удалить AUTO_INCREMENT
или используйте AUTOINCREMENT, см. это: автоматический прирост Android SQLite
Ваша проблема - AUTO_INCREMENT, сделайте ваш запрос менее сложным.
String CREATE_EMPLOYEE_TABLE = "CREATE TABLE Employee (Emp_Id INTEGER PRIMARY KEY AUTOINCREMENT, Emp_Name TEXT, Emp_Phone TEXT, Emp_Email TEXT, Emp_Designation TEXT, Emp_Password TEXT)";