语法错误(代码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) 
+0

使用调试器来检查字符串'CREATE_BLOCKED_PHONES_TABLE'的值(你真的应该学习Java命名约定)并粘贴它的值到你的问题。 – Simon

+0

供您参考:https://www.sqlite.org/lang_createtable.html –

你有一个语法错误定义SQLite中唯一场
使用此KEY_PHONE + " TEXT UNIQUE"代替

列定义:
Column definition

+0

甚至更​​好,正确使用空格 - 'KEY_PHONE +'TEXT UNIQUE'' – Simon

UNIQUE列必须是d在parens中定义。更改

" UNIQUE "+ KEY_PHONE+")"; 

" UNIQUE ("+ KEY_PHONE+"))"; 
+0

但@Mousa以不同的方式解决了我的问题,并且它工作正常。它与你的不同? –

+0

这种方式定义了表约束,UNIQUE可以应用于多个列。 Mousa的方式定义了列约束。我这样回答,因为你的问题不正确地使用表约束。 http://www.sqlite.org/lang_createtable.html – laalto