Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,据说是目前最好的连接池。
开源地址:https://github.com/alibaba/druid
DBUtils是Apache公司编写的数据库操作实用的工具,小巧,简单,实用,封装了对JDBC的操作,简化了JDBC操作。
使用连接池与不使用连接池区别
1.获取方式不同
传统:Connection conn = DriverManager.getConnection(url.userName,pwd);
连接池:Conneciton conn = DataSource对象.getConnection();
2.释放资源不同
传统:和数据库断开conn.close();
连接池:把数据库连接对象还给连接池,还可以给下一个人来使用
QueryRunner:SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。
QueryRunner(DataSource ds)提供数据源连接池,会自动帮你创建连接
Update(String sql,Object...obj)执行更新数据(DML操作)
query(String sql, ResultSetHandler rsh,Object...params)执行查询(DQL操作)
ResultHandler:封装数据的策略对象------将封装结果集中的数据,转换到另一个对象
query(sql, new BeanHandler(Student.class), params)把查询的结果封装成一个指定对象(查询单个对象)
query(sql, new BeanListHandler(Student.class)把查询结果封装成一个指定对象集合(查询多个对象)
qr.query(sql, new ScalarHandler())查询单个值,返回为一个Long类型
qr.query(sql, new MapListHandler())把查询的结果封装成一个Map集合
query(sql, new ColumnListHandler("列名")) 查询指定的列
1、导包
2、编写配置文件:db.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test03?rewriteBatchedStatements=true
username=root
password=123456

3、编写JDBCUtil类
public class JDBCUtil {
public static DataSource ds = null;
static {
try {
// 读取配置对象
Properties p = new Properties();
FileInputStream in = new FileInputStream("resource/db.properties");
p.load(in);
ds = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据源
public static DataSource getDataSource() {
return ds;
}
public static Connection getConn() {
try {
// 2.获取连接对象
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void close(Connection conn, Statement st, ResultSet rs) {
// 5.释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3、StudentDaoImpl.java
public class StudentDaoImpl implements IStudentDao {
@Override
public void save(Student stu) {
String sql = "insert into stu(id,name,age) values (?,?,?)";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
qr.update(sql, stu.getId(),stu.getName(),stu.getAge());
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void delete(int id) {
String sql = "delete from stu where id = ?";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
qr.update(sql, id);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void update(int id, Student stu) {
String sql = "update stu set name = ?,age = ? where id = ?";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
qr.update(sql, stu.getName(),stu.getAge(),id);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Student get(int id) {
String sql = "select * from stu where id = ?";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
return qr.query(sql, new BeanHandler<Student>(Student.class),id);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Student> getAll() {
String sql = "select * from stu ";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
return qr.query(sql, new BeanListHandler<Student>(Student.class));
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void test() {
String sql = "select * from stu ";
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
List<Map<String, Object>> res = qr.query(sql, new MapListHandler());
System.out.println(res);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Long getCount() {
String sql = "select count(*) as count from stu";
Long res = 0l;
QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());
try {
res = (Long) qr.query(sql, new ScalarHandler());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
}
网友评论