【问题标题】:Incompatible data type in parameterized query? (Java)参数化查询中的数据类型不兼容? (爪哇)
【发布时间】:2021-12-24 15:42:09
【问题描述】:

我目前正在开发一个使用 SQL 数据库存储用户帐户信息(用户名、密码等)的应用程序。在应用程序中,有普通用户和管理员用户。我还在使用参数化查询,这对我来说还是很新的东西,以检查用户的管理员状态。 users 表(我用来存储用户信息)的 onCreate() 方法如下所示。

public void onCreate(SQLiteDatabase myDB) {
    myDB.execSQL("create Table users(username Text primary key, password Text, email Text, 
    phone Text, admin Integer, userID Text)");
}

因此,如您所见,admin 列存储了一个整数。在我的应用程序的上下文中,0 表示非管理员用户,1 表示管理员用户。我正在使用参数化查询来检查某个用户是否存在于users 表中并且是否具有管理员状态(如果他们的管理员列中的整数为 1)。检查用户是否为管理员的代码如下所示。

// returns true if user is an admin, false if non-admin
public boolean checkAdmin(String username) {
    SQLiteDatabase myDB = this.getWritableDatabase();
    Cursor cursor = myDB.rawQuery("select * from users where username = ? and admin = ?", new String[] {username,1});
    if (cursor.getCount()>0) // cursor > 0 if user exists in the database and has admin status
        return true;
    else
        return false;
}

本质上,SQL 查询只是select * from users where username = username and admin = 1,但我遇到的问题是new String[] {username,1}。 “1”参数带有红色下划线,Android Studio 告诉我所需的类型是 String。同样,我还是参数化查询的新手,我很困惑为什么当 admin 数据类型为 int 时会出现这样的错误。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java android sql admin


【解决方案1】:

您正在声明一个字符串数组new String[]尝试将 1 添加为字符串。

Cursor cursor = myDB.rawQuery("select * from users where username = ? and admin = ?", new String[] {username,"1"});

【讨论】:

  • 我明白了。不过,我之前已经将 1 设为 String,但这不会将 String 对象传递给检查 int 的东西吗?
  • @Ralf SQLite 将自动转换为正确的类型。只要字符串表示等于您在 SQL 查询中的期望
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多