2012-01-14 4 views
0

Я не совсем уверен, какая часть моего кода делает это. Это моя первая попытка кодирования в SQLite с Android, и я использую 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 ... ok. благодаря :) – Carnivoris

1

Похоже, вы вызываете вставку() для каждого столбца. Поместите значения столбца в объект ContentValues ​​с идентификатором имени столбца. Затем позвоните по телефону

database.insert(myTable, null, cv); 

только один раз.

Смежные вопросы