我不完全确定我的代码的哪一部分正在实现这一点。这是我第一次使用Android编写SQLite编码,我使用ContentValues将记录输入数据库。我没有得到任何错误或任何数据,并且数据被正确插入,但是当我从数据库中提取数据时,我为每条记录获取了5个ListView条目。我要么误解了在使用ContentValues和.insert将数据放入数据库时输入数据的方式,要么在从数据库中检索数据时做错了。
以下是我用于将数据插入数据库的代码。
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类没有任何问题。非常感谢任何建议。
答案 0 :(得分: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);
答案 1 :(得分:1)
看起来你正在为每列调用insert()。将列值放入ContentValues对象中,并使用列名称的ID。然后拨打
database.insert(myTable, null, cv);
只有一次。