我做了兩個類,擴展Activity的主類和保存數據庫及其方法的Database類。下面顯示了數據庫類的部分代碼。如何創建數據庫一次,然後多次讀寫它,SQLite,OpenHelper,Android
SQLiteOpenHelper類是數據庫類中的嵌套類。我從我在互聯網上找到的一個例子中獲得了它。這個嵌套類的內部是方法,
db.execSQL(SCRIPT_CREATE_DATABASE);
如何創建一個新的數據庫?如果我從主類實例化數據庫類是這樣的:
Database db = new Database(this);
這是否實例自動實例嵌套SQLiteOpenHelper類呢?所以我不必明確地做到這一點。
但是對於如何創建數據庫的這個例子,我很困惑。如果每次我實例化一個新的實例調用這樣的addNewRow()方法:
public void addNewRow(String label, int price){
Database db = new Database(context);
db.openToWrite();
db.insertNewRow(checkBoxStatus, label, price);
db.close();
}
則在「新數據庫(上下文)」調用創建一個新的數據庫,接下來我添加了信息進入列。最後調用db.close(),但每次我調用上面顯示的addNewRow方法時,它都會實例化一個新數據庫,並且還會實例化SQLiteOpenhelper類,以便創建一個新數據庫。這意味着最後一個數據庫已被覆蓋,並且我添加的最後一行已丟失,這是正確的嗎?
我該如何使用這個數據庫類來創建一個數據庫只有一次,然後用這樣的多個調用從它讀取和寫入東西?
Database db = new Database(context);
db.openToWrite(); or db.openToRead();
// read or update or create new row in database
db.close();
數據庫類:爲SQLiteOpenHelper類
public class Database {
public static final String MYDATABASE_NAME = "my_database";
public static final String MYDATABASE_TABLE = "my_table";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_CHECKBOX_STATUS = "check_box_status";
public static final String KEY_CHECKBOX_LABEL = "check_box_label";
public static final String KEY_PRICE = "price";
//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
"CREATE TABLE " + MYDATABASE_TABLE + " (" + "ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
"KEY_CHECKBOX_STATUS INTEGER, " + "KEY_CHECKBOX_LABEL TEXT, " + " KEY_PRICE INTEGER" + ");";
SQLiteDatabase sqLiteDatabase;
SQLiteHelper sqLiteHelper;
Context context;
public Database(Context c){
context = c;
}
// after this all the rest of the methods for get and set of database values
代碼,嵌套的數據庫類的內部:
public class SQLiteHelper extends SQLiteOpenHelper {
public SQLiteHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(SCRIPT_CREATE_DATABASE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}