一、連接池對象
a、JDBC訪問數(shù)據(jù)庫中、連接對象即用即毀開銷太大、怎么管理多個連接對象又很麻煩、故需要一個專門管理連接的對象
b、程序運(yùn)行時就創(chuàng)建N個連接對象、等著用戶來使用
b、當(dāng)連接不夠時、可以增加連接數(shù)量來保證供應(yīng)、但連接對象不能超過最大活躍數(shù)量
c、用戶用完連接對象后、無需管理這個連接、關(guān)閉或不關(guān)閉連接、連接都會被連接池回收
連接池的使用
b、簡單的druid.property屬性配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://locahost:3306/test
username=root
password=123456
initialSize=3
maxActive=10
maxWait=60000
c、JAVA代碼操作連接池對象
public static void main(String[] args)throws Exception{
//創(chuàng)建屬性對象
Properties properties=new Properties();
//加載屬性文件
properties.load(DBTest.class.getResourceAsStream("/druid.property"));
//創(chuàng)建連接池對象
DataSource ds = DruidDataSourceFactory.createDataSource(properties);
//獲取連接
Connection conn = ds.getConnection();
}
二、DBUtils的使用
1、DBUtils的作用
a、主要是封裝了JDBC的代碼,簡化dao層的操作、幫助程序員,提高程序的開發(fā)效率、Dbutils是由Apache公司提供
b、DbUtils:連接數(shù)據(jù)庫對象----jdbc輔助方法的集合類,線程安全
2、使用步驟
a、需要導(dǎo)入的jar包:①M(fèi)ySql驅(qū)動 ②c3p0包 ③DbUtils包
b、添加druid配置文件
d、可以自行添加一個JDBCUtils工具類:用來獲取c3p0連接池對象
3、QueryRunner:是DBUtils操作數(shù)據(jù)庫的核心類、增刪改查等操作都靠QueryRunner類
a、增刪改查
public static void main(String[] args)throws Exception{
//創(chuàng)建屬性對象
Properties properties=new Properties();
//加載屬性文件
properties.load(DBTest.class.getResourceAsStream("/druid.property"));
//創(chuàng)建連接池對象
DataSource ds = DruidDataSourceFactory.createDataSource(properties);
//創(chuàng)建QueryRunner對象
QueryRunner queryRunner=new QueryRunner(ds);
//增刪改查操作數(shù)據(jù)庫、參數(shù)用?好替代,值直接在后面添加
int i = queryRunner.update("insert into student(name,pwd,img,classid) values(?,?,?,?)","admin","123",1,1);
//查詢的使用
List<Student> list = queryRunner.query("select * from student", new BeanListHandler<>(Student.class));
for (Student student : list) {
System.out.println(student);
}
System.out.println("over");
}
b、查詢的適配器ResultSetHandle
| 適配器類 |
作用 |
| ArrayHandler |
將查詢結(jié)果的第一行數(shù)據(jù),保存到Object數(shù)組中 |
| ArrayListHandler |
將查詢的結(jié)果,每一行先封裝到Object數(shù)組中,然后將數(shù)據(jù)存入List集合 |
| BeanHandler |
將查詢結(jié)果的第一行數(shù)據(jù),封裝到user對象 |
| BeanListHandler |
將查詢結(jié)果的每一行封裝到user對象,然后再存入List集合 |
| ColumnListHandler |
將查詢結(jié)果的指定列的數(shù)據(jù)封裝到List集合中 |
| MapHandler |
將查詢結(jié)果的第一行數(shù)據(jù)封裝到map結(jié)合(key列名,value列值) |
| MapListHandler |
將查詢結(jié)果的每一行封裝到map集合(key列名,value列值),再將map集合存入List集合 |
| BeanMapHandler |
將查詢結(jié)果的每一行數(shù)據(jù),封裝到User對象,再存入mao集合中(key列名,value列值) |
| KeyedHandler |
將查詢的結(jié)果的每一行數(shù)據(jù),封裝到map1(key列名,value列值 ),然后將map1集合(有多個)存入map2集合(只有一個) |
| ScalarHandler |
ScalarHandler |
c、自定義類實(shí)現(xiàn)ResultSetHandler<返回值類型>
//泛型決定返回值類型
public class StuentResultSetHandler implements ResultSetHandler<List<Student>>{
@Override
public List<Student> handle(ResultSet arg0) throws SQLException {
List<Student> list=new ArrayList<Student>();
while (arg0.next()) {
Student info=new Student();
//需要封裝的數(shù)據(jù)
list.add(info);
}
return list;
}
}