2014-02-20 75 views
-1

我的SQLite數據庫只有兩列在開始(ID和名稱),現在我又增加了兩個: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變量。我甚至嘗試徹底重新安裝應用程序。

+0

確保你沒有插入一些數據後更新列。嘗試清除應用程序數據後,或重新安裝應用程序。 –

+0

我已經嘗試多次重新安裝應用程序 – Guy

+0

它只是錯字...您在CREATE語句中忘記了逗號 – Selvin

回答

4

問題你忘了將它放在兩欄之間的廣告comma

Like + 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 
     + ");"; 
+0

哦,我的...我可以發誓我經歷了這100多次這7行代碼,我無法發現這個小錯誤。謝謝! – Guy