net.sqlcipher.database.SQLiteException:不是错误:

时间:2013-03-25 10:10:27

标签: android sqlite xmlpullparser sqlcipher

我在我的android app db中收到此错误。

SQLite数据库中,我借助此代码从assets文件夹中的脚本获取数据库查询。

manager = context.getResources().getAssets();
            input = manager.open("createDb.xml");
            xpp.setInput(input, null);
            int type = xpp.getEventType();
            while(type != XmlPullParser.END_DOCUMENT) {
                if(type == XmlPullParser.START_DOCUMENT) {

                    Log.d(Tag, "In start document");
                }
                else if(type == XmlPullParser.START_TAG) {
                    Log.d(Tag, "In start tag = "+xpp.getName());
                }
                else if(type == XmlPullParser.END_TAG) {
                    Log.d(Tag, "In end tag = "+xpp.getName());

                }
                else if(type == XmlPullParser.TEXT) {
                    Log.d(Tag, "Have text = "+xpp.getText()); 
                    String strquery = xpp.getText();
                    db.execSQL(strquery);
                }
                type = xpp.next();
            }
        } 
        catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

并且工作正常。

但我在SQLCipher数据库中运行相同的代码,它总是给出此错误和应用程序崩溃。

即使我已经添加了所有必要的库。

Failure 0 (not an error) on 0x1a1ab0 when executing '
 FATAL EXCEPTION: main
 net.sqlcipher.database.SQLiteException: not an error: 
    at net.sqlcipher.database.SQLiteDatabase.native_execSQL(Native Method)
    at net.sqlcipher.database.SQLiteDatabase.execSQL(SQLiteDatabase.java:1834)
    at com.acs.android.fwk.database.ScriptExecutor.executeScripts(ScriptExecutor.java:86)
    at com.acs.android.fwk.database.DatabaseHelper.onCreate(DatabaseHelper.java:55)
    at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:121)
    at com.acs.android.fwk.database.DatabaseAdapter.open(DatabaseAdapter.java:79)
    at com.acs.android.fwk.database.DatabaseAdapter.<init>(DatabaseAdapter.java:49)
    at com.acs.android.fwk.database.DatabaseAdapter.getInstance(DatabaseAdapter.java:37)
    at com.acs.nomad.ui.controller.DbDemoController.saveData(DbDemoController.java:27)
    at com.acs.nomad.ui.controller.DbDemoController_$1.onClick(DbDemoController_.java:39)
    at android.view.View.performClick(View.java:3511)
    at android.view.View$PerformClick.run(View.java:14105)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

请帮助。

Thansk

2 个答案:

答案 0 :(得分:5)

确认您已在icudt46l.zip目录中包含assets文件,因为这是SQLCipher for Android运行所必需的。

答案 1 :(得分:-1)

我得到了我的解决方案: -

我只是添加

else if(type == XmlPullParser.TEXT) {
    Log.d(Tag, "Have text = "+xpp.getText());
    if(xpp.isWhitespace())
    {

    }
    else
    {
    String strquery = xpp.getText();
    db.execSQL(strquery);
    }

}

我正在检查ENDTAG之后是否有空格然后什么都不做,然后转到下一个。