表[表名]没有名为[列名]的列

时间:2014-02-20 12:30:19

标签: android android-sqlite

我的SQLite数据库在开头只有两列(ID和NAME),现在我又增加了两列:DURATION和DATE。

似乎我错过了一些东西,因为现在每当我尝试将某些东西写入数据库时​​,它就会在标题中提到错误。

这是logcat输出:

02-20 12:25:06.475: E/SQLiteLog(4907): (1) table music has no column named duration
02-20 12:25:06.479: E/SQLiteDatabase(4907): Error inserting duration=0 date=20.2. name=blahblah
02-20 12:25:06.479: E/SQLiteDatabase(4907): android.database.sqlite.SQLiteException: table music has no column named duration (code 1): , while compiling: INSERT INTO music(duration,date,name) VALUES (?,?,?)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at com.matejhacin.beautifulvoicerecorder.database.DatabaseHandler.newSound(DatabaseHandler.java:32)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at com.matejhacin.beautifulvoicerecorder.RecordFragment$4.onClick(RecordFragment.java:198)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.os.Looper.loop(Looper.java:137)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at java.lang.reflect.Method.invoke(Method.java:525)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-20 12:25:06.479: E/SQLiteDatabase(4907):     at dalvik.system.NativeStart.main(Native Method)

表格查询:

String music_query =
        "CREATE TABLE " + MUSIC_TABLE_NAME + " ("
        + MUSIC_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + MUSIC_NAME + " TEXT"
        + MUSIC_DURATION + " TEXT"
        + MUSIC_DATE + " TEXT"
        + ");";

向表中添加数据的功能:

public int newSound(String name, String duration, String date){
    ContentValues cv = new ContentValues();
    cv.put(SQLiteHelper.MUSIC_NAME, name);
    cv.put(SQLiteHelper.MUSIC_DURATION, duration);
    cv.put(SQLiteHelper.MUSIC_DATE, date);
    open();
    return (int)db.insert(SQLiteHelper.MUSIC_TABLE_NAME, null, cv);
}

我没有忘记增加DATABASE_VERSION变量。我甚至尝试完全重新安装应用程序。

1 个答案:

答案 0 :(得分:4)

问题是您忘了在两列之间添加comma广告。

+ MUSIC_NAME + " TEXT"应该是+ MUSIC_NAME + " TEXT,"


所以你的music_query字符串应该是

String music_query =
        "CREATE TABLE " + MUSIC_TABLE_NAME + " ("
        + MUSIC_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + MUSIC_NAME + " TEXT, " // Need comma here
        + MUSIC_DURATION + " TEXT, " // Need comma here
        + MUSIC_DATE + " TEXT " // Need not comma here, because this is last column of table
        + ");";