相关疑难解决方法(0)

Android上SQLite的最佳做法是什么?

在Android应用程序中对SQLite数据库执行查询时,最佳做法是什么?

从AsyncTask的doInBackground运行插入,删除和选择查询是否安全?或者我应该使用UI线程?我认为数据库查询可能"很重",不应该使用UI线程,因为它可以锁定应用程序 - 导致应用程序无响应(ANR).

如果我有几个AsyncTasks,他们应该共享一个连接还是应该分别打开一个连接?

这些方案是否有最佳实践?

database sqlite android

681
推荐指数
8
解决办法
22万
查看次数

Android数据库已锁定

我收到了以下错误.那么如何解锁我的数据库呢?

10-28 08:43:26.510: ERROR/AndroidRuntime(881): FATAL EXCEPTION: Thread-11
10-28 08:43:26.510: ERROR/AndroidRuntime(881): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:742)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at com.aa.me.vianet.dbAdapter.DbAdapter.open(DbAdapter.java:25)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at com.aa.me.vianet.services.NotificationManagerThread.run(NotificationManagerThread.java:49)
Run Code Online (Sandbox Code Playgroud)

android

34
推荐指数
4
解决办法
7万
查看次数

无法将db'/data/data/my.easymedi.controller/databases/EasyMediInfo.db'的语言环境更改为'en_US'

在我的Android应用程序中,有一个预定义的数据库,位于assets文件夹中.我创建了一个表android_metadata,其中包含一个名为locale的列,并且有一个记录en_US.在我的应用程序中,用户应输入他/她的详细信息并单击保存按钮.单击保存按钮时出现以下错误.

10-21 09:37:06.010: E/SQLiteLog(6278): (11) database corruption at line 50741 of       [00bb9c9ce4]
10-21 09:37:06.010: E/SQLiteLog(6278): (11) database corruption at line 50780 of [00bb9c9ce4]
10-21 09:37:06.010: E/SQLiteLog(6278): (11) statement aborts at 16: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1] 
10-21 09:37:06.160: E/SQLiteDatabase(6278): Failed to open database '/data/data/my.easymedi.controller/databases/EasyMediInfo.db'.
10-21 09:37:06.160: E/SQLiteDatabase(6278): android.database.sqlite.SQLiteException:   Failed to change locale for db '/data/data/my.easymedi.controller/databases /EasyMediInfo.db' to 'en_US'.
10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
10-21 09:37:06.160: E/SQLiteDatabase(6278):     at …
Run Code Online (Sandbox Code Playgroud)

java sqlite android

16
推荐指数
1
解决办法
2万
查看次数

无法将db'/data/data/com.scoreup/databases/scoreUp'的语言环境更改为'en_GB'

我最近更新了我的一个应用程序,在极少数情况下我得到了上述错误.仅当用户尝试通过现有应用程序更新应用程序时,才会出现此错误.这不会发生在每次和每台设备上.我在Android SQLiteException上发现了类似的问题:无法将db的语言环境更改为'en_US'但是回复并没有解决我的问题.我一直试图通过一个小小的方式来解决这个问题而且我失败了.我使用过SQLiteDatabase,因此我没有给出任何数据库路径.崩溃报告如下

android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.scoreup/databases/scoreUp' to 'en_US'.
0
android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration
SQLiteConnection.java:393
1
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:218
2
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:193
3
android.database.sqlite.SQLiteConnectionPool.openConnectionLocked
SQLiteConnectionPool.java:463
4
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:185
5
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:177
6
android.database.sqlite.SQLiteDatabase.openInner
SQLiteDatabase.java:806
7
android.database.sqlite.SQLiteDatabase.open
SQLiteDatabase.java:791
8
android.database.sqlite.SQLiteDatabase.openDatabase
SQLiteDatabase.java:694
9
android.app.ContextImpl.openOrCreateDatabase
ContextImpl.java:1148
10
android.content.ContextWrapper.openOrCreateDatabase
ContextWrapper.java:268
11
android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked
SQLiteOpenHelper.java:223
12
android.database.sqlite.SQLiteOpenHelper.getWritableDatabase
SQLiteOpenHelper.java:163
13
com.scoreup.gson.DatabaseHandler.openDatabase
DatabaseHandler.java:35
14
com.scoreup.gson.DatabaseHandler.getQuizBots
DatabaseHandler.java:379
15
com.scoreup.activity.earn.fragments.EarnScreenBottomFragmentWinners.onCreateView
EarnScreenBottomFragmentWinners.java:66
16
android.app.Fragment.performCreateView
Fragment.java:2053
17
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:894
18
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:1067
19
android.app.BackStackRecord.run
BackStackRecord.java:834
20
android.app.FragmentManagerImpl.execPendingActions
FragmentManager.java:1452
21 …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite android-database

6
推荐指数
0
解决办法
704
查看次数