从 SQLite 数据库中获取数组列表 Android
Get arraylist from SQLite database Android
我有一个问题,当我尝试在 Android 中从我的 SQLite 数据库中显示 ArrayList 中的数据时,我只收到这个
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:1 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:2 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:3 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:4 name:null code:null value:null country:null
01-06 18:03:10.115 18254-18254/com.testdymamicalarray I/Array﹕ id:5 name:null code:null value:null country:null
01-06 18:03:10.115 18254-18254/com.testdymamicalarray I/Array﹕ id:6 name:null code:null value:null country:null
请帮帮我,我错在哪里?
我的 DataBaseAdapter:
public class DataBaseAdapter {
Cards cards;
DataBaseHelper helper;
public DataBaseAdapter (Context context){
helper = new DataBaseHelper(context);
}
public long insertData(Cards cards){
cards = new Cards();
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, cards.getName());
contentValues.put(helper.KEY_VALUE,cards.getValue());
contentValues.put(helper.KEY_FORMAT,cards.getCode());
contentValues.put(helper.KEY_COUNTRY,cards.getCountry());
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
}
public List<Cards> getData(){
List<Cards> list = new ArrayList<>();
SQLiteDatabase sqLiteDatabase= helper.getWritableDatabase();
Cursor cursor= sqLiteDatabase.rawQuery(helper.QUERY,null);
while (cursor.moveToNext()){
int index0=cursor.getColumnIndex(helper.UID);
int index1=cursor.getColumnIndex(helper.KEY_NAME);
int index2=cursor.getColumnIndex(helper.KEY_VALUE);
int index3=cursor.getColumnIndex(helper.KEY_FORMAT);
int index4=cursor.getColumnIndex(helper.KEY_COUNTRY);
int cid = cursor.getInt(index0);
String name = cursor.getString(index1);
String value = cursor.getString(index2);
String format = cursor.getString(index3);
String country = cursor.getString(index4);
Cards cards = new Cards(cid,name,value,format,country);
list.add(cards);
}
return list;
}
public String getAllData() {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.UID, DataBaseHelper.KEY_NAME, DataBaseHelper.KEY_VALUE, DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(helper.UID);
int index2 = cursor.getColumnIndex(helper.KEY_NAME);
int index3 = cursor.getColumnIndex(helper.KEY_VALUE);
int index4 = cursor.getColumnIndex(helper.KEY_FORMAT);
int index5 = cursor.getColumnIndex(helper.KEY_COUNTRY);
int cid = cursor.getInt(index1);
String name = cursor.getString(index2);
String value = cursor.getString(index3);
String format = cursor.getString(index4);
String country = cursor.getString(index5);
buffer.append(cid + " " + name + " " + value + " " + format + " " + country +"\n");
}
return buffer.toString();
}
static class DataBaseHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "cardsdata";
private final static String TABLE_NAME = "CARDSTABLE";
private final static int DATABASE_VERSION = 1;
private final static String UID = "_id";
private final static String KEY_NAME = "NAME";
private final static String KEY_VALUE = "Value";
private final static String KEY_FORMAT = "Format";
private final static String KEY_COUNTRY = "Country";
private final static String CREATE_TABLE = "create table "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+KEY_NAME+" text not null, "+KEY_VALUE+" text not null, "+KEY_FORMAT+" text not null,"+KEY_COUNTRY+");";
private final static String QUERY = "SELECT * FROM " +TABLE_NAME ;
private String[] COLUMNS = {DataBaseHelper.UID,DataBaseHelper.KEY_NAME,DataBaseHelper.KEY_VALUE,DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
private final static String DROP_TABLE = "DROP TABLE IF EXISTS" + TABLE_NAME;
private Context context;
//CREATE TABLE CARDSTABLE (_id INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR(255));
public DataBaseHelper(Context context) {
super(context,TABLE_NAME, null, DATABASE_VERSION);
this.context=context;
Toast toast=Toast.makeText(context,"Constructor called",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Toast toast=Toast.makeText(context,"Success",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
} catch (SQLException e) {
Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL(DROP_TABLE);
onCreate(db);
Toast toast=Toast.makeText(context,"Upgrage success",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
} catch (SQLException e) {
Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
}
}
Getter 和 Setter class 卡片:
public class Cards {
int id;
String name;
String code;
String value;
String country;
public Cards(int id, String name, String code, String value,String country) {
this.id = id;
this.name = name;
this.code = code;
this.value = value;
this.country = country;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Cards(String name, String code, String value , String country) {
this.name = name;
this.code = code;
this.value = value;
this.country = country;
}
public Cards() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return String.format("id:%d name:%s code:%s value:%s country:%s",
id, name, code, value, country);
}
}
在 MainActivity 中,我从 EditText:
获取文本
String name=cardName.getText().toString();
String value=cardValue.getText().toString();
String format=cardFormat.getText().toString();
String country=cardCountry.getText().toString();
long id=dataBaseAdapter.insertData(new Cards(name,value,format,country));
编辑:
当我改变我的方法 insertData 开始工作时:
public long insertData(String name, String value, String format , String country){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, name);
contentValues.put(helper.KEY_VALUE,value);
contentValues.put(helper.KEY_FORMAT,format);
contentValues.put(helper.KEY_COUNTRY,country);
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
}
我删除了使用 class Cards ,现在一切正常:
01-06 18:42:44.757 27317-27317/com.testdymamicalarray I/Array﹕ id:1 name:s code:d value:s country:s
01-06 18:42:44.757 27317-27317/com.testdymamicalarray I/Array﹕ id:2 name:dddf code:dfg value:ffgg country:fggg
但我还是不明白为什么我的 getter & setter class Cards 不能插入,你有什么想法吗?
cards = new Cards();
这将构造一个具有默认值的新 Cards
对象。 null
是对象引用的默认值,例如 String
s.
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, cards.getName());
contentValues.put(helper.KEY_VALUE,cards.getValue());
contentValues.put(helper.KEY_FORMAT,cards.getCode());
contentValues.put(helper.KEY_COUNTRY,cards.getCountry());
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
此处您将默认空值存储到数据库并捕获自动生成的 ID。
我有一个问题,当我尝试在 Android 中从我的 SQLite 数据库中显示 ArrayList 中的数据时,我只收到这个
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:1 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:2 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:3 name:null code:null value:null country:null
01-06 18:03:10.114 18254-18254/com.testdymamicalarray I/Array﹕ id:4 name:null code:null value:null country:null
01-06 18:03:10.115 18254-18254/com.testdymamicalarray I/Array﹕ id:5 name:null code:null value:null country:null
01-06 18:03:10.115 18254-18254/com.testdymamicalarray I/Array﹕ id:6 name:null code:null value:null country:null
请帮帮我,我错在哪里?
我的 DataBaseAdapter:
public class DataBaseAdapter {
Cards cards;
DataBaseHelper helper;
public DataBaseAdapter (Context context){
helper = new DataBaseHelper(context);
}
public long insertData(Cards cards){
cards = new Cards();
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, cards.getName());
contentValues.put(helper.KEY_VALUE,cards.getValue());
contentValues.put(helper.KEY_FORMAT,cards.getCode());
contentValues.put(helper.KEY_COUNTRY,cards.getCountry());
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
}
public List<Cards> getData(){
List<Cards> list = new ArrayList<>();
SQLiteDatabase sqLiteDatabase= helper.getWritableDatabase();
Cursor cursor= sqLiteDatabase.rawQuery(helper.QUERY,null);
while (cursor.moveToNext()){
int index0=cursor.getColumnIndex(helper.UID);
int index1=cursor.getColumnIndex(helper.KEY_NAME);
int index2=cursor.getColumnIndex(helper.KEY_VALUE);
int index3=cursor.getColumnIndex(helper.KEY_FORMAT);
int index4=cursor.getColumnIndex(helper.KEY_COUNTRY);
int cid = cursor.getInt(index0);
String name = cursor.getString(index1);
String value = cursor.getString(index2);
String format = cursor.getString(index3);
String country = cursor.getString(index4);
Cards cards = new Cards(cid,name,value,format,country);
list.add(cards);
}
return list;
}
public String getAllData() {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.UID, DataBaseHelper.KEY_NAME, DataBaseHelper.KEY_VALUE, DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(helper.UID);
int index2 = cursor.getColumnIndex(helper.KEY_NAME);
int index3 = cursor.getColumnIndex(helper.KEY_VALUE);
int index4 = cursor.getColumnIndex(helper.KEY_FORMAT);
int index5 = cursor.getColumnIndex(helper.KEY_COUNTRY);
int cid = cursor.getInt(index1);
String name = cursor.getString(index2);
String value = cursor.getString(index3);
String format = cursor.getString(index4);
String country = cursor.getString(index5);
buffer.append(cid + " " + name + " " + value + " " + format + " " + country +"\n");
}
return buffer.toString();
}
static class DataBaseHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "cardsdata";
private final static String TABLE_NAME = "CARDSTABLE";
private final static int DATABASE_VERSION = 1;
private final static String UID = "_id";
private final static String KEY_NAME = "NAME";
private final static String KEY_VALUE = "Value";
private final static String KEY_FORMAT = "Format";
private final static String KEY_COUNTRY = "Country";
private final static String CREATE_TABLE = "create table "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+KEY_NAME+" text not null, "+KEY_VALUE+" text not null, "+KEY_FORMAT+" text not null,"+KEY_COUNTRY+");";
private final static String QUERY = "SELECT * FROM " +TABLE_NAME ;
private String[] COLUMNS = {DataBaseHelper.UID,DataBaseHelper.KEY_NAME,DataBaseHelper.KEY_VALUE,DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
private final static String DROP_TABLE = "DROP TABLE IF EXISTS" + TABLE_NAME;
private Context context;
//CREATE TABLE CARDSTABLE (_id INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR(255));
public DataBaseHelper(Context context) {
super(context,TABLE_NAME, null, DATABASE_VERSION);
this.context=context;
Toast toast=Toast.makeText(context,"Constructor called",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Toast toast=Toast.makeText(context,"Success",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
} catch (SQLException e) {
Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL(DROP_TABLE);
onCreate(db);
Toast toast=Toast.makeText(context,"Upgrage success",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
} catch (SQLException e) {
Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
}
}
Getter 和 Setter class 卡片:
public class Cards {
int id;
String name;
String code;
String value;
String country;
public Cards(int id, String name, String code, String value,String country) {
this.id = id;
this.name = name;
this.code = code;
this.value = value;
this.country = country;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Cards(String name, String code, String value , String country) {
this.name = name;
this.code = code;
this.value = value;
this.country = country;
}
public Cards() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return String.format("id:%d name:%s code:%s value:%s country:%s",
id, name, code, value, country);
}
}
在 MainActivity 中,我从 EditText:
获取文本String name=cardName.getText().toString();
String value=cardValue.getText().toString();
String format=cardFormat.getText().toString();
String country=cardCountry.getText().toString();
long id=dataBaseAdapter.insertData(new Cards(name,value,format,country));
编辑:
当我改变我的方法 insertData 开始工作时:
public long insertData(String name, String value, String format , String country){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, name);
contentValues.put(helper.KEY_VALUE,value);
contentValues.put(helper.KEY_FORMAT,format);
contentValues.put(helper.KEY_COUNTRY,country);
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
}
我删除了使用 class Cards ,现在一切正常:
01-06 18:42:44.757 27317-27317/com.testdymamicalarray I/Array﹕ id:1 name:s code:d value:s country:s
01-06 18:42:44.757 27317-27317/com.testdymamicalarray I/Array﹕ id:2 name:dddf code:dfg value:ffgg country:fggg
但我还是不明白为什么我的 getter & setter class Cards 不能插入,你有什么想法吗?
cards = new Cards();
这将构造一个具有默认值的新 Cards
对象。 null
是对象引用的默认值,例如 String
s.
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, cards.getName());
contentValues.put(helper.KEY_VALUE,cards.getValue());
contentValues.put(helper.KEY_FORMAT,cards.getCode());
contentValues.put(helper.KEY_COUNTRY,cards.getCountry());
long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;
此处您将默认空值存储到数据库并捕获自动生成的 ID。