2012-01-14 99 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); 

只有一次。