Android SQLite:如何检索自动递增的userId?

时间:2013-11-12 09:55:47

标签: java android database sqlite

如果userName已知,我正在尝试检索userId。例如,在我创建的下面的函数中,接受userName并拆分userId;然而,它正在使应用程序崩溃。所以我认为以下功能肯定有问题,因为我发表评论,应用程序运行正常。

public int getUserId(String userName){
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT userId from users WHERE userName=" + userName;

        Cursor cursor = db.rawQuery(query, null);
        // Move to first row
        cursor.moveToFirst();

        int userId = cursor.getInt(cursor.getColumnIndex("userId"));

        return userId;
    }

修改

我也尝试使用以下代码将userId保存到共享首选项中,似乎这也会导致问题。

   private void saveUserId(String key, int value) {
       settings = getSharedPreferences("MYPREFS", 0);
       editor = settings.edit();
       editor.putInt(key, value);
       editor.commit();
           }

3 个答案:

答案 0 :(得分:0)

您的问题是您将用户名直接插入到字符串中,并将其作为SQL表达式读取。

理论上,您可以将字符串包装成引号('),但如果字符串包含引号或其他特殊字符,这仍会产生问题。 在SQL语句中使用字符串值的最安全(也是最简单)的方法是使用参数:

public int getUserId(String userName) {
    SQLiteDatabase db = getReadableDatabase();
    String query = "SELECT userId FROM users WHERE userName = ?";
    String[] parameters = new String[] { userName };
    Cursor cursor = db.rawQuery(query, parameters);
    if (cursor.moveToFirst())
        return cursor.getInt(0);
    else
        return -1; // not found
}

答案 1 :(得分:-1)

即使表中的自动增量值为integer,当尝试从表中获取时,它也将返回text。因此,如果您使用getInt(),您将收到错误 要获得自动增量值,请使用getString()代替getInt()

String[] args = { "somename"};
Cursor cursor = db.query("TABLE_NAME", null, "userName=?", args, null,null,null);
cursor.moveToFirst();
while(!cursor.isAfterLast())
{
  int userid = Integer.ParseInt(cursor.getString(0));//here is 0 is postion of column **userId** in table TABLE_NAME

 // or use this int userid = Integer.ParseInt(cursor.getString(cursor.getColumnIndex("userId")));

cursor.movToNext();
}

答案 2 :(得分:-1)

试试这个:

public int getUserId(String userName){

int userId;
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(tableName, new String[] { userId }, userName+ "=?",
            new String[] { userName }, null, null, null, null);

while(cursor.moveToNext())
{
    userId = cursor.getInt(cursor.getColumnIndex("userId"));
}
cursor.close();

return userId;
}