2012-10-14 25 views
0
试图通过我从互联网网页获得的查询来更新我的数据库时

,我得到一个异常的时候。这里是代码:“的SQLException:不是错误”更新SQLite数据库

url = new URL(Database.Munawwat_UpdateDB_URL); 

        URLConnection connection = url.openConnection(); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
        String line = null; 
        File dbfile = new File(Database.Munawwat_Database_PATH); 
        if (!dbfile.exists()) { 
         Toast.makeText(Munawwat_List.this, "error in db location", Toast.LENGTH_SHORT).show(); 
         return; 
        } 
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 
        String query = ""; 
        while ((line = reader.readLine()) != null) 
         if (!line.contains("WHERE")) 
          query += line + "\n"; 
         else { 
          query += line.trim(); 
          Cursor c = db.rawQuery(query, null); 
          c.moveToFirst(); 

          c.close(); 

          query = ""; 
         } 

        db.close(); 
        reader.close(); 

       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

logcat的:

14:52:46.136: E/SQLiteQuery(17802): exception: not an error; query: UPDATE Adab SET Body="AAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBCBCBCB" WHERE _id=4 10-14 
14:52:47.484: W/System.err(17802): android.database.sqlite.SQLiteException: not an error 10-14 
14:52:47.496: W/System.err(17802): at android.database.sqlite.SQLiteQuery.nativeFillWindow(Native Method) 10-14 
14:52:47.503: W/System.err(17802): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:86) 10-14 
14:52:47.511: W/System.err(17802): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) 10-14 
14:52:47.523: W/System.err(17802): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) 10-14 
14:52:47.527: W/System.err(17802): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161) 10-14 
14:52:47.527: W/System.err(17802): at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201) 10-14 
14:52:47.531: W/System.err(17802): at omar.Munawwat_List$2.onClick(Munawwat_List.java:141) 10-14 
14:52:47.531: W/System.err(17802): at android.view.View.performClick(View.java:3511) 10-14 
14:52:47.535: W/System.err(17802): at android.view.View$PerformClick.run(View.java:14105) 10-14 
14:52:47.535: W/System.err(17802): at android.os.Handler.handleCallback(Handler.java:605) 10-14 
14:52:47.535: W/System.err(17802): at android.os.Handler.dispatchMessage(Handler.java:92) 10-14 
14:52:47.539: W/System.err(17802): at android.os.Looper.loop(Looper.java:137) 10-14  
14:52:47.539: W/System.err(17802): at android.app.ActivityThread.main(ActivityThread.java:4575) 10-14 
14:52:47.539: W/System.err(17802): at java.lang.reflect.Method.invokeNative(Native Method) 10-14 
14:52:47.539: W/System.err(17802): at java.lang.reflect.Method.invoke(Method.java:511) 10-14 
14:52:47.542: W/System.err(17802): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 10-14 
14:52:47.542: W/System.err(17802): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-14 
14:52:47.546: W/System.err(17802): at dalvik.system.NativeStart.main(Native Method) 

所以数据库不会得到更新..这是为什么?

+0

你可以发布什么时候该代码失败的行字符串? – MikeIsrael

+0

@MikeIsrael“UPDATE Adab SET Body =”AAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBCBCBCB“WHERE _id = 4”..执行“c.moveToFirst();”时抛出异常。行.. – Omar

回答

1

看起来您的查询包含一个用双引号"括起来的字符串常量。它需要用单引号'括起来。

编辑:巴拉克的答案指出了主要问题。您应该使用execSQL而不是rawQuery,因为您不希望返回游标。

+0

我改变了他们,但我仍然得到相同的例外= \ – Omar

+0

实际的问题是在巴拉克的答案下面描述。您期待从更新声明中返回光标,并且您不会得到它。使用execSQL而不是rawQuery。 – antlersoft

+0

尝试execSQL ..同样的错误:(我想与myDB.update()方法 – Omar

0

您正在尝试使用rawQuery进行更新,因此您不应该那样做(否则您将收到异常)。 rawQuery期望DB向它返回一个游标,并且更新不会这样做,所以你会得到一个异常。

您应该使用update便利方法或execSQL方法来执行更新,因为它们不需要返回游标。

+0

你从哪里看到你无法在rawQuery中运行更新?我从来没有听说过这个限制,我想我甚至已经成功运行了一个使用update之前的rawQuery。 – MikeIsrael

+0

好的,将它改为“你不应该或者你会得到一个异常”。在我的书中,绝大多数意思是不可以的,但是如果你喜欢有代码来自你的代码......并且因为这个网站上有答案,已经写了关于Android([这里](http://stackoverflow.com/a/8275275/1105376))的*书籍*说不要这样做,我认为这可能是一个不错的主意 – Barak

+0

对不起但是我没有看到那个链接中的任何地方,用rawQuery调用更新会引发异常,我不知道不要说这是明智的,但似乎并不是这个问题的问题。 – MikeIsrael