why use DbUtils ?
DBUtils.PersistentDB 实现了强硬的、线程安全的、顽固的数据库连接,使用DB-API 2模块。DBUtils.PooledDB 实现了一个强硬的、线程安全的、有缓存的、可复用的数据库连接。
DbUtils作用有三:
1.丢一个sql,给一个结果;
2.把结果包装成Bean、Map、List或Object[]形式;
3.关闭Connection、Statement、ResultSet时候无需写try catch,一行关闭。
DbUtils用在sql数据库的查找
dbutils支持返回以下类型的结果:
- ArrayHandler :将结果集中第一行的数据转化成对象数组。返回值类型:–Object[]
- ArrayListHandler将结果集中所有的数据转化成List。返回值类型:List (Object[])
- BeanHandler :将Object中第一行的数据转化成类对象。返回值类型:T
- BeanListHandler :将Object中所有的数据转化成List,List中存放的是类对象。返回值类型:List
- ColumnListHandler :将Object中某一列的数据存成List,List中存放的是 Object对象。返回值类型:List
- KeyedHandler :将Object中存成映射,key为某一列对应为Map。Map中存放的是数据。Map<关键字字段值,map<列名,字段值>>返回值类型:
- MapHandler :将结果集中第一行的数据存成Map<列名,字段值>映射。返回值类型:Map(String,Object)
- MapListHandler :将结果集中所有的数据存成List。List中存放的是Map<列名,字段值>。
- ScalarHandler :返回结果集中的第一行的指定列的一个值。返回值类型:Object
案例
1.在MysqLiteOpenHelpter类中新建库
public class MysqLiteOpenHelpter extends sqliteOpenHelper {
public MysqLiteOpenHelpter(Context context,String name,sqliteDatabase.CursorFactory factory,int version) {
super(context,name,factory,version);
}
public MysqLiteOpenHelpter(Context context,String name){
this(context,null,1);//创建数据库
}
@Override
public void onCreate(sqliteDatabase db) {
db.execsql("create table if not exists student(id integer primary key autoincrement,name varchar(20),password varchar(20))");
}
@Override
public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
}
}
@Table(name="student")//注意要导入xUtils包
public class Student {
@Column(column="id")
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、activity中
public class MainActivity extends Activity implements View.OnClickListener {
……
MysqLiteOpenHelpter helpter = new MysqLiteOpenHelpter(getApplicationContext(),"MY_FIRST_DB.db");//DB的名字
……
//通常的查询方法
Cursor cursor=database.rawQuery("select * from student",null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
String name=cursor.getString(cursor.getColumnIndex("name"));
String password = cursor.getString(cursor.getColumnIndex("password"));
Log.d("cursor","用户名"+name+" 密码 "+password);
Toast.makeText(MainActivity.this,"用户名"+name+"密码 "+password,Toast.LENGTH_SHORT).show();
cursor.moveToNext();
}
//使用DbUtils查询
DbUtils dbUtils = DbUtils.create(this,"MY_FIRST_DB.db");//只需要对应库的名字即可
try {
List<Student> students = dbUtils.findAll(Selector.from(Student.class));//结果包装成list的形式
for(Student student:students){
Log.d("cursor","用户名 "+student.getName()+" 密码"+student.getPassword());
}
} catch (DbException e) {
e.printStackTrace();
}