我有一个sqlite数据库,我想查询并检索一些值(如果它们存在的话,以防它们不存在的情况下祝酒。
对于这个海豚,我有下一个代码,它将调用一个函数来创建游标,如果这不是空的,它将在edittext中检索信息,否则它将进行祝酒:
private String lookforelementID() {
// TODO Auto-generated method stub
int ElementRequest=0;
ElementRequest = Integer.parseInt(eTElementNumb.getText().toString());
try{
database db = new database(this);
db.open();
String passedReg = getIntent().getStringExtra(MainActivity.ID_STUDY);
String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);
if (returnedInfo1.matches("")){
Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
}else{
eTIDElement.setText(returnedInfo1);
String returnedInfo2 = db.elementID(ElementRequest, passedReg, 2);
eTElementCode.setText(returnedInfo2);
String returnedInfo3 = db.elementID(ElementRequest, passedReg, 3);
eTElementDecription.setText(returnedInfo3);
}
db.close();
}catch(ClassCastException e){
e.printStackTrace();
}
eTElementNumb.setText("");
return null;
}
光标的功能如下:
public String elementID(int elementRequest, String idStudy, int i) {
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWELEMENTID, KEY_STUDYID, KEY_ELEMENTCODE, KEY_ELEMENTNAME};
Cursor c = ourDatabase.query(DATABASE_TABLEELEMENTS, columns, KEY_ELEMENTCODE + "=" + elementRequest + " AND " + KEY_STUDYID + "=" + idStudy, null, null, null, null);
String ElementInformation = null;
if(c != null){
c.moveToFirst();
ElementInformation = c.getString(i);
}
return ElementInformation;
}
答案 0 :(得分:0)
您通过以下行声明并初始化Cursor
:
Cursor c = ourDatabase.query(DATABASE_TABLEELEMENTS, columns, KEY_ELEMENTCODE + "=" + elementRequest + " AND " + KEY_STUDYID + "=" + idStudy, null, null, null, null);
这意味着它不能null
(如果'我们的数据库'为空或无法访问NullPointerException
或其他某种Exception
将被抛出)。因此,您无需检查Cursor
是否为null
。
如何找出Cursor
是空的还是(如果不是)列值是否为空?
您可以利用moveToFirst()
以及isNull()
返回boolean
值的事实:
String ElementInformation = null;
if(c.moveToFirst() && ! c.isNull(i))
{
ElementInformation = c.getString(i);
}
return ElementInformation;
这样,如果elementID()
为空或,如果有一行符合搜索条件但其值为列,则您的方法null
会返回Cursor
'我'是null
。
当然,您现在必须相应地评估返回值:
String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);
if (returnedInfo1 == null){
Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
}
else{
// ... do something else ...
}
答案 1 :(得分:-1)
如果你怀疑是否找到游标对象是否为空,那么只需检查
if(c.moveToNext()){
//process your cursor object
}
else{
//your cursor is empty do whatever you want
}
另一方面,如果你想迭代光标对象,只需说
while(c.moveToNext()){
//process your cursor object
}