我是一个新的开发人员和SQLiteDatabase中的noob并且有这个小问题..我需要一些帮助 我正在创建一个简单的to_do应用程序,有catagories, 应用程序可以创建类别并在列表视图中显示它们,通过单击刚刚创建的类别项,我可以添加新的to_do任务并在具有此类别名称的新列表视图中显示它们
这是我的数据库:
public class DatabaseOpenHelper extends SQLiteOpenHelper {
public static final String ITEM_NAME_TABLE="items_table";
public static final String TYPE_NAME_TABLE="types_table";
public static final String ITEM_NAME="name";
public static final String ITEM_PRICE="price";
public static final String ITEM_IMAGE_NAME="img_name";
public static final String ITEM_TYPE="item_type";
public static final String ID="_id";
}
我想按照点击的类别查看项目,以便我编写此方法:
public Cursor getlAllGifts(String category){
return database.query(DatabaseOpenHelper.ITEM_NAME_TABLE, null, DatabaseOpenHelper.ITEM_TYPE+"="+ category, null, null, null, null);
}
我通过了以前的意图类别,但是当这个方法被调用时我得到了这个错误
08-03 06:59:59.120: E/SQLiteLog(2696): (1) no such column: personal
08-03 06:59:59.120: W/dalvikvm(2696): threadid=12: thread exiting with uncaught exception (group=0xa4bfd648)
08-03 06:59:59.120: E/AndroidRuntime(2696): FATAL EXCEPTION: AsyncTask #2
08-03 06:59:59.120: E/AndroidRuntime(2696): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
08-03 06:59:59.120: E/AndroidRuntime(2696): at java.lang.Thread.run(Thread.java:841)
08-03 06:59:59.120: E/AndroidRuntime(2696): Caused by: android.database.sqlite.SQLiteException: no such column: personal (code 1): , while compiling: SELECT * FROM items_table WHERE item_type=personal
08-03 06:59:59.120: E/AndroidRuntime(2696): Caused by: android.database.sqlite.SQLiteException: no such column: personal (code 1): , while compiling: SELECT * FROM items_table WHERE item_type=personal
08-03 06:59:59.120: E/AndroidRuntime(2696): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
我有catagory个人但我不知道如何按特定类别(item_type)获取行请帮助我
答案 0 :(得分:1)
您可以尝试下面的查询吗?
如果有效,那么,我会用更多细节更新答案:
public Cursor getlAllGifts(String category){
return database.query(DatabaseOpenHelper.ITEM_NAME_TABLE, null, DatabaseOpenHelper.ITEM_TYPE + " LIKE ? ", new String[]{category}, null, null, null, null);
}
<强>背景强>
如果您查看DOCS,则可以看到方法query()
接受以下参数:
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
您的代码是:
database.query(DatabaseOpenHelper.ITEM_NAME_TABLE, null, DatabaseOpenHelper.ITEM_TYPE+"="+ category, null, null, null, null)
因此,您正在将WHERE
语句设置在正确的位置。但是,你做得不好。然后,您的查询被转换为:
SELECT * FROM items_table WHERE item_type=personal
然后,SQLite将personal
作为一个列处理(而不是作为你的where条件)
让Android让污垢成功
事实上,您可以使用query()
(selectionArgs[]
)的第4个参数然后,Android将为您创建where
子句...您只需发送参数/参数
这样,在第3个参数中添加?
,在第4个参数中添加android应该插入的参数来代替?
所以,在我的例子中,我补充道:
DatabaseOpenHelper.ITEM_TYPE + " LIKE ? "
new String[]{category}
Android将使用您的参数?
替换category
。