更新SQLite数据库时出现“SQLException:not error”

时间:2012-10-14 13:13:34

标签: android 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)

所以数据库没有更新..为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

编辑:巴拉克的回答指出了主要问题。你应该使用execSQL而不是rawQuery,因为你不期望光标回来。

答案 1 :(得分:0)

您正在尝试使用rawQuery进行更新,您不应该这样做(或者您将获得例外)。 rawQuery期望数据库向其返回一个游标,而更新不会这样做,所以你得到一个例外。

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