SQLite查询构建中的错误

时间:2014-01-25 14:05:04

标签: android android-sqlite

在我的代码中,我尝试从数据库中提取数据,但SELECTARGS不适合QUERY的数据类型......我这样做了:

ArrayList<String> al = new ArrayList<String>();
String selectSQL = "Select * from " + Wish_list_Table.TABLE_NAME
                + " where " + Wish_list_Table.COL_CATEGORY + "";
String[] SelectionArgs = new String[1];
SelectionArgs[0] = al.get(1);
String[] add = { "" + SelectionArgs[0] };
Log.i("select_string", "" + add.toString());

TextView textView = getGenericView();
Cursor selectdata = db.rawQuery(selectSQL, add);

2 个答案:

答案 0 :(得分:3)

您为查询准备了add参数,但没有通过它:
您在查询中缺少 =? ...

String selectSQL = "Select * from " + Wish_list_Table.TABLE_NAME +
    " where " + Wish_list_Table.COL_CATEGORY + " = ?";

现在,该怎么做......

一旦你的光标被填满(不要按照这个查询,它是特定的 我的应用程序):

    final Cursor cur = db.rawQuery
        (
            "SELECT DISTINCT strftime('%Y', [date]) Year FROM " +
                DB_TABLE + " WHERE Year > date('now', '-11 years') " +
                "ORDER BY Year DESC", null
        );

您可以非常轻松地提取列值:

    if (cur != null)
    {
        if (cur.moveToFirst())
        {
            tmp = new String[cur.getCount()];
            do
            {
                tmp[cur.getPosition()] =
                    cur.getString(cur.getColumnIndex("Year"));
            }
            while (cur.moveToNext());
        }
    }
    cur.close();

tmp是一个String []我以前定义并需要由此方法填充,它以一个数字(一年)为基础返回一个字符串数组(以字符串形式存在的数组数组)

值得注意的是:

1 - check wether the Cursor is null. If so, just return something empty or null.
2 - If (hopefully) not, move to the first record and cycle till the end of the records, taking the value/s from the column/s you're interested in (normally you'd only select the columns you're interested in, because * is an overkill)

如果您只返回 1行,则更容易
只需移动到第一条记录并从行中提取每一列(而不是循环)。

并且(仅为了完整而不是诱使您使用rawQuery for SQL命令),您可以使用 execSQL 函数进行INSERT,DELETE或UPDATE(这个不是SQL查询,但是 SQL命令,因为您修改了数据库。)

答案 1 :(得分:0)

使用此解决方案,这比rawQuery更好。您不需要连接字符串。 不要忘记附加到选择字符串的问号。

db.query(Wish_list_Table.TABLE_NAME, null, Wish_list_Table.COL_CATEGORY + "=?",selectionArgs, null, null, null, null);