簡體   English   中英

Android中SQLite查詢的語法錯誤

[英]Syntax error with SQLite query in Android

我正在嘗試在Android中創建新的SQLite數據庫。 這是我的onCreate方法:

public static final String DATABASE_NAME = "eventList.db";
public static final String TABLE_NAME = "event_table";
public static final String COL1 = "ID";
public static final String COL2 = "EVENTNAME";
public static final String COL3 = "UNIXTIMESTAMP";
public static final String COL4 = "PARTICIPANTS";
public static final String COL5 = "LOCATION";
public static final String COL6 = "LOCATIONNAME";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCRIMENT, "
            + " EVENTNAME TEXT, UNIXTIMESTAMP INTEGER, PARTICIPANTS TEXT, LOCATION TEXT, LOCATIONNAME TEXT)";
    sqLiteDatabase.execSQL(createTable);
}

這引發語法錯誤:

android.database.sqlite.SQLiteException:在“ AUTOINCRIMENT”附近:語法錯誤(代碼1):

請注意,“參與者”將是一個自定義對象,“地點”將是一個LatLng對象。

我該如何解決錯誤?

ID INTEGER PRIMARY KEY AUTOINCRIMENT不正確,應為ID INTEGER PRIMARY KEY AUTOINCREMENT

但是,按照SQLite Autoincrement最好根本不編碼AUTOINCREMENT。 ID仍將是唯一標識符。

您可能還會發現使用_id代替ID作為列名是有利的。 有時_id是必需的,例如對於CursorAdapters

所以我建議使用_id INTEGER PRIMARY KEY

你有錯字

 String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCRIMENT, "

請注意, AUTOINCRIMENT應該拼寫為AUTOINCREMENT

加號ID應該是_id另外,由於您遇到了設置常量的麻煩,為什么不使用它們來節省更多潛在的錯別字呢? 例如代替

+ " EVENTNAME TEXT

為什么不使用

+ COL2 + " TEXT

等等...

我可以建議您在這里閱讀如何創建數據庫的知識嗎?這是一個極好的教程,它展示了最佳實踐

嘗試這個

public static final String DATABASE_NAME = "eventList.db";
public static final String TABLE_NAME = "event_table";
public static final String COL1 = "ID";
public static final String COL2 = "EVENTNAME";
public static final String COL3 = "UNIXTIMESTAMP";
public static final String COL4 = "PARTICIPANTS";
public static final String COL5 = "LOCATION";
public static final String COL6 = "LOCATIONNAME";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + " EVENTNAME TEXT, UNIXTIMESTAMP INTEGER, PARTICIPANTS TEXT, LOCATION TEXT, LOCATIONNAME TEXT)";
    sqLiteDatabase.execSQL(createTable);
}

我認為您的拼寫錯誤是將AUTOINCRIMENT替換為AUTOINCREMENT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM