第三节——数据库连接池与JDBC Template
Posted 想学习安全的小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三节——数据库连接池与JDBC Template相关的知识,希望对你有一定的参考价值。
数据库连接池
一、Druid的使用步骤
- 导入jar包 druid-1.0.9.jar,jar包下载地址:下载地址
- 定义配置文件:
* 是properties形式的
* 可以叫任意名称,可以放在任意目录下,需要手动加载 - 加载配置文件。Properties
- 获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
- 获取连接:getConnection
二、使用方法
-
导入jar包
-
将druid.properties复制到src目录下
-
修改druid.properties里面值
-
获取连接
// 加载配置文件
Properties pro = new Properties();
//pro.load(new FileReader("C:\\\\tsb\\\\tool\\\\java\\\\jar\\\\druid-1.0.9\\\\druid.properties"));
InputStream is = Main.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
System.out.println(pro);
// 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
// 获取连接
Connection con = dataSource.getConnection();
System.out.println(con);
三、简化方法,制作JDBCUtils类
- 定义一个类 JDBCUtils
- 提供静态代码块加载配置文件,初始化连接池对象
- 提供方法
* 获取连接方法:通过数据库连接池获取连接
* 释放资源
* 获取连接池的方法
public class Utils {
private static DataSource ds;
static {
Properties pro = new Properties();
try {
pro.load(new FileReader("C:\\\\tsb\\\\tool\\\\java\\\\jar\\\\druid-1.0.9\\\\druid.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取连接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 释放资源
public static void close(Statement s,Connection c) throws SQLException {
s.close();
c.close();
}
public static void close(ResultSet r, Statement s, Connection c) throws SQLException {
r.close();
s.close();
c.close();
}
// 获取连接池
public static DataSource getDataSource(){
return ds;
}
}
四、工具类的使用
Connection con = Utils.getConnection();
Statement statement = con.createStatement();
String sql = "select * from ttable";
ResultSet result = statement.executeQuery(sql);
result.next(); //光标先next到第二行才能获取数据,默认第一行是列的名称
int i = result.getInt(1); //获取第一行第一列的数据
String name = result.getString("name"); //获取第一行中name列的数据
System.out.println(i+":"+name);
Utils.close(statement,con);
JDBC Template
一、使用步骤
- 导入jar包,下载地址
- 创建JdbcTemplate对象。依赖于数据源DataSource
* JdbcTemplate template = new JdbcTemplate(ds); - 调用JdbcTemplate的方法来完成CRUD的操作
* update():执行DML语句。增、删、改语句
* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,注意:这个方法查询的结果集长度只能是1
* queryForList():查询结果将结果集封装为list集合,注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
* query():查询结果,将结果封装为JavaBean对象
* query的参数:RowMapper,一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
* queryForObject:查询结果,将结果封装为对象,一般用于聚合函数的查询
二、例子
- update
JdbcTemplate j = new JdbcTemplate(Utils.getDataSource());
String sql = "update ttable set name=?";
int i = j.update(sql, "asd");
System.out.println(i);
- queryForMap()
JdbcTemplate j = new JdbcTemplate(Utils.getDataSource());
String sql = "select * from ttable where id=1";
Map<String, Object> map = j.queryForMap(sql);
System.out.println(map);
- queryForList()
JdbcTemplate j = new JdbcTemplate(Utils.getDataSource());
String sql = "select * from ttable";
List<Map<String, Object>> list = j.queryForList(sql);
for (Map<String, Object> m:list){
System.out.println(m);
}
- query()
//定义一个Test1类,里面的成员变量名称与类型要与表一致,且Test1类定义了get和set方法
public class Test1 {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Test1{" +
"id=" + id +
", name='" + name + '\\'' +
'}';
}
}
//使用query方法
JdbcTemplate j = new JdbcTemplate(Utils.getDataSource());
String sql = "select * from ttable";
List<Test1> query = j.query(sql, new BeanPropertyRowMapper<Test1>(Test1.class));
System.out.println(query);
以上是关于第三节——数据库连接池与JDBC Template的主要内容,如果未能解决你的问题,请参考以下文章