【问题标题】: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;
    }

【问题讨论】:

    标签: java android sqlite android-studio android-sqlite


    【解决方案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) 当您绑定参数时,基础代码会为您添加引号.使用绑定被认为是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2019-01-20
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多