我想在sqlite中查询不同的行,我不知道如何使用android的GreenDao库进行查询。
List<activity> activities = activityDao.queryRaw("SELECT DISTINCT "+Properties.Date_time +" FROM "+activityDao.getTablename()+" WHERE "+Properties.Contact_number+ " = "+phonenumber);
错误:11-13 21:12:50.915 9320-10428/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
Process: com.ficean.android.ficean, PID: 9320
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: net.sqlcipher.database.SQLiteException: near "SELECT": syntax error: , while compiling: SELECT T."_id",T."FILE_UNIQUE_ID",T."CONTACT_NUMBER",T."POND_NAME",T."REMOTE_PATH",T."LOCAL_PATH",T."IN_OUT",T."SEEN",T."STATUS",T."DATE_TIME" FROM "ACTIVITY" T SELECT DISTINCT org.greenrobot.greendao.Property@176aa5bf FROM ACTIVITY WHERE org.greenrobot.greendao.Property@27a2f48c = +919063809087
at net.sqlcipher.database.SQLiteCompiledSql.native_compile(Native Method)
at net.sqlcipher.database.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
at net.sqlcipher.database.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
at net.sqlcipher.database.SQLiteProgram.<init>(SQLiteProgram.java:83)
at net.sqlcipher.database.SQLiteQuery.<init>(SQLiteQuery.java:49)
at net.sqlcipher.database.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
at net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1758)
at net.sqlcipher.database.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1723)
at org.greenrobot.greendao.database.EncryptedDatabase.rawQuery(EncryptedDatabase.java:32)
at org.greenrobot.greendao.AbstractDao.queryRaw(AbstractDao.java:591)
at com.ficean.android.ficean.Windows.SingleWindow.FilesLoad(SingleWindow.java:152)
at com.ficean.android.ficean.Windows.SingleWindow.access$500(SingleWindow.java:53)
at com.ficean.android.ficean.Windows.SingleWindow$LoadFiles.doInBackground(SingleWindow.java:138)
at com.ficean.android.ficean.Windows.SingleWindow$LoadFiles.doInBackground(SingleWindow.java:130)
at android.os.AsyncTask$2.call(AsyncTask.java:292
您使用了错误的方法。除此之外,您必须将columnName包含到查询字符串中,而不是属性本身。
queryRaw()只接受如下的WHERE子句:
userDao.queryRaw("WHERE " + UserDao.Properties.Name.columnName + " = ?", "Jason")
如果你想自己编写整个select查询,你可以使用下面的方法:
daoSession.getDatabase().rawQuery();
返回一个游标,你应该自己处理。
但是如果你不想纠结于光标,你可以这样使用:
userDao.queryBuilder().where(
new WhereCondition.StringCondition(UserDao.Properties.Name.columnName + " IN " +
"(SELECT DISTINCT " + UserDao.Properties.Name.columnName + " FROM " +
UserDao.TABLENAME + " WHERE " + UserDao.Properties.Name.columnName + " = ?",
"Jason")
).list();
为了简单起见,我用原始字符串编写上面的代码:
userDao.queryBuilder().where(
new WhereCondition.StringCondition("NAME IN (SELECT DISTINCT NAME FROM USER WHERE NAME = ?)", "Jason")
).list();