语法错误(代码1):,编译时:CREATE TABLE
我的sql命令中缺少什么?语法错误(代码1):,编译时:CREATE TABLE
public class PhoneDal extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = Constants.DB_NAME;
public static final String BLOCKED_PHONES_TABLE = "BLOCKED_PHONES_TABLE";
public PhoneDal(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_BLOCKED_PHONES_TABLE =
"CREATE TABLE "+ BLOCKED_PHONES_TABLE +
" ("+ KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT 1, "
+ KEY_PHONE+" TEXT, "
+ KEY_IS_BLOCKED+" BIT," +
" UNIQUE "+ KEY_PHONE+")";
db.execSQL(CREATE_BLOCKED_PHONES_TABLE);
}
,误差
android.database.sqlite.SQLiteException: near "KEY_PHONE": syntax error (code 1): , while compiling: CREATE TABLE BLOCKED_PHONES_TABLE (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT 1, KEY_PHONE TEXT, KEY_IS_BLOCKED BIT, UNIQUE KEY_PHONE)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
你有一个语法错误定义SQLite中唯一场
使用此KEY_PHONE + " TEXT UNIQUE"
代替
列定义:
甚至更好,正确使用空格 - 'KEY_PHONE +'TEXT UNIQUE'' – Simon
UNIQUE
列必须是d在parens中定义。更改
" UNIQUE "+ KEY_PHONE+")";
到
" UNIQUE ("+ KEY_PHONE+"))";
但@Mousa以不同的方式解决了我的问题,并且它工作正常。它与你的不同? –
这种方式定义了表约束,UNIQUE可以应用于多个列。 Mousa的方式定义了列约束。我这样回答,因为你的问题不正确地使用表约束。 http://www.sqlite.org/lang_createtable.html – laalto
使用调试器来检查字符串'CREATE_BLOCKED_PHONES_TABLE'的值(你真的应该学习Java命名约定)并粘贴它的值到你的问题。 – Simon
供您参考:https://www.sqlite.org/lang_createtable.html –