美文网首页
使用Druid连接池、DBUtils

使用Druid连接池、DBUtils

作者: Arvesynden | 来源:发表于2019-08-22 22:22 被阅读0次

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;

}

}

相关文章

网友评论

      本文标题:使用Druid连接池、DBUtils

      本文链接:https://www.haomeiwen.com/subject/vscasctx.html