Druid数据库连接池使用
一,简介
1, Druid数据源连接池来源于阿里巴巴,是淘宝和支付宝专用数据库连接池.它支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
二,导入jar和配置文件
1,首先,在模块下导入jar包和配置文件 如下图:
2,我们需要创建一个工具类,简化代码的编写和连接 代码如下:
```import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//使用static修饰,使他与静态代码块同步加载
static DataSource ds = null;
//静态代码块中加载配置文件,当工具类被调用时,就会自动加载
static {
try {
//创建读取配置文件的对象
Properties pro = new Properties();
//将配置文件的字节码转换为流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
//加载配置文件
pro.load(is);
//创建连接池对象(DataSource数据源,简单理解为连接池对象)
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据库连接池对象
public static DataSource getDataSource() {
return ds;
}
//返回数据库对象获取的连接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//释放资源方法重载
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//释放资源
public static void close(Statement stmt, Connection conn) {
//调用重载的方法
close(null, stmt, conn);
}
}
3,创建JDBCTemplate对象,对数据库进行增,删,改,查的操作 代码如下:
public class JDBCTemplate {
//成员位置创建JDBCTemplate对象
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 使用JDBC进行增删改
*/
/*第一,增*/
@Test
public void testupdate1(){
//定义sql语言
String sql="insert into account(id,name,balance) values(5,'zhaoliu',5500)";
//执行sql
int count = template.update(sql);
//处理结果
System.out.println(count);
}
/*第二,删*/
@Test
public void testupdate2(){
String sql="DELETE from account where id=?";
int count = template.update(sql, 5);
System.out.println(count);
}
/*第三,改*/
@Test
public void testupdate3(){
String sql="update account set balance=? where id=?";
int count = template.update(sql, 9999, 4);
System.out.println(count);
}
/**
* 使用JDBC进行查询
*/
/*查询一条记录*/
@Test
public void query1(){
String sql="select * from account where id=?";
Map<String, Object> map = template.queryForMap(sql, 1);
System.out.println(map);
}
/*查询所有记录*/ //查询结果时map集合,再将其封装为list集合
@Test
public void query2(){
String sql="select * from account";
List<Map<String, Object>> list = template.queryForList(sql);
System.out.println(list);
}
/*查询所有记录*/ //查询结果是封装成的emp对象,将此对象封装成list集合
@Test
public void query3(){
String sql="select * from account";
//将Emp对象封装为List集合
List<Account> list = template.query(sql, new BeanPropertyRowMapper<>(Account.class));
//遍历集合
for (Account account : list) {
System.out.println(account);
}
}
/*查询总记录数*/
@Test
public void query4(){
String sql="select count(id) from account";
Long total = template.queryForObject(sql,Long.class);
System.out.println(total);
}
}