安卓中資料庫關閉在哪個周期關閉
『壹』 android如何避免頻繁的打開和關閉資料庫操作
但是不關閉程序會報錯,雖然不影響運行,但總是不好的,而且我不確定會不會出現什麼不可預料的情況
『貳』 Android 安卓資料庫操作和通知
public class DBHelper extends SQLiteOpenHelper { public static final String TB_NAME = "mydemo_user"; public static final String ID = "_id"; public static final String NAME = "username"; public static final String PASSWORD = "passname"; public static final String ISCHECK = "ischecked"; //當前版本 public static int version = 1; /** * 構造函數 * @param context Context類型,上下文對象。 * @param name String類型,資料庫的名稱 * @param factory CursorFactory類型 * @param version int類型,資料庫版本 */ public DBHelper(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); this.getWritableDatabase(); } public void Close() { this.getWritableDatabase().close(); } /** * 創建資料庫 */ public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try{ db.execSQL("CREATE TABLE IF NOT EXISTS " + TB_NAME + " (" + ID + " INTEGER PRIMARY KEY," + NAME + " VARCHAR," + PASSWORD + " VARCHAR," + ISCHECK + " VARCHAR)"); db.setTransactionSuccessful(); }catch (Exception e) { } finally { db.endTransaction();//此時不能關閉資料庫,不然創建資料庫完成後,資料庫不能使用 } } /** * 刪除資料庫 */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TB_NAME); onCreate(db); } /** * 添加新用戶 * @param name * @param number */ public void addUser(String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); this.getWritableDatabase().insert(DBHelper.TB_NAME, DBHelper.ID, values); } /** * 刪除單個用戶 * @param id */ public void delUser(int id) { this.getWritableDatabase().delete(DBHelper.TB_NAME, DBHelper.ID + " = " + id, null); } /** * 修改單個用戶 * @param id */ public void updateUser(int id,String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); String where = DBHelper.ID+"=?";//設置條件 String[] whereValue = {Integer.toString(id)};//設置條件中的參數 this.getWritableDatabase().update(DBHelper.TB_NAME, values, where, whereValue); } /** * 刪除多個用戶 */ public void delAllUser() { this.getWritableDatabase().delete(DBHelper.TB_NAME, null, null); } /** * 查詢 * @param username * @return */ public List<Users> queryUser(String username){ List<Users> data = new ArrayList<Users>(); String[] columns = { DBHelper.ID, DBHelper.NAME, DBHelper.PASSWORD,DBHelper.ISCHECK }; String[] parms = { username }; String where = DBHelper.NAME + "=?";// 設置條件 Cursor result=null; if(username!=null){ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, where, parms, null, null, null); }else{ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, null, null, null, null, null); } result.moveToFirst();//移動到第一行 while (!result.isAfterLast()) {//遍歷數據 Users user = new Users(result.getInt(0), result.getString(1),result.getString(2), result.getString(3)); data.add(user); result.moveToNext(); } result.close(); return data; } }
『叄』 SQLite資料庫何時關閉
你執行的時候,會有個cursor,建議你寫try{}catch{},在finally{}里關閉你的cursor。這樣不管你操作資料庫是否成功,你的cursor都會關閉。
『肆』 android 資料庫怎麼關閉。
db.close()就是關閉查詢出這個Cursor的db
『伍』 一般在什麼時候關閉數據連接和數據集
一類是After系列,列表如下:
.BeforeOpen,AfterOpen發生在數據集打開前後;
.BeforeClose,AfterClose發生在數據集關閉前後;
.BeforeInsert,AfterInsert發生在插入了一條新的記錄前後;
.BeforeEdit,AfterEdit 發生在進入dsEdit狀態前後;
.BeforePost,AfterPost 發生在寫數據集的前後;
.BeforeCancel,AfterCancel發生在取消修改的前後;
.BeforeDelete,AfterDelete發生在刪除記錄的前後。
此外,當數據集中增加了一條新的記錄時就會觸發OnNewRecord事件,當「計算欄位」的值需要重算時將觸發OnCalcFields事件。
Before系列的事件常常用來中止操作。例如,當調用Delete函數試圖刪除當前記錄時,在當前記錄將要刪除前會觸發BeforeDelete事件,可以在處理BeforeDelete事件的句柄中調用Abort或觸發一個異常放棄刪除當前記錄,程序示例如下:
Pocere TForm1.TableBeforeDelete (Dataset: TDataset)
Begin
If MessageDlg('Delete This Record?', mtConfirmation, mbYesNoCancel, 0) <> mrYes Then Abort;
End;
After系列的事件往往用來在狀態欄上通知用戶,程序示例如下:
Procere TForm1.Table1AfterDelete(DataSet: TDataSet);
Begin
StatusBar1.SimpleText := Format('有%d 條記錄',[DataSet.RecordCount]);
End;
OnCalcFields事件主要用於給出「計算欄位」的值。AutoCalcFields屬性的值決定了什麼時候會發生OnCalcFields事件。
如果AutoCalcFields屬性設為True,下列情況下會發生OnCalcFields事件:
.數據集被打開時;
.在數據控制項中,輸入焦點從一條記錄移到另一條記錄;
.在數據控制項中,輸入焦點從一個欄位移到另一個欄位;
.當前記錄被修改或從資料庫中檢索了一條記錄。
不過,即使AutoCalcFields屬性設為False,當數據集中的任意一個非計算欄位的值發生變化時都會觸發OnCalcFields事件。
由於OnCalcFields事件有可能是頻繁發生的,因此,處理OnCalcFields 事件的代碼要盡可能地簡短。在AutoCalcFields屬性設為True的情況下,在處理OnCalcFields事件的句柄中不能修改數據集的數據,因為一旦當前記錄被修改,又要觸發OnCalcFields事件,從而導致無限循環。例如,假設您在處理OnCalcFields事件的句柄中調用了Post,就會觸發OnCalcFields事件,導致再次調用Post,再次觸發OnCalcFields事件……
6.9 TBDEDataSet
TBDEDataSet是從TDataSet繼承下來的,它提供了通過BDE(BorlandDatabase Engine)訪問數據的能力。這一節主要介紹TBDEDataSet,讀者應當對前面介紹的TDataSet已經有了比較深刻的認識。
與TDataSet一樣,TBDEDataSet也是虛擬的和抽象的,除非您想建立自定義的數據集,否則,一般不需要直接用到TBDEDataSet。
TBDEDataSet重載了TDataSet中涉及記錄導航、索引和書簽的方法,增加了一些處理BLOB欄位、緩存更新的屬性、方法和事件。
『陸』 android中,Sqlite連接在什麼時候關閉比較好
資料庫打開和關閉連接 要耗時間 ,所以 如果頻繁訪問 ,就開著重用。
但是資料庫連接 又耗內存,所以 如果估計不用了,就把他關閉 ,免得耗內存。
這個度,還是需要你自己 把握。
『柒』 我的程序中每個activity都打開了資料庫,什麼時候關,怎麼關 [
建議你把cursor.close()和db.close()和打開資料庫都封裝在方法增刪改查的方法里,使用完就關閉這樣對數據的操作也更安全。
『捌』 android資料庫每次查詢完都要關閉嗎
關於資料庫句柄,每次用完是必須手動調用close()方法關掉的;關於cursor一般情況也是要求關掉的,如果只獲取了一次結果集,不關掉cursor對程序的邏輯沒有影響,只是會拋一個非必要性異常,但是如果多次獲取結果集,就必須先關掉cursor,再重新獲取結果集,否則cursor沒釋放,之後的結果集是獲取不到的,且會報錯。所以,總的來說,都要關掉。