一、数据库连接池(数据源)
1.数据库连接池是什么
数据库连接池是为了避免“反复创建和关闭连接数据库对象Connection”,提高程序效率而设计的一种负责“分配”、“管理”、“关闭”数据库连接对象的池技术。
工作逻辑是在数据库连接池初始化时,会建立指定个数据库连接对象。当外界申请使用数据库连接对象时,会先检查是否有空闲连接对象若有(&&连接池中使用的连接对象数目<最大活跃连接对象数目&&最小空闲连接对象数目>连接池中空闲连接对象数目)就返回给其使用,否则等待;若没有(连接时中所有连接对象数目<最大闲置连接对象数目&&连接池中使用的连接对象数目<最大活跃连接对象数目)则新建;否则等待。使用完后将连接对象回收到数据库连接池中,数据库连接池关闭时会释放所有连接对象资源。
数据库连接池中,最小连接闲置对象数目<=连接对象数目<=最大闲置连接对象数目
2.数据库连接池的相关实现接口与类
二、DBUtils工具
通过ComboPooledDataSource()创建数据源对象
package dao; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; /** * Created by lc on 2018/8/12. */ public class C3p0Utils { public static DataSource ds=null; //初始化C3P0数据源 static { ComboPooledDataSource cpds=new ComboPooledDataSource(); //设置连接数据库需要的配置信息 try { cpds.setDriverClass("com.mysql.jdbc.Driver"); cpds.setJdbcUrl("jdbc:mysql://localhost:3306/shop"); cpds.setUser("root"); cpds.setPassword("root"); //设置连接池的参数 cpds.setInitialPoolSize(5);//初始连接数目 cpds.setMaxPoolSize(15);//最大连接数目 ds=cpds; }catch (Exception e){ throw new ExceptionInInitializerError(e); } } //返回数据源 public static DataSource getDataSource(){ return ds; } }
DBUtils工具
为了更加简单地使用JDBC, Apache组织提供了一一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响性能的情况下极大地简化JDBC的编码工作量。
package dao; import javabeen.User; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import java.sql.*; public class Userdao { public boolean Vfpassword(User user) throws SQLException{ //创建QueryRunner对象,并从C3P0连接池获取数据源 QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource()); //写SQL语句 String sql="SELECT * FROM user WHERE username=? AND password=?"; //调用方法 User user1 = (User) runner.query(sql,new BeanHandler(User.class), new Object[]{user.getUsername(),user.getPassword()}); if (user1!=null){ return true; } else { return false; } } public boolean register(User user) throws SQLException{ QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource()); String sql="INSERT INTO user VALUES (?,?,?)"; int i=runner.update(sql, new Object[]{user.getUsername(), user.getPassword(), user.getTel()}); System.out.println(i); if (i>0){ System.out.println(user.getUsername()+"注册成功!"); return true; } else{ System.out.println("注册失败!"); return false; } } }
DBUtils工具类
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能
核心功能
QueryRunner 中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,他就是一个工具类,定义了关闭资源与事务处理相关方法.
JavaBean组件
需要实现 序列化接口, Serializable (暂时可以省略)
提供私有字段: private 类型 变量名;
提供 getter 和 setter
提供 空参构造
/** * javabean * 用来存储数据 */ public class Employee implements Serializable { private int eid; private String ename; private int age; private String sex; private double salary; private Date empdate; public Employee() { } public Employee(int eid, String ename, int age, String sex, double salary, Date empdate) { this.eid = eid; this.ename = ename; this.age = age; this.sex = sex; this.salary = salary; this.empdate = empdate; } public int getEid() { return eid; } public void setEid(int eid) { this.eid = eid; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Date getEmpdate() { return empdate; } public void setEmpdate(Date empdate) { this.empdate = empdate; } @Override public String toString() { return "Employee{" + "eid=" + eid + ", ename='" + ename + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", salary=" + salary + ", empdate=" + empdate + '}'; } }