Android 專門提供了一個SQliteOpenHelper幫助類,管理數據庫,藉助這個類可以對數據庫進行創建和升級。
1、數據庫的創建和升級
編寫藍牙配對列表寫入數據庫的Helper類繼承抽象類SQLiteOpenHelper,用於創建數據庫和表bt_pair_devices
public class BondedDevicesHelper extends SQLiteOpenHelper{
private Context mContext;
private static final String DATABASE_NAME = "BtPairDevices.db";//數據庫名稱
private static final int SCHEMA_VERSION = 1;//版本號,則是升級之後的,升級方法請看onUpgrade方法裏面的判斷
public static final String CREATE_BT = "create table bt_pair_devices ("
+ "id integer primary key autoincrement,"
+ "address text,"
+ "name text,"
+ "pincode text"
+ "bonded_pos integer,"
+ "connect_pos integer)";
public BondedDevicesHelper(Context context) {
// 打開數據庫
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
mContext = context;
Log.d(TAG,"BtDatabaseHelper(Context context)");
}
@Override
public void onCreate(SQLiteDatabase db) {
//創建配對列表存儲表bt_pair_devices
db.execSQL(CREATE_BT);
Log.d(TAG,"db.execSQL(CREATE_BT) = " + CREATE_BT);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("ALTER TABLE person ADD phone VARCHAR(12)");//往表中增加一列
Log.d(TAG,"onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)");
}
}
2、對配對列表信息進行插入,刪除和更新
創建類BondedDevicesDatabaseHelper,在該類中通過對象dbHelper獲得SQLiteDatabase的db對象對數據進行增刪改查操作
public class BondedDevicesDatabaseHelper{
private static final String TAG = "BondedDevicesDatabaseHelper";
private static final boolean DBG = true;
private static final String BONDED_DEVICE_TABLE_NAME = "bt_pair_devices";
private BondedDevicesHelper dbHelper;
BondedDevicesDatabaseHelper(){
dbHelper = new BondedDevicesHelper(AdapterApp.getAdapterAppContext());
}
2.1 插入數據 insert
boolean insert(String address ,String name ,String pincode){
if(isExist(address)){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("pincode", pincode);
db.update(BONDED_DEVICE_TABLE_NAME ,cv ,"address = ?", new String[]{address});
if(DBG){
Log.d(TAG ,"update address = " + address + " name = " + name);
}
}else{
int pos = queryCount();
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("address", address);
cv.put("name", name);
cv.put("pincode", pincode);
cv.put("bonded_pos" , pos);
db.insert(BONDED_DEVICE_TABLE_NAME, null, cv);
if(DBG){
Log.d(TAG ,"insert address = " + address + " name = " + name + " bonded_pos " + pos);
}
}
return true;
}
2.2 更新數據update 設備名稱
boolean update(String address ,String name){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
db.update(BONDED_DEVICE_TABLE_NAME ,cv ,"address = ?", new String[]{address});
if(DBG){
Log.d(TAG ,"upate address = " + address + " name = " + name);
}
return true;
}
2.3 根據設備地址刪除設備-delete
boolean delete(String address){
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(BONDED_DEVICE_TABLE_NAME, "address = ?", new String[]{address});
if(DBG){
Log.d(TAG ,"delete address = " + address);
}
return true;
}
2.4 查詢設備列表信息-query
List<BondedDevice> quereAll(){
List<BondedDevice> bondedDevices = new ArrayList<BondedDevice>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(BONDED_DEVICE_TABLE_NAME ,null ,null ,null ,null ,null ,null);
int pos = 0;
while(cursor != null && cursor.moveToNext()){
pos++;
String address = cursor.getString(cursor.getColumnIndex("address"));
String name = cursor.getString(cursor.getColumnIndex("name"));
BondedDevice device = new BondedDevice();
device.setAddress(address);
device.setName(name);
bondedDevices.add(device);
if(DBG){
Log.d(TAG ,"quere address = " + address + " name = " + name + " pos " + pos);
}
}
return bondedDevices;
}