所以我有一个购物清单应用程序中mainActivity
有recyclerView
包含用户的列表例如购物清单,每周列表等
当用户单击一个项目时,将导航到产品活动。recyclerView
我还有2个不同的SQLite数据库1:列表2:产品。
使用的逻辑我是当用户添加的列表,列表数据库会记录列表名称和ID,同样在产品数据库添加列表名称,当用户添加的产品,我用update()
的,而不是insert()
在SQLite
因为列已经存在,所以产品名称和ID将在产品数据库中更新。
这是列表和产品表的结构:
LISTS
ID LIST_NAME
1 1 list 1
2 2 list 2
PRODUCTS
ID LIST_NAME PRODUCT_NAME
1 1 list 1 product1 in list1
2 2 list 1 product2 in list1
问题是当我添加列表然后导航到产品时,我看到此错误:
android.database.sqlite.SQLiteException: no such column: list (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT * FROM prducts WHERE LIST_NAME = list, (OS error - 2:No such file or directory)
这是里面的方法SQLiteOpenHelper
,此行显示错误:cursor = db.rawQuery(productsQuery, null);
public Cursor getAllProducts(String list_name)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if (db != null)
{
String productsQuery = " SELECT * FROM " +DB_TABLE+ " WHERE "+LIST_NAME_COLUMN+ " = "+list_name;
cursor = db.rawQuery(productsQuery, null);
}
return cursor;
}
在产品活动中,我曾经Bundle bundle = getIntent().getExtras();
通过清单活动传递清单名称。在我使用的清单活动中intent.putExtra("list_name", list_name);
您传递list_name
sql语句中用引号引起来的字符串的值,因此将其视为列名。在查询中
使用?
占位符,并将其list_name
作为第二个参数传递rawQuery()
:
String productsQuery = "SELECT * FROM " + DB_TABLE + " WHERE " + LIST_NAME_COLUMN + " = ?";
cursor = db.rawQuery(productsQuery, new String[] {list_name});
这样,您无需担心引用传递给查询的参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句