首页 > 技术文章 > 通用增删改查的方式

gnos 2020-06-26 15:00 原文

增、删、改通用方法:

public static void updateobj(String sql,Object...args){

        Connection connection=null;
        PreparedStatement pstm=null;

        try{

        connection=  JDBCUtill.getConnection();

        pstm=connection.prepareStatement(sql);

        for(int i=0;i<args.length;i++) {
            pstm.setObject((i + 1), args[i]);
        }
          //执行操作
        pstm.executeUpdate();

        } catch (Exception e) {

            e.printStackTrace();
        }finally{
            //关闭
            JDBCUtill.colseResource(pstm,connection);
        }

    }

 

通用查询一组数据的方法:

//Class<T>clazz:返回的值得类型
    //sql SQL语句返回值
    //object...args  动态可变参数

    public static <T> T selectobj(Class<T> clazz,String sql,Object...args){

        Connection connection=null;
        PreparedStatement pstm=null;
        ResultSet rs=null;

        try{
            //连接数据库
            connection=  JDBCUtill.getConnection();

            pstm=connection.prepareStatement(sql);

            //填充占位符
            for(int i=0;i<args.length;i++) {
                pstm.setObject((i + 1), args[i]);
            }
            //执行操作
            rs=pstm.executeQuery();

            //创建一个元数据类型接收返回值
            ResultSetMetaData metaData=rs.getMetaData();

            //获取数据表中的字段数(列数)
            int count=metaData.getColumnCount();

            T t=clazz.newInstance();  //等同于 User user =new User;

            //判断是否有值,然后打印
            if(rs.next()){
                for(int i=0;i<count;i++){
                    //获取对应的字段的值
                    Object value=rs.getObject((i+1));
                    //获取到对应字段的别名
                    String label=metaData.getColumnLabel((i+1));
                    //获取到对应的字段
                    Field field = clazz.getDeclaredField(label);
                    //设置可以自己设置值得权限
                    field.setAccessible(true);
                    //将值装配给对象
                    field.set(t,value);
                }
                return t;
                }

        } catch (Exception e) {

            e.printStackTrace();
        }finally {
//关闭 JDBCUtill.colseResource2(rs,pstm,connection); }
return null; }

 

通用查询所有数据的方法:

/**
* 查询多组数据的方法
*/
//Class<T>clazz:返回的值得类型
public static <T> List<T> selectallobj(Class<T> clazz, String sql, Object...args){
Connection connection=null;
PreparedStatement pstm=null;
ResultSet rs=null;
try{
//连接数据库
connection= JDBCUtill.getConnection();
//预编译sql
pstm=connection.prepareStatement(sql);

//3.填充占位符
for (int i=0; i<args.length;i++){
pstm.setObject((i+1),args[i]);
}
//4.执行操作
rs = pstm.executeQuery();

//创建一个与数据并接收返回值
ResultSetMetaData metaData=rs.getMetaData();

//获取数据表中的列数
int count =metaData.getColumnCount();

ArrayList<T> list = new ArrayList<T>();

//判断是否有值 ,并打印
while(rs.next()){

T t=clazz.newInstance(); //等同于 User user =new User;

for (int i=0; i<count;i++){
//获取对应字段的值
Object value=rs.getObject((i+1));
//获取对应字段的别名
String label=metaData.getColumnLabel((i+1));
//获取到对应的字段
Field field=clazz.getDeclaredField(label);
//设置可以自己设置值得权限
field.setAccessible(true);
//将值装配给对象
field.set(t,value);
}
list.add(t);
}
return list;
}catch (Exception e) {
e.printStackTrace();
}finally{
//关闭
JDBCUtill.colseResource2(rs,pstm,connection);
}
return null;
}

 

public class TestSelectAll {
    public static void main(String[] args) {
        String sql="SELECT *FROM USER ";
        List <User> users=TestCurd.selectallobj(User.class,sql);
          for(User user:users){
              System.out.println(user.toString());
          }
    }
}

 

推荐阅读