一般的なCRUDのJDBC開発

public class test {
    String url = "jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC&characterEncoding=utf-8";
    String user = "root";
    String password = "root";
    String driver = "com.mysql.jdbc.Driver";
    String insert_sql = "insert into user(id,name) values(?,?)";
    String select_sql = "select id,name from user WHERE id=? and name=?";
    @Test
    public void test(){
        parameterMetaData(insert_sql,new Object[]{"1","tom"});
        List<User> users = resultSetMetaData(select_sql, new Object[]{"1", "tom"}, User.class);
        for (User user:users) {
            System.out.println(user.toString());
        }
    }
    //参数元数据编写增删改通用方法
    public void parameterMetaData(String sql,Object[] params){
        try {
            //获取数据库连接
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);
            //获取PreparedStatement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //获取ParameterMetaData参数元数据
            ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
            //获取sql参数的数量
            int parameterCount = parameterMetaData.getParameterCount();
            //给参数赋值
            for(int i=0;i<parameterCount;i++){
                preparedStatement.setObject(i+1,params[i]);
            }
            //执行sql语句
            preparedStatement.executeUpdate();
            //关闭连接
            preparedStatement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //结果集元数据编写查找通用方法
    public <T> List<T> resultSetMetaData(String sql, Object[] params, Class<T> clazz){
        //创建List保存要查询的数据
        List<T> list = new ArrayList<>();
        try {
            //获取数据库连接
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);
            //获取PreparedStatement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //获取ParameterMetaData参数元数据
            ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
            //获取sql参数的数量
            int parameterCount = parameterMetaData.getParameterCount();
            //给参数赋值
            for(int i=0;i<parameterCount;i++){
                preparedStatement.setObject(i+1,params[i]);
            }
            //执行sql语句
            ResultSet resultSet = preparedStatement.executeQuery();
            //获取ResultSetMetaData结果集元数据
            ResultSetMetaData metaData = resultSet.getMetaData();
            //通过结果集元数据获取字段数量
            int columnCount = metaData.getColumnCount();
            //每循环一个代表查询出一条数据,封装一个javabean对象
            while(resultSet.next()){
                T t = clazz.newInstance();
                for(int i=0;i<columnCount;i++){
                    //通过字段序号获取字段名称
                    String columnName = metaData.getColumnName(i+1);
                    //通过字段序号获取字段数据
                    Object value = resultSet.getObject(i+1);
                    //结果赋值给javabean对象
                    Field declaredField = clazz.getDeclaredField(columnName);
                    declaredField.setAccessible(true);
                    declaredField.set(t,value);
                }
                //将javabean保存到List
                list.add(t);
            }
            //关闭连接
            resultSet.close();
            preparedStatement.close();
            connection.close();
            //防止内存泄漏
            resultSet = null;
            preparedStatement = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}

class User{
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

 

おすすめ

転載: blog.csdn.net/qq_42239765/article/details/90671652