让SQLiteDatabase中的特定行无效

时间:2016-08-03 12:41:30

标签: android mysql sql sqliteopenhelper

我是一个新的开发人员和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)获取行请帮助我

1 个答案:

答案 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