public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
//數據庫創建時,此方法會調用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(_id integer primary key autoincrement, name char(10), salary char(20), phone integer(20))");
}
//數據庫升級時,此方法會調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("數據庫升級了");
}
}
public class TestCase extends AndroidTestCase {
//此時測試框架還沒有初始化完畢,沒有虛擬上下文對象
// private MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
private MyOpenHelper oh;
private SQLiteDatabase db;
public void test(){
//getContext():獲取一個虛擬的上下文
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//如果數據庫不存在,先創建數據庫,再獲取可讀可寫的數據庫對象,如果數據庫存在,就直接打開
SQLiteDatabase db = oh.getWritableDatabase();
//如果存儲空間滿了,那麼返回只讀數據庫對象
// SQLiteDatabase db = oh.getReadableDatabase();
}
//測試框架初始化完畢之後,在測試方法執行之前,此方法調用
@Override
protected void setUp() throws Exception {
super.setUp();
oh = new MyOpenHelper(getContext(), "people.db", null, 1);
db = oh.getWritableDatabase();
}
//測試方法執行完畢之後,此方法調用
@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
db.close();
}
public void insert(){
// db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆[1]", "13000", 138438});
// db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的兒子", 14000, "13888"});
db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
}
public void delete(){
db.execSQL("delete from person where name = ?", new Object[]{"小志"});
}
public void update(){
db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的兒子"});
}
public void select(){
Cursor cursor = db.rawQuery("select name, salary from person", null);
while(cursor.moveToNext()){
//通過列索引獲取列的值
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(1);
System.out.println(name + ";" + salary);
}
}
public void insertApi(){
//把要插入的數據全部封裝至ContentValues對象
ContentValues values = new ContentValues();
values.put("name", "遊天龍");
values.put("phone", "15999");
values.put("salary", 16000);
db.insert("person", null, values);
}
public void deleteApi(){
int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的兒子", "3"});
System.out.println(i);
}
public void updateApi(){
ContentValues values = new ContentValues();
values.put("salary", 26000);
int i = db.update("person", values, "name = ?", new String[]{"遊天龍"});
System.out.println(i);
}
public void selectApi(){
Cursor cursor = db.query("person", null, null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println(name + ";" + phone + ";" + salary);
}
}
public void transaction(){
try{
//開啓事務
db.beginTransaction();
ContentValues values = new ContentValues();
values.put("salary", 12000);
db.update("person", values, "name = ?", new String[]{"小志"});
values.clear();
values.put("salary", 16000);
db.update("person", values, "name = ?", new String[]{"小志的兒子"});
int i = 3/0;
//設置 事務執行成功
db.setTransactionSuccessful();
}
finally{
//關閉事務,同時提交,如果已經設置事務執行成功,那麼sql語句就生效了,反之,sql語句回滾
db.endTransaction();
}
}
}