【问题标题】:select in SQlite Database在 SQlite 数据库中选择
【发布时间】:2026-01-20 15:30:02
【问题描述】:

如何在 SQLite 数据库中选择两列。我写了这段代码,但我写错了代码。谁能帮助我我的错误在哪里?

 cursor = db.rawQuery("SELECT * FROM "+ DatabaseHelper.TableUsers+" WHERE "+DatabaseHelper.COL_UserName,DatabaseHelper.COL_Password+,new String[]{UserName, Password});

【问题讨论】:

  • 该代码无法编译,请发布您的实际代码并具体说明您遇到的问题。如果是异常,请发布完整的堆栈跟踪。
  • 这太棒了。使用存储过程而不是拼凑在一起。
  • 先生,我从11月开始学习Android

标签: android sqlite android-sqlite


【解决方案1】:

我立即想打开这个答案是基于您正确使用 SQL 术语的事实,并且您知道 select two columns 意味着从返回的一个(或多个)行中选择两列一个查询


您使用了错误的WHERE 子句。它旨在选择列具有给定值的位置。例如,如果您有一个带有INTEGER PRIMARY_KEY 的表并且想要选择带有id = 10 的行,您可以使用SELECT * FROM table WHERE id=10

您应该使用存储过程,以便转换为支持 SELECT * FROM table WHERE id=? 并传递一个 String[] 数组和要填充的参数。

现在您已经了解了 WHERE 子句的实际基础知识,让我继续您的代码。

您正在使用,,因此在字符串之外添加了更多参数。其次,你不能有多个传递的参数,唯一支持的是一个字符串列表,这是为了避免 SQL 注入。

现在,选择特定的列更容易了。

首先,您需要moveToFirst 以确保查询不为空。然后isAfterLast 用于检查是否没有更多条目。然后你只需选择你想要的适用值。示例:

if (cursor.moveToFirst()) {
        while (!cursor.isAfterLast()) {
            //These are just examples of values you can select from the returned row. Edit based on your database and the rows you want. `COLUMN_ID` and `COLUMN_STACKTRACE`
            //are Strings with the column name

            int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
            String stack = cursor.getString(cursor.getColumnIndex(COLUMN_STACKTRACE));
            //Here you'd add these to a List or something, maybe as a dataclass. Essentially, TODO: Handle your data here
            cursor.moveToNext();//Move to the next row
        }
    }
    cursor.close();//Close the cursor
}

WHERE 关键字解释的补充。

如果您有一行 id = 10, field1 = "11.12.17", field3 = "some data here" 并且您想根据 ID 选择该行,您可以使用 SELECT * FROM table WHERE id=10 选择 ID 为 10 的所有行。在某些情况下,您会得到一个行,在其他人中您可以获得 1000。

【讨论】:

  • 我想创建一个登录表单。客户注册后。转到另一个活动并登录应用程序。我需要数据库中的两列 UserName &&Password
【解决方案2】:

原始查询的代码应该是:

cursor = db.rawQuery("SELECT * FROM "+ DatabaseHelper.TableUsers+" WHERE "+DatabaseHelper.COL_UserName+"='"+UserName+"' And "+DatabaseHelper.COL_Password+"='"+ Password+"'");

尽管我更喜欢使用准备好的语句。

【讨论】: