使用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);
}