在我的代码中,我尝试从数据库中提取数据,但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);
答案 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);