【发布时间】:2015-04-03 06:19:05
【问题描述】:
我搜索了很多,但没有找到任何关于如何在 RecyclerView 中显示 SQLite 数据的分步指南。谁能向我解释我该怎么做?
我的DataBaseAdapter:
public class DataBaseAdapter {
DataBaseHelper helper;
public DataBaseAdapter(Context context) {
helper = new DataBaseHelper(context);
}
public long insertData(String name, String card, String code) {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DataBaseHelper.NAME, name);
contentValues.put(DataBaseHelper.CARD, card);
contentValues.put(DataBaseHelper.CODE, code);
long id = db.insert(DataBaseHelper.TABLE_NAME, null, contentValues);
return id;
}
public String getData(String name){
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME+" = '"+name+"'", null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
buffer.append(name + " " + card + " " + code + "\n");
}
return buffer.toString();
}
public String getAllData() {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.UID, DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int cid = cursor.getInt(index1);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
buffer.append(cid + " " + name + " " + card + " " + code + "\n");
}
return buffer.toString();
}
static class DataBaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "cardsdatabase";
private static final String TABLE_NAME = "CARDSTABLE";
private static final String UID = "_id";
private static final String NAME = "Name";
private static final String CARD = "Card";
private static final String CODE = "Code";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_TABLE = "create table "
+ TABLE_NAME + " (" + UID
+ " integer primary key autoincrement, " + NAME
+ " text not null, " + CARD + " ext not null, " + CODE
+ " text not null);";
private static final String DROP_TABLE = "DROP TABLE IF EXISTS "
+ TABLE_NAME;
private Context context;
public DataBaseHelper(Context context) {
super(context, DataBaseHelper.DATABASE_NAME, null, DataBaseHelper.DATABASE_VERSION);
this.context = context;
Toast toast = Toast.makeText(context, "constructor called", Toast.LENGTH_LONG);
toast.show();
}
@Override
public void onCreate(SQLiteDatabase db) {
//CREATE TABLE CARDSTABLE(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(255));
try {
db.execSQL(CREATE_TABLE);
Toast toast = Toast.makeText(context, "onCreate called", Toast.LENGTH_LONG);
toast.show();
} catch (SQLException e) {
Toast toast = Toast.makeText(context, "" + e, Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Toast toast = Toast.makeText(context, "onUpgrade called", Toast.LENGTH_LONG);
toast.show();
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e) {
Toast toast = Toast.makeText(context, "" + e, Toast.LENGTH_LONG);
toast.show();
}
}
}
你的回答对我很有帮助,谢谢
编辑:
DataBean 类:
public class DataBean {
//private variables
int _id;
String _name;
String _card_value;
String _card_code;
// Empty constructor
public DataBean(){
}
// constructor
public DataBean(int id, String name, String _card_value, String _card_code){
this._id = id;
this._name = name;
this._card_value = _card_value;
this._card_code = _card_code;
}
// constructor
public DataBean(String name, String _card_value, String _card_code){
this._name = name;
this._card_value = _card_value;
this._card_code = _card_code;
}
// getting ID
public int getID(){
return this._id;
}
// setting id
public void setID(int id){
this._id = id;
}
// getting name
public String getName(){
return this._name;
}
// setting name
public void setName(String name){
this._name = name;
}
// getting CardValue
public String getCardValue(){
return this._card_value;
}
// setting CardValue
public void setCardValue(String _card_value){
this._card_value = _card_value;
}
// getting CardCode
public String getCardCode(){
return this._card_code;
}
// setting CardCode
public void setCardCode(String _card_code){
this._card_code = _card_code;
}
}
这些行我添加到我的 DataBaseAdapter:
public DataBean getDat(String name){
DataBean bean=null;
SQLiteDatabase db=this.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME+" = '"+name+"'", null, null, null, null);
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int id = cursor.getInt(index);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
bean = new DataBean(id, name, card, code);
}
return bean;
}
public List<DataBean> gelAllDat(){
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db=this.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME, null, null, null, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int cid = cursor.getInt(index);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
DataBean bean = new DataBean(cid, name, card, code);
list.add(bean);
}
return list;
}
最后一个问题?我需要在 DataBaseAdapter 中更改我的插入数据?
编辑 2:
我将此代码添加到我的 DataBaseAdapter:
public List<DataBean> getAllCards(){
List<DataBean> list=new ArrayList<>();
String query = "SELECT * FROM " + DataBaseHelper.TABLE_NAME;
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
while (cursor.moveToNext()) {
//int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
//int cid = cursor.getInt(index);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
DataBean bean = new DataBean(name, card, code);
list.add(bean);
}
return list;
}
public DataBean getData(String name) {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
DataBean bean=null;
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, DataBaseHelper.NAME + " = '" + name + "'", null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
//buffer.append(name + " " + card + " " + code + "\n");
bean = new DataBean( name,card, code);
}
return bean;
}
【问题讨论】:
-
您在使用
Cursor的大多数方法中都泄漏了它们。完成后请关闭Cursor。除此之外,上述清单中没有任何代码可以创建任何可以显示在任何AdapterView(例如ListView)或RecyclerView中的内容。您将需要一些数据结构来表示模型数据的集合(例如,ArrayListof POJO、Cursor)。一旦你创建了它,然后回到这里询问如何将模型数据放入RecyclerView,这样我们就知道模型数据的结构是什么了。 -
你必须使用 SQLite 吗?它有太多样板代码,如果不是强制性的,请在此处查看我的答案,该答案涵盖了如何使用 Realm stackoverflow.com/questions/26517855/… 在几行中从数据库中填充 RecyclerView
-
@PirateApp 感谢回复,我试试看!
标签: android android-sqlite android-recyclerview