Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 如何避免sql查询错误_Android_Sqlite - Fatal编程技术网

Android 如何避免sql查询错误

Android 如何避免sql查询错误,android,sqlite,Android,Sqlite,我在搜索模块中使用sqllite。我在sqllite中使用以下代码选择多个状态值。错误发生在运行时。请帮助我 错误: 12-10 12:31:56.686: ERROR/AndroidRuntime(848): Uncaught handler: thread main exiting due to uncaught exception 12-10 12:31:56.686: ERROR/AndroidRuntime(848): android.database.sqlite.SQLiteExc

我在搜索模块中使用sqllite。我在sqllite中使用以下代码选择多个状态值。错误发生在运行时。请帮助我

错误:

12-10 12:31:56.686: ERROR/AndroidRuntime(848): Uncaught handler: thread main exiting due to uncaught exception
12-10 12:31:56.686: ERROR/AndroidRuntime(848): android.database.sqlite.SQLiteException: unrecognized token: "'": , while compiling: select * from issues where  Status IN (CLO,NEW)'
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1092)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at ez.com.Action_module_screen.setListval1(Action_module_screen.java:1062)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at ez.com.Action_module_screen$4.handleMessage(Action_module_screen.java:695)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.os.Looper.loop(Looper.java:123)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at android.app.ActivityThread.main(ActivityThread.java:4203)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at java.lang.reflect.Method.invokeNative(Native Method)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at java.lang.reflect.Method.invoke(Method.java:521)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
12-10 12:31:56.686: ERROR/AndroidRuntime(848):     at dalvik.system.NativeStart.main(Native Method)
12-10 12:31:56.686:错误/AndroidRuntime(848):未捕获处理程序:由于未捕获异常,线程主线程正在退出
12-10 12:31:56.686:错误/AndroidRuntime(848):android.database.sqlite.SQLiteException:无法识别的标记:“'”:,编译时:从状态为(CLO,NEW)的问题中选择*”
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在android.database.sqlite.SQLiteProgram.native_编译(本机方法)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:49)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1092)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在ez.com.Action\u module\u screen.setListval1(Action\u module\u screen.java:1062)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在ez.com.Action\u module\u screen$4.handleMessage(Action\u module\u screen.java:695)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.os.Handler.dispatchMessage(Handler.java:99)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在android.os.Looper.loop(Looper.java:123)处
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于android.app.ActivityThread.main(ActivityThread.java:4203)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于java.lang.reflect.Method.invokenactive(本机方法)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于java.lang.reflect.Method.invoke(Method.java:521)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
12-10 12:31:56.686:ERROR/AndroidRuntime(848):在dalvik.system.NativeStart.main(本机方法)
我的代码:

 String sta=Search.status2;
 String doc=Search.document;
 String[] items=sta.split(",");

 String statusFilter = " Status IN (" + items[0];
 StringBuilder builder = new StringBuilder(statusFilter);
 for (int j = 1; j < items.length; j++) {
   builder.append(",");
   builder.append(items[j]);
 }
 builder.append(')');

  Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where " + builder.toString() + "'", null);
  if(dbcur.moveToFirst())
     {
      int k=0;
      System.out.println("enter first");
        do
         {
      String title1=dbcur.getString(dbcur.getColumnIndex("Title"));
      System.out.println("title"+title1);
      String name1=dbcur.getString(dbcur.getColumnIndex("Name"));
      System.out.println("name"+name1);
      String open1=dbcur.getString(dbcur.getColumnIndex("Open"));
      System.out.println("open"+open1);
      String close1=dbcur.getString(dbcur.getColumnIndex("Close"));
      System.out.println("close"+close1);
      String no1=dbcur.getString(dbcur.getColumnIndex("No"));
      System.out.println("no"+no1);
      no.add(no1+","+k);
   first.put(no1+","+k, title1);
   second.put(no1+","+k,name1);
   third.put(no1+","+k, open1);
   fourth.put(no1+","+k,close1);
   k=k+1; 
   mylist=sorting(no,1,true); 
        }while(dbcur.moveToNext());
          }
     dbcur.close();
  myDB.close();
String sta=Search.status2;
字符串doc=Search.document;
字符串[]项=sta.split(“,”);
String statusFilter=“状态输入(“+项[0]”);
StringBuilder=新的StringBuilder(statusFilter);
对于(int j=1;j
再明显不过了,不是吗

SQLiteException:无法识别的标记:“”:,编译时:从状态为(CLO,NEW)的问题中选择*


结尾的单引号是SQL语法错误。

您在以下行有一个错误:

  Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where " + builder.toString() + "'", null);
删除
+“'”
在builder.toString()之后

问候,,
Mahendra Liya.

我有更改,但下面出现了错误12-10 12:47:47.057:error/AndroidRuntime(1460):android.database.sqlite.SQLiteException:没有这样的列:新建:,编译时:从状态为(CLO,新建)的问题中选择*12-10 12:47:47.057:error/AndroidRuntime(1460):在android.database.sqlite.SQLiteProgram.native_compile(native方法)中,您可以准备查询的字符串变量并将其输出到日志中。动态准备的最终查询似乎存在一些问题。。只需从logcat将字符串变量的结果粘贴到此处..我必须更改以下错误发生时间..12-10 12:47:47.057:error/AndroidRuntime(1460):android.database.sqlite.SQLiteException:没有这样的列:NEW:,编译时:从状态为(CLO,NEW)的问题中选择*12-10 12:47:47.057:error/AndroidRuntime(1460):在android.database.sqlite.SQLiteProgram.native_compile(native Method)@user533787:我就知道你会这么说。如果连SQL都不懂,为什么还要组装原始查询??SQL知识太少会导致SQL注入漏洞。关于您的问题:“CLO”和“NEW”显然必须写成字符串,例如,
WHERE status IN('CLO','NEW')
。Martin Clayton的答案中有一个解决方案,但除非您理解粘贴代码,否则不应该复制它!我已经在我的答案中添加了关于你第二个问题的注释。