为啥我的 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 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在火花中运行时配置单元查询不起作用

为啥我不能从我的查询中选择?

为啥 sqlite3 不能与 NFS 一起使用?

当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?

Xamarin/C#/SQlite - 为啥我的 SUM 查询返回“System.Threading.Task”?

为啥我的查询不能从一个表中选择然后插入到另一个表中?