在SQlite数据库中选择

时间:2017-12-11 18:48:42

标签: android sqlite android-sqlite

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

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

2 个答案:

答案 0 :(得分:2)

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

您使用的WHERE子句错误。它旨在选择列具有给定值的位置。例如,如果您的表格中包含INTEGER PRIMARY_KEY,并希望选择id = 10行,则执行SELECT * FROM table WHERE id=10

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

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

您正在使用,,因此在String之外添加更多参数。其次,你不能有多个传递的参数,唯一支持的是String列表,这是为了避免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排。

答案 1 :(得分:1)

使用原始查询时,代码应为:

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

即使我更喜欢使用准备好的陈述。