【问题标题】:Runtime exception while creating SQLite database [duplicate]创建 SQLite 数据库时出现运行时异常 [重复]
【发布时间】:2015-07-18 17:00:29
【问题描述】:

谁能告诉我怎么了。以前它适用于一个表“书”,但现在我正在创建一个包含 3 个表的新数据库并且它没有执行。 这是帮助程序类。

public class DatabaseHelper extends SQLiteOpenHelper{

    private static final String DATABASE_NAME="MyDatabse1.db";
    public DatabaseHelper(Context context)
    {
        super(context,DATABASE_NAME,null,1);
    }
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL("CREATE TABLE userdetails (_id INTEGER AUTOINCREMENT, username TEXT UNIQUE, password TEXT, name TEXT, phonenumber TEXT, address TEXT, fine INTEGER, bookid INTEGER, PRIMARY KEY (_id, username, password));");
        db.execSQL("CREATE TABLE issue (_id INTEGER AUTOINCREMENT, book_id INTEGER UNIQUE, username TEXT, issue_date DATE, return_date DATE, PRIMARY KEY (_id, username, book_id));");
        db.execSQL("CREATE TABLE bookstable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, category TEXT, availability TEXT);");
}
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)     {

        db.execSQL("DROP TABLE IF EXISTS userdetails");
        db.execSQL("DROP TABLE IF EXISTS issue");
        db.execSQL("DROP TABLE IF EXISTS bookstable");

        onCreate(db);

        }

这是堆栈跟踪

07-18 12:47:22.686: E/SQLiteLog(3423): (1) near "AUTOINCREMENT": syntax error
07-18 12:47:22.916: E/AndroidRuntime(3423): FATAL EXCEPTION: main
07-18 12:47:22.916: E/AndroidRuntime(3423): java.lang.IllegalStateException:     Could not execute method of the activity

07-18 12:47:22.916: E/AndroidRuntime(3423): Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error  (code 1): , while compiling: CREATE TABLE userdetails (_id INTEGER AUTOINCREMENT, username TEXT UNIQUE, password TEXT, name TEXT, phonenumber TEXT, address TEXT, fine INTEGER, bookid INTEGER, PRIMARY KEY (_id, username, password));
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at com.example.libraryplus.DatabaseHelper.onCreate(DatabaseHelper.java:26)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at com.example.libraryplus.DatabaseHelper.add_books(DatabaseHelper.java:53)
07-18 12:47:22.916: E/AndroidRuntime(3423):     at com.example.libraryplus.AddBooksActivity.addNewBooks(AddBooksActivity.java:42)

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    AUTOINCREMENT 列必须是 PRIMARY KEY。

    不可能有一个自增列和一个多列主键。

    【讨论】:

    • 我已将其明确指定为 PRIMARY KEY,并将用户名和密码指定为 PRIMARY KEY(_id、用户名、密码)
    • 我想要另外两个主键以及 _id ,它是 AUTOINCREMENT 列。怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多