Android 查询SqlLite数据库where子句

Android 查询SqlLite数据库where子句,android,sql,sqlite,android-sqlite,where-clause,Android,Sql,Sqlite,Android Sqlite,Where Clause,嗨,我正在开发一个android应用程序。我正在尝试从数据库中查询。我需要从dbDate=AlarmDate和dbdTime=AlarmTime的表任务中获取所有内容 c = db.rawQuery("SELECT * FROM TASK WHERE dbDate = '"+AlarmDate+"' AND dbTime= '"+Alarmtime+"'", null); 问题是,游标c为null。 我不确定我的问题出在哪里。请帮忙 谢谢 SQLiteDatabase db = getRead

嗨,我正在开发一个android应用程序。我正在尝试从数据库中查询。我需要从dbDate=AlarmDate和dbdTime=AlarmTime的表任务中获取所有内容

c = db.rawQuery("SELECT * FROM TASK WHERE dbDate = '"+AlarmDate+"' AND dbTime= '"+Alarmtime+"'", null);
问题是,游标c为null。 我不确定我的问题出在哪里。请帮忙

谢谢

SQLiteDatabase db = getReadableDatabase();


 Cursor cur = db.rawQuery("SELECT * FROM TASK WHERE dbDate = '"+AlarmDate+"' AND dbTime = '"+AlarmTime+"'",new String [] {});
确保您已经为“db”获取了一个可读的数据库,否则每次它都将返回null。 还将原始查询的结尾更改为新字符串[]{}


希望这有帮助,这就是我在应用程序中使用的方法。

Android有绑定方法来避免sql注入。您可以使用第二个参数来提供SQL的变量

Cursor cur = db.rawQuery("SELECT * FROM TASK WHERE dbDate = ? AND dbTime = ? ", new String[]{AlarmDate, AlarmDate});

根据您的评论“我使用了
db=openOrCreateDatabase(“Globus”,0,null)其中Globus是db name',您没有在android上正确使用SQLite

您应该做的是创建扩展
SQLiteOpenHelper
的类,然后确保覆盖
onCreate
onUpgrade
方法,这些方法是创建表和进行更改的方法,这里已经说过一百遍了,所以我将提供一个到教程的链接:

执行数据库操作时,在类调用上

我之所以说call
getWritableDatabase
,是因为这样您就不必担心是否可以写入,可写数据库也是可读的。仅供参考。询问更多细节

这应该是阅读的过程(写作是一样的,只需使用你想要的方法,而不是
查询
):

这是我写的一个数据库助手的源代码,也许它会有帮助,通读它,了解它是如何工作的

如果您想知道
open
方法存在的原因,请通读此代码

(本课程是在他人代码的帮助下完成的)


如何存储dbDate和dbTime?变量AlarmDate和Alarmtime中有什么?dbDate和dbTime是表任务中保存字符串类型值的字段。AlarmDate和Alarmtime是字符串值,我使用了db=openOrCreateDatabase(“Globus”,0,null);其中Globus是数据库名。空参数列表是多余的。
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();//this should lock the tables you are reading
Cursor c = db.rawQuery("select 1 where 1=?", new String[]{"1"});
if(c.moveToFirst()){
    do{
        //Do what you want with the row
    }while(c.moveToNext());
}
c.close();
db.setTransactionSuccessful();
db.endTransaction();
db.close();