0

如果 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();
           }
4

3 回答 3

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
}
于 2013-11-12T12:08:29.557 回答
-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;
}
于 2013-11-12T10:10:22.580 回答
-1

即使自动增量值是integer在表中键入的,它也会text在尝试从表中获取时返回。因此,如果您使用getInt().So 获取自动增量值,您将收到错误消息,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();
}
于 2013-11-12T10:05:45.847 回答