BDUtils
BDUtils
在使用JDBC进行开发时,冗余代码过多,为了简化JDBC开发,我们采用apache commons组件一个成员:DBUtils。
DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。
DBUtils是java编程中的数据库操作实用工具,DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
增删改:
update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
新增
public int add(String sname) throws SQLException{
QueryRunner qr=new QueryRunner();
Connection conn=JDBC.getCon();
String sql="insert into sort(sname) values(?)";
int row=qr.update(conn,sql,sname);
conn.close();
return row;
}
修改分类
public int update(int sid,String sname) throws SQLException{
QueryRunner qr=new QueryRunner();
Connection conn=JDBC.getCon();
String sql="update sort set sname=? where sid=?";
int row=qr.update(conn,sql,sname,sid);
conn.close();
return row;
}
查询:
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
ResultSetHandler结果集处理类:
ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中:new ArrayHandler()
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中:new ArrayListHandler()
BeanHandler 将结果集中第一条记录封装到一个指定的类中:new BeanHandler<Sort>(Sort.class)
BeanListHandler 将结果集中每一条记录封装到指定的自定义类中,将这些类在封装到List集合中:new BeanListHandler<自定义类>(类名.class)
ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中:new ColumnListHandler<String>("字段名")
ScalarHandler 它是用于单数据。例如select count(*) from 表操作。:new ScalarHandler<Long>()
MapHandler 将结果集第一行封装到Map<String,Object>集合中,Key 列名, Value 该列数据
MapListHandler 将结果集每一行封装到List<Map<String,Object>>集合中,Key 列名, Value 该列数据,Map集合存储到List集合
连接池
实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池
常见的连接池:DBCP、C3P0。
DBCP连接池
导入jar包:
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
编写工具类
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/xiangmu3?useUnicode=true&characterEncoding=UTF-8";
public static final String USERNAME = "root";
public static final String PASSWORD = "123456";
/*
* 创建连接池BasicDataSource
*/
public static BasicDataSource dataSource = new BasicDataSource();
//创建ThreadLocal对象
private static ThreadLocal<Connection> t1=new ThreadLocal<Connection>();
//静态代码块
static {
//对连接池对象 进行基本的配置
dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
dataSource.setUrl(URL); //指定要连接的数据库地址
dataSource.setUsername(USERNAME); //指定要连接数据的用户名
dataSource.setPassword(PASSWORD); //指定要连接数据的密码
}
/*
* 返回连接池对象
*/
public static DataSource getDataSource(){
return dataSource;
}
//从连接池中获取一条连接
public static Connection getconn(){
Connection conn=null;
try {
conn= dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//获取当前ThreadLocal对象中携带的连接对象
public static Connection getCurrentConn(){
Connection conn=t1.get();
if(conn==null){
conn=getconn();
t1.set(conn);
}
return conn;
}
//开启事务
public static void start(){
try {
getCurrentConn().setAutoCommit(false);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//回滚事务
public static void roolback(){
try {
getCurrentConn().rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//提交事务
public static void commit(){
try {
getCurrentConn().commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
使用:
QueryRunner(MyDBUtils.getDataSource())方法中有个构造方法,直接传连接池对象