所以我想找到最大ID并通过添加1来返回它。
以下是我在SQLhelper中的代码。它看起来很错,因为它的公共空白,但我返回CR。我有点困惑,因为光标用于读取记录,但我只想使用SQL查询返回整数的结果。
public int getID( String name){
String idquery="SELECT IFNULL(MAX(id),0)+1 FROM "+TableInfo.TABLE_NAME+ " WHERE appliance="+name;
SQLiteDatabase SQ=this.getReadableDatabase();
Cursor CR=SQ.rawQuery(idquery,null);
return CR;
}
这就是我从另一个活动中调用它的方式
int no_id=DB.getID(name);
有人请帮助我。谢谢。
答案 0 :(得分:2)
你必须这样做:
public int getID( String name){
String idquery="SELECT IFNULL(MAX(id),0)+1 FROM "+TableInfo.TABLE_NAME+ " WHERE appliance="+name;
SQLiteDatabase SQ=this.getReadableDatabase();
Cursor CR=SQ.rawQuery(idquery,null);
int id = -1;
if (CR != null && CR.getCount() > 0) {
CR.moveToFirst();
id = CR.getInt(c.getColumnIndex(YOUR_COLUMN_NAME));
CR.close();
}
return id;
}
<强>编辑:强>
更改查询 IFNULL(MAX(id),0)+1
中的列alias,例如 IFNULL(MAX(id),0)+1 as maxcount
,然后您可以在从光标中获取值时提供它:< / p>
id = CR.getInt(c.getColumnIndex("maxcount"));
它会根据需要返回Integer。
希望它会对你有所帮助。
答案 1 :(得分:1)
试试这个
public int getMaxID(){
int maxID = 0;
String selectQuery = "SELECT "+here you primary key name +" FROM " + TableInfo.TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do{
maxID = cursor.getInt(0);
}while(cursor.moveToNext());
}
return cursor.getCount();
}
答案 2 :(得分:1)
如果name
是字符串值,则必须在SQL中引用它。但更好的方法是使用参数。
要从查询中读取单个数字而不必使用光标,有一个有用的helper function:
int getID(String name) {
SQLiteDatabase db = getReadableDatabase();
return (int)DatabaseUtils.longForQuery(db,
"SELECT IFNULL(MAX(id),0)+1"+
" FROM "+TableInfo.TABLE_NAME+
" WHERE appliance=?",
new String[]{ name });
}