无法从Android SQLite数据库检索数据

无法从Android SQLite数据库检索数据,android,sqlite,Android,Sqlite,嗨,我是Android开发的新手。我遇到的问题是,我可以成功地创建一个表并将数据添加到表中,但是我无法从数据库检索数据,arraylist总是返回空值。请帮帮我:-) 公共类DatabaseHandler扩展了SQLiteOpenHelper { //所有静态变量 //数据库版本 私有静态最终int数据库_VERSION=1; //数据库名称 私有静态最终字符串数据库\u NAME=“BloodPressureRecorder”; //血压表名称 私人静态最终字符串表\u血压=“血压”; //血

嗨,我是Android开发的新手。我遇到的问题是,我可以成功地创建一个表并将数据添加到表中,但是我无法从数据库检索数据,arraylist总是返回空值。请帮帮我:-)

公共类DatabaseHandler扩展了SQLiteOpenHelper
{
//所有静态变量
//数据库版本
私有静态最终int数据库_VERSION=1;
//数据库名称
私有静态最终字符串数据库\u NAME=“BloodPressureRecorder”;
//血压表名称
私人静态最终字符串表\u血压=“血压”;
//血压表列名称
私有静态最终字符串键\u SYS=“SYS”;
私有静态最终字符串密钥_DIA=“DIA”;
私有静态最终字符串键\u RATE=“RATE”;
sqlitedb数据库;
公共数据库处理程序(上下文)
{
super(上下文、数据库名称、null、数据库版本);
}
//创建表
@凌驾
public void onCreate(SQLiteDatabase db)
{
字符串CREATE_BLOOD PRESSURE_TABLE=“CREATE TABLE”+TABLE_BLOOD_PRESSURE+
(“+键系统+”整数,“+键直径+”整数,”
+键_RATE+“整数”+”;
db.execSQL(创建血压表);
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion)
{
//删除旧表(如果存在)
db.execSQL(“如果存在,则删除表格”+表格血压);
//再次创建表
onCreate(db);
}
//增加新血压
公共真空添加血压(血压结果血压)
{
SQLiteDatabase db=this.getReadableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_SYS,bloodPressure.getSys());//systolical
value.put(键直径,血压.getDia());//舒张压
value.put(KEY_RATE,bloodPressure.getRate());//RATE
//插入行
db.插入(表血压,空,值);
db.close();//关闭数据库连接
}
//获得所有血压
公共列表getAllBloodPressure()
{
List bloodP=new ArrayList();
String selectQuery=“SELECT*FROM”+表格血压;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst())
{
做
{
血压结果血压结果=新血压结果();
血压结果setSys(Integer.parseInt(cursor.getString(0));
血压结果setDia(Integer.parseInt(cursor.getString(1));
bloodPressureResult.setRate(Integer.parseInt(cursor.getString(2));
血液压力添加(血液压力结果);
}while(cursor.moveToNext());
}
cursor.close();
回归血球;
}
}

我注意到的第一件事是您正在使用
getString
尝试从光标中检索整数。您应该使用
getInt


其次,您没有作为主索引的“_id”列,因此返回的游标将无法与任何标准适配器一起使用。他们希望并要求光标中有一个“\u id”列。

您确定要将这些值插入表中吗


我认为应该使用
SQLiteDatabase db=this.getWritableDatabase()
而不是
SQLiteDatabase db=this.getReadableDatabase()添加血压功能。

试试这个,我帮你修改它

public List<BloodPressureResult> getAllBloodPressure(){




List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>();


final String[] columns = new String[] { KEY_SYS, KEY_DIA, KEY_RATE };
SQLiteDatabase db = getReadableDatabase();
final Cursor cursor = db.query(TABLE_BLOOD_PRESSURE, columns, "", null, "", "", "", "");
if(cursor.getCount>0){

while (cursor.moveToNext()) {
BloodPressureResult bloodPressureResult = new BloodPressureResult();
bloodPressureResult.setSys(cursor.getInt(cursor.getColumnIndex(KEY_SYS)));      
bloodPressureResult.setDia(cursor.getInt(cursor.getColumnIndex(KEY_DIA)));                 
bloodPressureResult.setRate(cursor.getInt(cursor.getColumnIndex(KEY_RATE)));     
bloodP.add(bloodPressureResult);   
}
}
cursor.close();
db.close();}
public List getAllBloodPressure(){
List bloodP=new ArrayList();
最终字符串[]列=新字符串[]{KEY\u SYS,KEY\u DIA,KEY\u RATE};
SQLiteDatabase db=getReadableDatabase();
最后一个游标=db.query(表血压,列,“”,空,“,”,“,”,”);
if(cursor.getCount>0){
while(cursor.moveToNext()){
血压结果血压结果=新血压结果();
血压结果设置系统(cursor.getInt(cursor.getColumnIndex(KEY_SYS));
血压结果setDia(cursor.getInt(cursor.getColumnIndex(KEY_DIA));
血压结果设置率(cursor.getInt(cursor.getColumnIndex(KEY_RATE));
血液压力添加(血液压力结果);
}
}
cursor.close();
db.close();}

您是否尝试登录以查看是否可以从光标获取任何数据?当您从db请求时,检查光标值是否为空?只是一个建议,在创建此方法时使用“如果不存在…”谢谢您的回答,Barak。现在我可以从数据库中检索数据了。:-)
public List<BloodPressureResult> getAllBloodPressure(){




List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>();


final String[] columns = new String[] { KEY_SYS, KEY_DIA, KEY_RATE };
SQLiteDatabase db = getReadableDatabase();
final Cursor cursor = db.query(TABLE_BLOOD_PRESSURE, columns, "", null, "", "", "", "");
if(cursor.getCount>0){

while (cursor.moveToNext()) {
BloodPressureResult bloodPressureResult = new BloodPressureResult();
bloodPressureResult.setSys(cursor.getInt(cursor.getColumnIndex(KEY_SYS)));      
bloodPressureResult.setDia(cursor.getInt(cursor.getColumnIndex(KEY_DIA)));                 
bloodPressureResult.setRate(cursor.getInt(cursor.getColumnIndex(KEY_RATE)));     
bloodP.add(bloodPressureResult);   
}
}
cursor.close();
db.close();}