Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 查询SQLite时出现语法错误_Android_Sqlite - Fatal编程技术网

Android 查询SQLite时出现语法错误

Android 查询SQLite时出现语法错误,android,sqlite,Android,Sqlite,我有一个包含日期字段的表。我在将表创建为整数时保存了日期字段。用户使用日期选择器选择日期,日期以以下格式存储:dd/mm/yy。 我想返回表中日期字段date>current date中的行 我尝试了以下查询: public Cursor getUpcomAp ( ) { SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery (" select * from " + TAB

我有一个包含日期字段的表。我在将表创建为整数时保存了日期字段。用户使用日期选择器选择日期,日期以以下格式存储:dd/mm/yy。 我想返回表中日期字段date>current date中的行 我尝试了以下查询:

public Cursor getUpcomAp ( ) {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery (" select * from " + TABLE_NAME2 + "where strftime('%d.%m.%Y', date) > now.strftime('%d.%m.%Y')" , null);
        return res;

}
当我单击执行此查询的按钮时,应用程序崩溃。 以下是logcat输出:

    01-02 13:09:39.250: D/(918): HostConnection::get() New Host Connection established 0xb882df30, tid 918
01-02 13:09:39.400: W/EGL_emulation(918): eglSurfaceAttrib not implemented
01-02 13:09:39.410: D/OpenGLRenderer(918): Enabling debug mode 0
01-02 13:09:57.690: D/dalvikvm(918): GC_FOR_ALLOC freed 109K, 6% free 3263K/3448K, paused 197ms, total 210ms
01-02 13:09:58.570: W/EGL_emulation(918): eglSurfaceAttrib not implemented
01-02 13:10:01.770: E/SQLiteLog(918): (1) near "(": syntax error
01-02 13:10:01.780: D/AndroidRuntime(918): Shutting down VM
01-02 13:10:01.780: W/dalvikvm(918): threadid=1: thread exiting with uncaught exception (group=0xb1a5eba8)
01-02 13:10:01.820: E/AndroidRuntime(918): FATAL EXCEPTION: main
01-02 13:10:01.820: E/AndroidRuntime(918): Process: com.example.appointapp, PID: 918
01-02 13:10:01.820: E/AndroidRuntime(918): android.database.sqlite.SQLiteException: near "(": syntax error (code 1): , while compiling: select * from appointments_table where strftime ('%d.%m.%Y', date) > now.strftime('%d.%m.%Y')
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
01-02 13:10:01.820: E/AndroidRuntime(918):  at com.example.appointapp.DatabaseHelper.getUpcomAp(DatabaseHelper.java:86)
01-02 13:10:01.820: E/AndroidRuntime(918):  at com.example.appointapp.AppointFragment$5.onClick(AppointFragment.java:189)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.view.View.performClick(View.java:4438)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.view.View$PerformClick.run(View.java:18422)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.os.Handler.handleCallback(Handler.java:733)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.os.Handler.dispatchMessage(Handler.java:95)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.os.Looper.loop(Looper.java:136)
01-02 13:10:01.820: E/AndroidRuntime(918):  at android.app.ActivityThread.main(ActivityThread.java:5017)
01-02 13:10:01.820: E/AndroidRuntime(918):  at java.lang.reflect.Method.invokeNative(Native Method)
01-02 13:10:01.820: E/AndroidRuntime(918):  at java.lang.reflect.Method.invoke(Method.java:515)
01-02 13:10:01.820: E/AndroidRuntime(918):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-02 13:10:01.820: E/AndroidRuntime(918):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-02 13:10:01.820: E/AndroidRuntime(918):  at dalvik.system.NativeStart.main(Native Method)
01-02 13:09:39.250:D/(918):主机连接::get()已建立新主机连接0xb882df30,tid 918
01-02 13:09:39.400:W/EGL_仿真(918):未实现eglSurfaceAttrib
01-02 13:09:39.410:D/OpenGLRenderer(918):启用调试模式0
01-02 13:09:57.690:D/dalvikvm(918):释放109K的所有物质的GC_,6%释放3263K/3448K,暂停197ms,总计210ms
01-02 13:09:58.570:W/EGL_仿真(918):未实现eglSurfaceAttrib
01-02 13:10:01.770:E/SQLiteLog(918):(1)靠近“(”:语法错误
01-02 13:10:01.780:D/AndroidRuntime(918):关闭虚拟机
01-02 13:10:01.780:W/dalvikvm(918):threadid=1:线程以未捕获异常退出(组=0xb1a5eba8)
01-0213:10:01.820:E/AndroidRuntime(918):致命异常:主
01-0213:10:01.820:E/AndroidRuntime(918):进程:com.example.appointapp,PID:918
01-02 13:10:01.820:E/AndroidRuntime(918):android.database.sqlite.SQLiteException:near“(”:语法错误(代码1):,编译时:从strftime('%d.%m.%Y',date)>now.strftime('%d.%m.%Y')的约会表中选择*
01-02 13:10:01.820:E/AndroidRuntime(918):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
01-02 13:10:01.820:E/AndroidRuntime(918):在android.database.sqlite.SQLiteConnection.acquiredpreparedstatement(SQLiteConnection.java:889)
01-02 13:10:01.820:E/AndroidRuntime(918):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
01-02 13:10:01.820:E/AndroidRuntime(918):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
01-0213:10:01.820:E/AndroidRuntime(918):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
01-0213:10:01.820:E/AndroidRuntime(918):位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
01-02 13:10:01.820:E/AndroidRuntime(918):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
01-02 13:10:01.820:E/AndroidRuntime(918):位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
01-02 13:10:01.820:E/AndroidRuntime(918):位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
01-02 13:10:01.820:E/AndroidRuntime(918):在com.example.appointapp.DatabaseHelper.getUpcomAp(DatabaseHelper.java:86)
01-02 13:10:01.820:E/AndroidRuntime(918):在com.example.appointapp.AppointFragment$5.onClick(AppointFragment.java:189)
01-0213:10:01.820:E/AndroidRuntime(918):在android.view.view.performClick(view.java:4438)
01-02 13:10:01.820:E/AndroidRuntime(918):在android.view.view$PerformClick.run(view.java:18422)
01-0213:10:01.820:E/AndroidRuntime(918):位于android.os.Handler.handleCallback(Handler.java:733)
01-0213:10:01.820:E/AndroidRuntime(918):在android.os.Handler.dispatchMessage(Handler.java:95)上
01-0213:10:01.820:E/AndroidRuntime(918):在android.os.Looper.loop(Looper.java:136)上
01-0213:10:01.820:E/AndroidRuntime(918):位于android.app.ActivityThread.main(ActivityThread.java:5017)
01-02 13:10:01.820:E/AndroidRuntime(918):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-0213:10:01.820:E/AndroidRuntime(918):在java.lang.reflect.Method.invoke(Method.java:515)
01-02 13:10:01.820:E/AndroidRuntime(918):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-0213:10:01.820:E/AndroidRuntime(918):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-02 13:10:01.820:E/AndroidRuntime(918):在dalvik.system.NativeStart.main(本机方法)

请帮助

您需要在
前面的
位置
留出一个空格:

"where strftime('%d.%m.%Y', date)....
应该是

" where strftime('%d.%m.%Y', date)...

SELECT*FROM table_name where…
,这是您得到的结果)

必须在
table_NAME2
where
之间留出空间:

Cursor res = db.rawQuery (" select * from " + TABLE_NAME2 + " where strftime('%d.%m.%Y', date) > now.strftime('%d.%m.%Y')" , null);
strftime()

此外,
dd/mm/yy
不是;
strftime()
只是为您的值返回NULL。此外,
dd.mm.yyyy
格式的字符串无法与字符串比较进行正确比较

以支持的格式存储日期,如
yyyy-mm-dd
。然后您可以直接比较这些值:

where date > date('now')

是使用
表2+"where
需要在
之前添加空格where
谢谢,但添加空格后我仍然面临同样的问题,如果你能确保显示更新的logcat输出,请提供帮助我刚刚完成了。提前感谢你什么是
日期
列名?谢谢,但添加空格后我仍然面临同样的问题,如果你能感谢,请提供帮助在添加空间后,我仍然面临同样的问题,如果你可以,请帮助我这是我所做的(你可以查看上面的评论)。非常感谢:)
where date > date('now')