我正在寻找一段时间来回答我的问题,但我没有得到我需要的东西.我有一个带有ListView的应用程序,以及可以向DB添加新记录的表单.所以没有太多的疑问要做.
如何处理与db的连接?我应该在得到我想要的东西之后将其关闭,还是应该一直打开它直到应用程序关闭?我想知道在考虑性能和电池寿命时最好的方法是什么.
我有一个包含一些表的数据库.我想使用多个线程更新表.我将在所有线程中使用相同的SQLiteDatabase实例.
请建议这种方法是否正确.Sqlite数据库线程安全吗?两个不同的线程可以同时为不同的值集更新同一个表.
我没有扎实的同步背景.我认为当我使用synchronized方法时,这个问题将得到修复.但有人可以帮我解决这个问题吗?代码如下:
public HashMap<String, FriendInfo> getAllRecordsInList_HashMap() {
MySQLiteHelper dbHelper = MySQLiteHelper.getInstance(mActivity);
HashMap<String, FriendInfo> list_map = new HashMap<String, FriendInfo>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
// Cursor cursor = db.rawQuery("SELECT * from " +
// dbHelper.tbl_friendlist, new String[] {});
String[] cols = { dbHelper.id, dbHelper.name, dbHelper.picture, dbHelper.birthday, dbHelper.livein, dbHelper.gender, dbHelper.is_online, dbHelper.is_vip };
Cursor cursor = db.query(dbHelper.tbl_friendlist, cols, null, null, null, null, dbHelper.name);
if (cursor != null && cursor.getCount() > 0) {
// some code here....
}
cursor.close();
return list_map;
}
Run Code Online (Sandbox Code Playgroud)
不同的线程可以调用此方法getAllRecordsInList_HashMap() …
我已经在StackOverflow和网页上搜索了这个问题的答案,但我找不到答案.当我在Gingerbread上运行我的应用程序时,它运行正常.但是当我在4.2.2上运行它时,我得到了这个错误:java.lang.IllegalStateException Cannot perform this operation because the connection pool has been closed
我有一个包含两个片段的SherlockFragmentActivity.
片段1:
public final class TodoFragment extends SherlockListFragment {
NotesDbAdapter db;
private static final int DELETE_ID = Menu.FIRST + 1;
public static TodoFragment newInstance(String s) {
TodoFragment fragment = new TodoFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db = new NotesDbAdapter(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
return ll;
} …
Run Code Online (Sandbox Code Playgroud)