【问题标题】:sqlite setlocale errorsqlite setlocale 错误
【发布时间】:2011-10-13 13:35:30
【问题描述】:

我在资产文件夹中有一个数据库,它被复制到应用程序中。它的完成方式与此处完全相同:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

在 android 2.3.3 及更高版本中一切正常,但不适用于以下版本。这些是我测试过应用程序的手机:

三星 Galaxy S II - ANDROID 2.3.3 - 工作

索尼爱立信 neo - ANDROID 2.3.3 - 工作

LG P350 - ANDROID 2.2.2 - 复制数据库时出错

索尼爱立信 Xperia X8 - ANDROID 2.1-update 1 - 复制数据库时出错

三星 GalaxyACE Android 2.2.1。 - 复制数据库时出错

三星 Galaxy Tab 10.1 Android 3.1 - 工作

错误如下:

10-13 13:03:43.773: ERROR/Database(2770): SELECT locale FROM android_metadata failed
10-13 13:03:43.783: ERROR/Database(2770): Failed to setLocale() when constructing, closing the database
10-13 13:03:43.783: ERROR/Database(2770): android.database.sqlite.SQLiteException: no such table: android_metadata
10-13 13:03:43.783: ERROR/Database(2770):     at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
10-13 13:03:43.783: ERROR/Database(2770):     at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
10-13 13:03:43.783: ERROR/Database(2770):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
10-13 13:03:43.783: ERROR/Database(2770):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
10-13 13:03:43.783: ERROR/Database(2770):     at org.com.db.DataBaseHelper.checkDataBase(DataBaseHelper.java:81)
10-13 13:03:43.783: ERROR/Database(2770):     at org.com.db.DataBaseHelper.createDataBase(DataBaseHelper.java:42)
10-13 13:03:43.783: ERROR/Database(2770):     at org.com.SentencesActivity.onCreate(SentencesActivity.java:49)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-13 13:03:43.783: ERROR/Database(2770):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-13 13:03:43.783: ERROR/Database(2770):     at android.os.Looper.loop(Looper.java:123)
10-13 13:03:43.783: ERROR/Database(2770):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-13 13:03:43.783: ERROR/Database(2770):     at java.lang.reflect.Method.invokeNative(Native Method)
10-13 13:03:43.783: ERROR/Database(2770):     at java.lang.reflect.Method.invoke(Method.java:521)
10-13 13:03:43.783: ERROR/Database(2770):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-13 13:03:43.783: ERROR/Database(2770):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-13 13:03:43.783: ERROR/Database(2770):     at dalvik.system.NativeStart.main(Native Method)
10-13 13:03:43.793: VERBOSE/Debugger(2770): Copying db
10-13 13:03:43.893: WARN/dalvikvm(2770): threadid=1: thread exiting with uncaught exception (group=0x40020ac0)

【问题讨论】:

  • 确保您的数据库中有一个 android_metadata 表并且语言环境设置为默认值。
  • android_metadata 中唯一的条目是 en_US
  • 实际上你不需要在我的情况下创建这个表我只创建我的表,当我从 Eclipse 中的文件资源管理器中提取数据库时,它会自动创建这个表。所以删除表 android_metadata 并卸载您的应用程序再次运行该项目。如果您愿意,我可以发布代码。
  • 我也不创建它。它是自动创建的。它适用于 Android 2.3.3 及更高版本,但看起来较低版本无法找到 android_metadata 表。
  • 我认为问题是因为数据库太大。它大约是 18 mb。当我删除一些数据并将数据库缩小到 149 kb 时,它复制没有问题。

标签: android sqlite


【解决方案1】:

该问题不适用于旧版本的 Android,因为 db 对他们来说太大并且限制为 18mb。解决此问题的方法是拆分 db ino 18 个 1 mb 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多