2012-01-14 190 views
0

我不完全確定我的代碼的哪個部分正在實現此目的。這是我第一次嘗試使用Android編寫SQLite,我使用ContentValues將記錄輸入到數據庫中。我沒有得到任何錯誤或任何東西,數據插入正確,但是當我從數據庫中提取數據時,每條記錄都得到5個ListView條目。這是要麼我誤解使用ContentValues和.insert將數據放入數據庫時​​輸入的數據,要麼在從數據庫檢索數據時出錯。ListView從SQLite返回多條記錄來自相同的記錄

這是我用來將數據插入數據庫的代碼。

DatabaseHelper helper = new DatabaseHelper(this); 
    database = helper.getWritableDatabase(); 

    ContentValues cv=new ContentValues(); 

    cv.put(myName, titleText); 
    cv.put(myFileName, filenameText); 
    cv.put(myRecDate, recordedText); 
    cv.put(myPubDate, publishedText); 
    cv.put(myDescription, DescriptionText); 

    database.insert(myTable, castName, cv); 
    database.insert(myTable, castFileName, cv); 
    database.insert(myTable, castRecDate, cv); 
    database.insert(myTable, castPubDate, cv); 
    database.insert(myTable, castDescription, cv); 

    database.close(); 

這是我填充我的ListView的代碼。

DatabaseHelper helper = new DatabaseHelper(this); 
    database = helper.getWritableDatabase(); 
    Cursor data = database.query("myDb", fields, null, null, null, null, null); 
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.idText, R.id.name, R.id.description}); 

    final ListView view = getListView(); 

    view.setHeaderDividersEnabled(true); 
    view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null)); 
    setListAdapter(dataSource); 

    database.close(); 

由於數據成功插入,我不認爲我的DatabaseHelper類有什麼問題。任何意見是極大的讚賞。

回答

1

ContentValues應該表示單個記錄。所以你有這部分你從你的對象創建記錄。這些應該是列名到列值的映射。

cv.put(myName, titleText); 
cv.put(myFileName, filenameText); 
cv.put(myRecDate, recordedText); 
cv.put(myPubDate, publishedText); 
cv.put(myDescription, DescriptionText); 

然後在這裏插入相同的記錄5次。我假設你的第二個參數是列名。

database.insert(myTable, castName, cv); 
database.insert(myTable, castFileName, cv); 
database.insert(myTable, castRecDate, cv); 
database.insert(myTable, castPubDate, cv); 
database.insert(myTable, castDescription, cv); 

在Android中,你只需要指定表名,爲myTable在這種情況下,第二個參數應該是null,最後一個參數是ContentValues對象。

所以正確的方式做,這將是:

ContentValues cv = new ContentValues(); 
cv.put(nameColumn, nameValue); 
cv.put(fileNameColumn, fileNameValue); 
... etc ... 

database.insert(tableName, null, cv); 
+0

ohhhhhh ...好的。謝謝 :) – Carnivoris 2012-01-14 18:22:22

1

看起來你調用插件()爲每列。將列值放入帶有列名稱ID的ContentValues對象中。然後致電

database.insert(myTable, null, cv); 

只有一次。