为啥我的 SQLite 选择查询不能在应用程序中运行,而是在 Android Studio 上的 Database Inspector 上运行?
Posted
技术标签:
【中文标题】为啥我的 SQLite 选择查询不能在应用程序中运行,而是在 Android Studio 上的 Database Inspector 上运行?【英文标题】:Why is my SQLite select query not working in app but working on Database Inspector on Android Studio?为什么我的 SQLite 选择查询不能在应用程序中运行,而是在 Android Studio 上的 Database Inspector 上运行? 【发布时间】:2021-11-22 21:26:12 【问题描述】:我正在尝试从我在 android 上的 SQLite DB 中检索记录,但不知何故它不起作用。如果应用程序中没有 where 子句和数据库检查器中的 where 子句,查询也可以正常工作。
表架构正确。 数据库中的日期格式和查询是一样的。这是我的代码 sn-p:
public ArrayList<String> retrieveFunc()
ArrayList<String> array_list = new ArrayList<String>();
SQLiteDatabase db = this.getReadableDatabase();
String date = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
Cursor res = db.rawQuery( "select score from stats WHERE date = "+date,null);
res.moveToFirst();
Log.d("Res count",res.getCount()+"");
while(!res.isAfterLast())
Log.d("In while","in while");
array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_SCORE)));
res.moveToNext();
return array_list;
【问题讨论】:
【参考方案1】:在解决这个问题几个小时后,我在发布这个问题几分钟后找到了解决方法。
我更改了查询
Cursor res = db.rawQuery( "select score from stats WHERE date = "+date,null);
到
Cursor res = db.rawQuery( "select score from stats WHERE date = ? ",new String[] date );
通过选择参数传递值对我有用,而不是与查询连接。
【讨论】:
第一个不起作用的原因是因为您传递了一个数字,例如2021-10-01(= 2010 即值是计算的结果),要编码一个文字字符串,您需要将其括在单引号中,因此"select score from stats WHERE date = '"+date+"'",null)
当您绑定参数时,基础代码会为您添加引号.使用绑定被认为是正确的方法。以上是关于为啥我的 SQLite 选择查询不能在应用程序中运行,而是在 Android Studio 上的 Database Inspector 上运行?的主要内容,如果未能解决你的问题,请参考以下文章
当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?