1.通过BasicDataSource类直接创建数据源对象
在使用BasicDataSource类创建一个数据源对象时,需要手动给数据源对象设置属性值,然后获取数据库连接对象。
例:
package chapter10;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class example01 {
public static DataSource ds=null;
static {
BasicDataSource b=new BasicDataSource();
b.setDriverClassName("com.mysql.jdbc.Driver");
b.setUrl("jdbc:mysql://localhost:3306/jdbc");
b.setUsername("root");
b.setPassword("123456");
b.setInitialSize(5);
b.setMaxActive(10);
ds=b;
}
public static void main(String[] args) throws SQLException {
Connection conn=ds.getConnection();
DatabaseMetaData m=conn.getMetaData();
System.out.println(m.getURL());
System.out.println(m.getUserName());
System.out.println(m.getDriverName());
}
}
运行结果:
2.通过ComboPooledDataSource()构造方法创建数据源对象
使用ComboPooledDataSource()构造方法创建数据源对象,需要手动给数据源对象设置属性值,然后获取数据库连接对象。
例:
package chapter10;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class example03 {
public static DataSource ds=null;
static {
ComboPooledDataSource c=new ComboPooledDataSource();
try {
c.setDriverClass("com.mysql.jdbc.Driver");
c.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
c.setUser("root");
c.setPassword("123456");
c.setInitialPoolSize(5);
c.setMaxPoolSize(10);
ds=c;
}catch(PropertyVetoException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
Connection conn=ds.getConnection();
DatabaseMetaData m=conn.getMetaData();
System.out.println(m.getURL());
System.out.println(m.getUserName());
System.out.println(m.getDriverName());
}
}
运行结果:
DBUtils工具
1.BeanultSetHandler实现类
先创建一个名为BaseDao的类该类中编写了一个通用查询方法
package chapter10;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.commons.dbutils.ResultSetHandler;
public class BaseDao {
public static Object query(String sql,ResultSetHandler<?> rsh,Object... params) {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=JDBCUtils.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;params!=null && i<params.length;i++) {
ps.setObject(i+1, params[i]);
}
rs=ps.executeQuery();
Object obj=rsh.handle(rs);
return obj;
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.realse(rs, ps, conn);
}
return rs;
}
}
在包下创建一个User类,用来封装User对象
package chapter10;
public class User {
private int id;
private String name;
private String password;
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;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在包下创建一个名为ResultSetTest1的类,用于演示BeanHandler类对结果集的处理
package chapter10;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class ResultSetTest1 {
public static void testBeanHandler() {
BaseDao baseDao=new BaseDao();
String sql="select * from users where id=?";
Object object=BaseDao.query(sql, new BeanHandler(User.class), 12);
if(object!=null && object instanceof User) {
User user=(User) object;
System.out.println("id为12的User对象的name值为:"+user.getName());
}else {
System.out.println("查询结果为空:"+object);
}
}
public static void main(String[] args) {
testBeanHandler();
}
}
运行结果:
可以看出BeanHandler已成功将id为12的数据存入到了实体user对象中。
在包下建一个名为ResultSetTest2的类用来演示BeanListHandler类对结果集的处理
package chapter10;
import java.util.ArrayList;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class ResultSetTest2 {
public static void testBeanHandler() {
BaseDao b=new BaseDao();
String sql="select * from users";
ArrayList<User> list = (ArrayList<User>) b.query(sql, new BeanListHandler(User.class));
for(int i=0;i<list.size();i++) {
System.out.println("第"+(i+1)+"条数据的username值为:"+list.get(i).getName());
}
}
public static void main(String[] args) {
testBeanHandler();
}
}
运行结果:
从运行结果可以看出testBeanHandler()方法可以将每一行的数据都封装到user实体对象中,并将其存放到list中。