所以我有一个方法允许我通过使用SQL数据库中已有的名称来获取某个项目的id。我如何获取整行信息并将每个项目存储在自己的变量中。
仅适用于ID
的方法public Cursor getID(String name){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
String query = " SELECT " + COL1 + " FROM " + TABLE_NAME + " WHERE " + COL2 + " = '" + name + "'";
Cursor data = sqLiteDatabase.rawQuery(query, null);
return data;
}
获取查询并存储结果的方法
Cursor data = mydb2.getID(name);
int itemId= -1;
while(data.moveToNext()){
itemId = data.getInt(0);
}
使用下面的方法,我将如何使用此方法(或以任何其他方式获取整行的数据)将所有数据存储在自己的变量中。
public Cursor rowData(String name){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
String query = " SELECT * FROM " + TABLE_NAME + " WHERE " + COL2 + " = '" + name + "'";
Cursor data = sqLiteDatabase.rawQuery(query, null);
return data;
}
我知道这可能是一个愚蠢的问题,我已经尝试过查看其他问题,我已经做到了这一点,我只是不知道下一步该做什么(我对Sq Lite数据库来说很陌生)和Android开发)
答案 0 :(得分:0)
你会使用类似的东西: -
Cursor csr = instance_of_yourdbhelper.rowData();
while(csr.moveToNext()) {
long thisItemId = csr.getLong(csr.getColumnIndex(yourdbhelper.COL_1));
String thisName = csr.getString(csr.getColumnIndex(yourdbhelper.COL_2));
// etc for other columns
}
备注强>
yourdbhelper 是DatabaseHelper的类,它是扩展SQLiteOpenHelper的类(假设上述方法来自这样的类,因为这是SQLite的常见用法)
instance_of_yourdbhelper 是DatabaseHelper类的实例,即您可能有yourdbhelper dbhlpr = new yourdbhelper(parameters);
,在这种情况下, dbhlpr
就是实例。
这只会覆盖游标中每一行的相同变量(thisItemId和thisName),尽管rowData方法可能只返回一行。
使用 getColumnIndex
方法可能会遇到更少的错误,因为它会根据列名返回偏移量。 计算错误是导致问题的常见原因。
您可能希望处理无行返回的情况,在这种情况下您可以使用cursor.getCount()
,这将返回游标中的行数。