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,name,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) {
}
}
2、Student類,包含屬性和方法
@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();
}