我在这里阅读了很多关于StackOverflow的讨论,还有很多关于互联网网站的讨论:我什么时候应该打开和关闭我的sqlite数据库.我已经阅读了不同时期的各种回应和猜测.所以最后我比以前更困惑.人们建议:
在onDestroy()中关闭你的数据库注释:"OnDestroy()总是不被调用!使用onStop()!" - >所以onStart()必须打开它.
数据库有效地工作.无需关闭它.
打开数据库一次,创建一个字段和一个访问者.
使用后关闭.
还有很多...
那么2016年什么是正确的呢?请不要猜!
Examplelinks:
参考此链接,如果您只有一个连接,何时是关闭连接的好时机?我总是在后台运行服务.什么时候打电话给这个close()功能好?有什么建议?
我正在编写一个Android应用程序sqlite.有许多活动和一项服务.我使用来自多个线程的数据库.它完美地Android 2.X运行,但是一旦我在它中运行Android 3.X它总是抛出这个错误,并且Force Close:
05-04 22:17:04.815: I/SqliteDatabaseCpp(8774): sqlite returned: error code = 5, msg = database is locked, db=/data/data/xxx/databases/im
05-04 22:17:04.815: E/SqliteDatabaseCpp(8774): sqlite3_open_v2("/data/data/xxx/databases/im", &handle, 6, NULL) failed
05-04 22:17:04.835: E/SQLiteDatabase(8774): Failed to open the database. closing it.
05-04 22:17:04.835: E/SQLiteDatabase(8774): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:790)
05-04 22:17:04.835: …Run Code Online (Sandbox Code Playgroud) 当应用程序崩溃我得到这个错误我不明白这个错误说的错误.在这里我把邮件的崩溃日志报告.检查下面我使用下面的方法打开和关闭数据库我已经定义了2954行错误
private void Open_Database()
{
//this is 2954 line
mDB_Helper = new DB_Helper(this);
mSQLiteDatabase = mDB_Helper.getWritableDatabase();
}
/* Closing DB */
private void Close_Database()
{
if (mSQLiteDatabase != null && mDB_Helper != null)
{
mSQLiteDatabase.close();
mDB_Helper.close();
}
}
public void deletedata()
{
deleteplaylist.clear();
Open_Database();
deleteplaylist=new ArrayList<HashMap<String,String>>();
deleteplaylist=mDB_Helper.DeleteRecordDetail(mSQLiteDatabase, DB_Constant.TABLE.MYFILES,DB_Constant.MYFILES.USERID, sid);
Close_Database();
for(int m=0;m<deleteplaylist.size();m++)
{
String getid=deleteplaylist.get(m).get(DB_Constant.MYFILES.FILE_ID).toString();
String getpath=deleteplaylist.get(m).get(DB_Constant.MYFILES.FILE_PATH).toString();
Open_Database();
DB_Helper.DeleteData(mSQLiteDatabase, DB_Constant.TABLE.MYFILES,DB_Constant.MYFILES.USERID, sid,DB_Constant.MYFILES.FILE_ID,getid);
File file = new File(getpath);
boolean deleted = file.delete();
Close_Database();
}
Run Code Online (Sandbox Code Playgroud)
}
.
2014-11-08-19-56-30
Yoddle
Error Report collected on …Run Code Online (Sandbox Code Playgroud) 我需要编写一些具有几个线程的应用程序,这些线程将与本地数据库一起使用.我担心这些线程会在数据库之间竞争.有没有简单的解决方案来解决这个问题?我读到我可以使用内容提供商因为那时只有一个与数据库的连接,但也许有另一个解决方案?感谢您的所有建议和提示.
我需要调用多个api,每个api都在单独的线程中执行,并将相应的数据从响应插入到sqlite数据库而不会导致锁定.任何人都可以通过我可以参考的工作实例来帮助我.
为每个表创建 ContentProvider 是否可以意味着单个应用程序中存在多个内容提供程序?
\n\n出于各种原因我想这样做。
\n\n1-随着我的应用程序的增长,单个 ContentProvider 类变得臃肿且混乱。
\n\n2-我不想与另一个应用程序共享整个 ContentProvider 类。我只想共享几个或仅一张表。\xef\xbb\xbf
\n