2014-03-19 77 views
1

为每个数据库事务操作打开和关闭数据库是否是一种很好的做法?让我更清楚你。每次使用后打开和关闭sqlite数据库

我有两个方法,如

public SQLiteDatabase getDatabase() { 
    if (database == null || !database.isOpen()) { 
     database = getWritableDatabase(); 
    } 
    return database; 
} 

public void closeDatabase() { 
    if (database != null && database.isOpen()) { 
     database.close(); 
    } 
} 
每次

所以,当我更新/插入或删除,我打开数据库,并关闭它。

public void insert(...) { 
     getDatabase().insert(...); 
     closeDatabase(); 
} 

public void update(...) { 
     getDatabase().update(...); 
     closeDatabase(); 
} 

public void delete(...) { 
     getDatabase().delete(...); 
     closeDatabase(); 
} 

记住,所有这些方法都被扩展SQLiteOpenHelperDatabaseHelper内部,有一个全局变量private SQLiteDatabase database

,我会更频繁地执行这些操作(插入/更新/删除)。

所以我的问题是Is it a good practice to open and close database for every transaction? if not, what is the good way? Where and When I have to close my database?

+1

可能重复:http://stackoverflow.com/questions/6608498/best-place-to-close-database-connection –

+0

我总是让数据库只为严格必要的时间来开从中消耗我的数据或修改数据。之后立即关闭它。 –

回答

2

开放,每次可以(非有意的)遇到的问题,如Trying to open an already closed database关闭数据库。

因此,我建议的是有一个单一的创建数据库对象,所以每次你打电话给database = getWritableDatabase();你指的是同一个对象。

考虑在onDestroy()方法中关闭它,以便关闭App时关闭数据库。

private static AllItemsDB db; //AllItemsDB is my database class 
public static AllItemsDB getDb() { 

    if (db == null) { 
     Log.d("","Issue here"); 
     db = new AllItemsDB(app); 
     Log.d("","Issue here not"); 
    } 

    return db; 
} 

,因为这是一个静态方法,我可以做AllItemsDB.myCRUD_methods,它每次都会和易于访问和返回我一样oblect。 :)

Help.

+0

其实我不喜欢'静态'的方式...... – RuntimeException

+0

那就是另一个问题;-) –