2013-11-25 42 views
1

我创建SQLiteOpenHelper的对象,运行dBMainHelper.EditRuleMain(规则)来保存资源后,我必须关闭dBMainHelper吗?我必须关闭SQLiteOpenHelper对象吗?

如果我不运行dBMainHelper.close(),系统会自动释放资源吗?

public static void EditRuleMain(MRule rule) { 
     RuleMain dBMainHelper=new RuleMain(PublicPar.myContext); 
     dBMainHelper.EditRuleMain(rule); 
       //Must I close?   
     dBMainHelper.close(); 
    } 




public class RuleMain extends SQLiteOpenHelper { 

    private final static String DBName="smsforwardrulemain.db"; 
    private final static String TableRuleMain="rulemain";  

    public RuleMain(Context context) { 
     super(context, DBName, null, DBPublicPar.DBVersion); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     String sql = "Create table " 
       + TableRuleMain 
       + " (ruleID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," 
       + "enabled INTEGER NOT NULL," 
       + "incomingType INTEGER NOT NULL," 
       + "name TEXT NOT NULL" 
       + ");"; 
     db.execSQL(sql); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     String sql=" DROP TABLE IF EXISTS "+TableRuleMain; 
     db.execSQL(sql); 
     onCreate(db); 
    } 



    private List<MRule> GetMRuleListFromCursor(Cursor cursor) { 
     List<MRule> myRuleMainList = new ArrayList<MRule>(); 
     while (cursor.moveToNext()) { 
      MRule myMRule = new MRule(); 
      myMRule.ruleID = cursor.getInt(cursor.getColumnIndex("ruleID")); 
      myMRule.name = cursor.getString(cursor.getColumnIndex("name")); 
      myMRule.enabled = (cursor.getInt(cursor.getColumnIndex("enabled")) == 0) ? false: true; 
      myMRule.incomingType= IncomingType.values()[cursor.getInt(cursor.getColumnIndex("incomingType"))]; 
      myRuleMainList.add(myMRule); 
     } 
     return myRuleMainList; 
    } 


    public int AddRuleMain(MRule rule) {   
     ContentValues cv=new ContentValues(); 
     FillRuleMainVaule(rule,cv); 

     SQLiteDatabase db = this.getWritableDatabase(); 
     long rowid=db.insert(TableRuleMain, null, cv); 
     db.close();  

     return (int)rowid; 
    } 

    public void EditRuleMain(MRule rule) { 
     ContentValues cv=new ContentValues(); 
     FillRuleMainVaule(rule,cv);  

     SQLiteDatabase db = this.getWritableDatabase(); 
     db.update(TableRuleMain, cv, "ruleID = ?", new String[]{String.valueOf(rule.ruleID)}); 
     db.close(); 
    } 


} 

回答