从SQLite数据库检索Int值

时间:2018-11-18 14:59:30

标签: sqlite integer

我正在尝试从SQLite数据库中检索一个整数,而当前查询使我的程序崩溃。这是我到目前为止的内容:

 */
public int getWin(String id){

    SQLiteDatabase db = this.getWritableDatabase();

    String query = "SELECT " + COL3 + " FROM " + TABLE_NAME +
            " WHERE " + COL2 + " = '" + id + "'";

    Log.d(TAG, "updateName: query: " + query);
    db.execSQL(query);
    int win = Integer.parseInt(query);
    return win;
}

我不确定为什么这行不通。提前致谢。

1 个答案:

答案 0 :(得分:0)

您正尝试将值SELECT .........转换为根据int win = Integer.parseInt(query);的数字。

对于SELECT语句,您需要通过 query rawQuery SQLiteDatabase方法检索游标(结果集),然后提取值从方法中访问,然后从相应的行访问相应的列。

我相信您会使用类似:-

public int getWin(String id){

    SQLiteDatabase db = this.getWritableDatabase();
    int rv = -1; //<<<<<<<<<< ADDED default value to return if no row found

    String query = "SELECT " + COL3 + " FROM " + TABLE_NAME +
            " WHERE " + COL2 + " = '" + id + "'";

    Log.d(TAG, "updateName: query: " + query);
    Cursor csr = db.rawQuery(query,null); //<<<<<<<<<< CHANGED to get the Cursor returned
    // ADDED the following IF construct
    if (csr.moveToFirst()) {
        rv = csr.getInt(csr.getColumnIndex(COL3));
    }
    //int win = Integer.parseInt(query); //<<<<<<<<<< DELETED (commented out)
    csr.close(); //<<<<<<<<<< ADDED should always close a Cursor when done with it
    return rv; //<<<<<<<<<< return the value (-1 if no row found)
}
  • 这假设您只需要WHERE子句标识的一行中的值。

如果可能,建议a)不要使用直接值构建查询(使其易于受到SQL注入的攻击),b)利用便捷的 query 方法。

同时应用 a b ,您的代码可能是:-

public int getWin(String id){

    SQLiteDatabase db = this.getWritableDatabase();
    int rv = -1;
    String whereclause = COL2 + "=?"; //<<<<<<<<<< where clause without where and ? for value that will be passed
    String[] whereargs = new String[]{String.valueOf(id)}; //<<<<<<<<<< arguments used by the whereclause ? replaced on a 1 for 1 basis
    String[] columns = new String[]{COL3}; //<<<<<<<<<< the columns to extract as a String array
    Cursor csr = db.query(TABLE_NAME,columns,whereclause,whereargs,null,null,null);
    if (csr.moveToFirst()) {
        rv = csr.getInt(csr.getColumnIndex(COL3));
    }
    csr.close();
    return rv;
}