数据库的查询
- SQLitedatabase中提供了query()方法用于对数据进行查询,
private void queryData() {
/*
第一个参数表名
* 第二个参数指定 要查询哪些列,如果要在cursor里获取没有指定的列,将会报错。(null时表示查询所有列)
* 第三四个参数用于约束查寻满足该条件的行(一行或多行)
* 第五个参数指定要分组的列,不指定将不对结果分组
* 第六个参数是对分组后的结果进一步的过滤
* 第七个参数是对指定查询结果的排序方式
* */
//按person 的降序排列,默认为升序
// Cursor cursor =
// database.query("Country", new String[]{"person", " area"}, "person > ? and area > ?", new String[]{"100", "900"}, null, null, "person desc");
/*
* 查询Country的表,满足person > 100 并且area > 900的行,按continent分组, 对person列的和进行 > 1000,的筛选
* */
Cursor cursor =
database.query("Country", new String[]{"sum(person)",
" sum(area)"}, "person > ? and area > ?", new String[]{"100", "900"}, "continent", "sum(person) > 1000", null);
if (cursor.moveToFirst())
do {
String str2 = cursor.getString(cursor.getColumnIndex("person"));
Log.d("MainActivity","str2 " + str2 );
}
while (cursor.moveToNext());
cursor.close();
}
## 事务 ##
1. 事务可以保障某一系列的操作要么全都完成,要么全部都不会完成,(列如银行的汇款).
2. **事务的标准用法,开启事务,设置事务执行成功,结束事物**
3. 这里抛出一个异常,验证了要删除的列和要加的数据没有执行到
private void transactionData() {
database.beginTransaction();//开启一个事物
database.delete("Country", "name = ?", new String[]{"USA"});
try {
if (true) {
throw new NullPointerException();
}
ContentValues values = new ContentValues();
values.put("name", "日本");
values.put("person", 200);
database.setTransactionSuccessful();//事物已经执行完成
} catch (Exception e) {
} finally {
database.endTransaction();//结束事物
}
}
“`