SQLiteDatabase错误“sqlite:(1)near"(&#34 ;:语法错误

时间:2015-02-09 15:42:21

标签: android sqlite

请帮助我,我不明白。我将创建数据库,但它有错误。请在第二天晚上结束示例项目。请帮助我

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);
    }
}

2 个答案:

答案 0 :(得分: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) "+

对于列类型,parens在语法上是有效的(但在语义上被忽略),但对于列名称则没有。

答案 1 :(得分:0)

在create table命令的末尾有一个额外的“,”。

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

删除它。

同样""+TABLE_KEY_FNAME+"TEXT(20), "+它将评估为""+TABLE_KEY_FNAMETEXT(20), "+,即字段和类型之间没有空格,因此请添加如下空格:

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

类似的更改也适用于其他字段定义。