您好我正在开发一个Android应用程序。我正在尝试从数据库中查询。我需要从表TASK中获取所有内容,其中dbDate = AlarmDate和dbdTime = AlarmTime。
c = db.rawQuery("SELECT * FROM TASK WHERE dbDate = '"+AlarmDate+"' AND dbTime= '"+Alarmtime+"'", null);
问题是,光标c为空。 我不确定我在查询中出错了。请帮助。
谢谢!
答案 0 :(得分:0)
Android有绑定方法,以避免sql注入。您可以使用第二个参数来提供SQL的变量。
Cursor cur = db.rawQuery("SELECT * FROM TASK WHERE dbDate = ? AND dbTime = ? ", new String[]{AlarmDate, AlarmDate});
答案 1 :(得分:0)
通过你的评论'我已经使用了db = openOrCreateDatabase("Globus", 0, null);
,其中Globus是数据库名称',你没有正确使用SQLite与android。
你应该做的是创建扩展SQLiteOpenHelper
的类,然后确保覆盖onCreate
和onUpgrade
方法,这些是创建表和进行更改的方法,在这里已经说过一百次,所以我将提供教程的链接:http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android
当你进行数据库操作时,在课堂上调用getWritableDatabase
(http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase())
我说调用getWritableDatabase
因为你不需要担心,如果你可以写它,可写数据库也是可读的。仅供参考。询问更多细节。
这应该是阅读过程(写作是一样的,只需使用你想要的方法而不是query
):
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();
这是我编写的数据库帮助程序的源代码,也许它会有所帮助,通读它,了解它是如何工作的。 https://bitbucket.org/FabianCCook/dbhelper/src/af7a8eba8d1a3f139e4170bbef9f1a2d3fdf1b47/src/nz/smartlemon/DatabaseHelper/ApplicationDataDbHelper.java?at=master
如果您想知道open
方法存在的原因,请阅读此代码
(这个课程是在别人的帮助下制作的)
答案 2 :(得分:-1)
SQLiteDatabase db = getReadableDatabase();
Cursor cur = db.rawQuery("SELECT * FROM TASK WHERE dbDate = '"+AlarmDate+"' AND dbTime = '"+AlarmTime+"'",new String [] {});
确保您已获得“db”的可读数据库,否则每次都会返回null。 同时将原始查询的结尾更改为新的String [] {}
希望这会有所帮助,这就是我在我的应用程序中使用的内容。