SQLite 奇怪的行为

Rau*_*dey 6 android android-sqlite

我想从表格中检索特定的单元格。我想要 alarm_music(TEXT),其中我将警报的小时数(整数)和分钟数(整数)(在 where 子句中)存储在警报表中。
触发查询的代码

mBhelperClass = new AlarmsDBhelperClass(this);
        db= mBhelperClass.getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT musicPath FROM alarms WHERE hours="+hour+" AND minutes="+min,null);
        Log.d("gaurnagSnooze",""+cursor.getCount());
        if (cursor.moveToFirst()) {
            songPath = cursor.getString(cursor.getColumnIndex(AlarmsDBhelperClass.MUSIC_PATH));
            Log.d("if executed! ","songpath initialized!");
        }
        cursor.close();
Run Code Online (Sandbox Code Playgroud)

moveToFirst() 返回 FALSE 意味着表中没有行。
但是当我触发SELECT musicPath FROM alarmsmoveToFirst() 时返回TRUE
这怎么可能?

Rau*_*dey 6

问题: cursor.moveToFirst() 返回FALSE意味着不存在行。

解决方案:在表中插入行时,我使用了时间选择器中的24 小时时钟格式日历实例并存储在表中。但是,当我尝试使用小时的where子句从数据库中检索值我用12Hour时钟格式日历的实例。这肯定不会产生任何输出,因此没有作为 cursor 和 cursor.moveToFirst() 返回 FLASE 返回的行。


Mr.*_*.AF 2

此查询不安全,可能会导致不需要的结果。但是,如果您想使用不安全模式,请更改以下查询

"SELECT musicPath FROM alarms WHERE hours="+hour+" AND minutes="+min
Run Code Online (Sandbox Code Playgroud)

"SELECT musicPath FROM alarms WHERE hours= '"+hour+"' AND minutes= '"+min+"'"
Run Code Online (Sandbox Code Playgroud)

添加'周围whereArgs

虽然这是正确的,但不推荐(不安全

建议(安全)将其包含?where clausequery并用 中的值替换它们where args

Cursor cursor = db.rawQuery("SELECT musicPath FROM alarms WHERE hours = ? AND minutes = ? ",new String[]{hour,min});
Run Code Online (Sandbox Code Playgroud)