Android SQLite创建表错误

时间:2015-10-13 17:47:48

标签: android sqlite

我正在尝试为我的Android应用程序创建一些表,但我遇到了表创建的一些麻烦。我有一个dDBAdapter,它控制着我创建的所有内容。第一个表创建正常,但我不明白为什么它在第二个表失败。

任何帮助都会很棒,但我确信我刚刚看了一些小事

表创建代码

private static final String CREATE_TABLE_RECIPES = "create table if not exists recipes(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
        "name VARCHAR," +
        "ingredents TEXT," +
        "instructions TEXT," +
        "description TEXT," +
        "time TIME)";

private static final String CREATE_TABLE_SHOPPING_LIST = "create table if not exists shopping_list(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "name TEXT," +
        "quantity FLOAT)";

private static final String CREATE_TABLE_PUBLIC_DB = "create table if not exists public_db(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "name TEXT," +
        "number INT)";

private static final String CREATE_TABLE_CURRENT_CONTENTS = "create table if not exists current_contents(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "name TEXT," +
        "quantity FLOAT," +
        "expiry DATE)";

错误

18:41:35.778 27198-27198/? E/SQLiteLog: (1) near "AUTOINCREMENTname": syntax error
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime: FATAL EXCEPTION: main
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime: Process: app.rory.menu, PID: 27198
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{app.rory.menu/app.rory.pocket_chef.MyActivity}: android.database.sqlite.SQLiteException: near "AUTOINCREMENTname": syntax error (code 1): , while compiling: create table if not exists shopping_list(_id INTEGER PRIMARY KEY AUTOINCREMENTname TEXT,quantity FLOAT)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:  Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENTname": syntax error (code 1): , while compiling: create table if not exists shopping_list(_id INTEGER PRIMARY KEY AUTOINCREMENTname TEXT,quantity FLOAT)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at app.rory.pocket_chef.Adapters.DBAdapter$DatabaseHelper.onCreate(DBAdapter.java:68)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at app.rory.pocket_chef.Adapters.DBAdapter.open(DBAdapter.java:89)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at app.rory.pocket_chef.Fragments.recipes_Fragment.onActivityCreated(recipes_Fragment.java:42)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.Fragment.performActivityCreated(Fragment.java:2061)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:912)
10-13 18:41:35.787 27198-27198/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
10-13 18

1 个答案:

答案 0 :(得分:0)

您只需从所有SQL查询中删除AUTOINCREMENT

在SQLite中,声明为INTEGER PRIMARY KEY的列将自动自动增量。

检查HERE