我创建了一个SQLiteOpenHelper的对象,在运行dBMainHelper.EditRuleMain(规则)以保存资源后,我必须关闭dBMainHelper吗?
如果我没有运行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();
}
}
答案 0 :(得分:2)
是的,你应该明确地致电。
检查这些链接When should I call close() on SQLiteOpenHelper used by ContentProvider
或
Android Database Size Wont Decrease On HTC Thunderbolt
清楚地阅读第二个