使用JDBC技术是一件麻烦的事情,为了使数据库更加高效,有一种简化jdbc技术的操作--DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。
首先,我们调用一下QueryRunner
private QueryRunner queryRunner = new QueryRunner();
编写增、删、改操作——BaseDao
public int updata(String sql, Object... args) {
Connection connection = jdbcutil.getConnection();
try {
return queryRunner.update(connection, sql, args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcutil.close(connection);
}
return -1;
}
jdbcutil.getConnection()这个是我们已经编写好的jdbc连接工具,在这里进行调用
String sql, Object... args这个是我们针对我们即将要编写sql语句传递的一些参数、我们在编写sql语句的时候、针对我们不同的操作、我们会使用占位符来帮助我们实现很好的代码复用,这里的Object... args是可以传递任意个数的Object对象。
操作成功返回1失败就是-1
这里我们需要对获取或者修改的数据做持久化操作——Pojo(JavaBean)
public class User{
private String username;
private String password;
public User() {}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "BaseDaao{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
然后我们就可以操作数据库、使用不同的sql语句完成所需操作
public int saveUserInformation(User user) {
String sql = "insert into userinformation(username,password)values(?,?)";
return updata(sql,user.getUsername(),user.getPassword());
}
就好比在我们javaweb里面,编写的注册页面、需要保存信息到我们的user表里面、我们将sql语句传入进我们的BaseDao里面、再将我们需要保存的数据先用占位符?保留位置、随着sql语句把数据一起传进去,如果我们在这里写死了的话,那么一个BaseDao是无法满足我们整个程序的编写
对于操作数据库的大体流程就是这样
我们可以再编写出比较基本的两个查询数据库的方法
根据用户名查找整个用户信息
public <T> T queryForOne(Class<T> type,String sql,Object ...args){
Connection connection = jdbcutil.getConnection();
try {
return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcutil.close(connection);
}
return null;
}
Class<T> type因为我们再使用BeanHandler的时候,返回的是我们的javabean,也就是帮助我们把信息都封装进了pojo
public User queryUserByUserAndPassword(String username, String password) {
String sql = "select * from userinformation where username= ? and password= ?";
return queryForOne(User.class,sql,username,password);
}
返回全部信息
public <T> List<T> queryUser(Class<T> type, String sql, Object... args) {
Connection connection = jdbcutil.getConnection();
try {
return queryRunner.query(connection, sql, new BeanListHandler<T>(type), args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcutil.close(connection);
}
return null;
}
这里我们返回的是一个List数组的JavaBean
public List<User> queryUser() {
String sql = "select * from userinformation";
return queryUser(User.class,sql);
}