Android 专门提供了一个SQliteOpenHelper帮助类,管理数据库,借助这个类可以对数据库进行创建和升级。
1、数据库操作实现类图:
2、数据库的创建和升级
编写蓝牙配对列表写入数据库的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)");
}
}
3、对配对列表信息进行插入,删除和更新
创建类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());
}
3.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;
}
3.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;
}
3.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;
}
3.4 查询设备列表信息-query
List<BondedDevice> queryAll(){
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;
}
3.5 DB创建和插入数据流程