2015-02-09 106 views
0

請幫助我,我不明白它.i將創建數據庫,但它error.please我會在第二天晚上結束示例項目。請幫我SQLiteDatabase錯誤「sqlite:(1)near」(「:語法錯誤

代碼

public class FriendsDBHelper extends SQLiteOpenHelper { 

    public static int TABLE_VERSION = 1; 
    public static String TABLE_NAME ="table_f"; 
    public static String TABLE_KEY_ID = "id"; 
    public static String TABLE_KEY_FNAME = "fname"; 
    public static String TABLE_KEY_LNAME = "lname"; 
    public static String TABLE_KEY_NNAME = "nickname"; 

    public static String TABLE_CREATE_SQL = "CREATE TABLE "+TABLE_NAME+" ("+ 
              ""+TABLE_KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
              ""+TABLE_KEY_FNAME+"TEXT(20), "+ 
              ""+TABLE_KEY_LNAME+"TEXT(20), "+ 
              ""+TABLE_KEY_NNAME+"TEXT(20), "+ 
              ") "; 
    //Constructor 
    public FriendsDBHelper(Context context) { 
     super(context, TABLE_NAME, null, TABLE_VERSION); 

    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(TABLE_CREATE_SQL); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE "+TABLE_NAME); 
     onCreate(db); 
     Log.i("Friends DB Helper","Table upgrade form "+ oldVersion +" to "+newVersion); 
    } 
} 

回答

3

你需要列名和類型之間的空白位置:

""+TABLE_KEY_FNAME+"TEXT(20), "+ 
""+TABLE_KEY_LNAME+"TEXT(20), "+ 
""+TABLE_KEY_NNAME+"TEXT(20), "+ 

要解決的另一種語法錯誤,刪除,最後一欄後規範。

更好:

""+TABLE_KEY_FNAME+" TEXT(20), "+ 
""+TABLE_KEY_LNAME+" TEXT(20), "+ 
""+TABLE_KEY_NNAME+" TEXT(20) "+ 

的括號在語法上是有效的(但語義忽略)列類型而不是列名。

0

在create table命令結尾處有一個額外的「,」。

""+TABLE_KEY_NNAME+"TEXT(20), "+ 

刪除。

此外""+TABLE_KEY_FNAME+"TEXT(20), "+它將評估爲""+TABLE_KEY_FNAMETEXT(20), "+即沒有字段和類型之間的空間,所以添加像空間:

""+TABLE_KEY_FNAME+" TEXT(20), "+ 

類似的變化也適用於其他字段定義爲好。