java从数据库获取单个对象或对象集合的简单工具类

3 篇文章 0 订阅

开发中在不用数据库的情况下操作数据库,比如说对数据库的增删改查,每次都重新撸一遍重复的代码,那样就会很麻烦,这里就给安利一个很简单的工具类来对数据库进行读写操作,当然并不能涵盖所有的功能,说了,只是很简单的操作数据库,当然你可以直接使用框架来操作,那样更好。。。

话不多说,直接上代码。。。


public class DBOperate<T> {

    private static Connection connection = null;
    private static PreparedStatement statement = null;
    private static ResultSet query = null;
    private static ResultSetMetaData metaData = null;


    /**
     * 增删改 操作
     * @param sql
     * @param params
     * @return
     */
    public static int operateDB(String sql,Object...params){
        int value = -1;
        try {
            connection = DBManager.getConnection();
            connection.setAutoCommit(false);
            statement = connection.prepareStatement(sql);

            for(int i = 0;i<params.length;i++){
                statement.setObject(i+1, params[i]);
            }
            System.out.println(sql);
            value = statement.executeUpdate();
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            if(connection!=null){
                try {
                    connection.rollback();
                    connection.setAutoCommit(true);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        } finally {
            DBManager.closeAll(statement,connection);
        }
        return value;
    }

    /**
     * 获取集合
     * @param sql
     * @param clazz
     * @param params
     * @return
     */
    public List<T> getList(String sql,Class<T> clazz,Object...params){
        List<T> list = new ArrayList<>();
        try {
            connection = DBManager.getConnection();
            statement = connection.prepareStatement(sql);
            for(int i = 0;i<params.length;i++){
                statement.setObject(i+1, params[i]);
            }
            query = statement.executeQuery();
            metaData = query.getMetaData();
            int column = metaData.getColumnCount();
            while(query.next()){
                T t = clazz.newInstance();
                for(int i = 1;i<=column;i++){
                    String name = metaData.getColumnName(i);
                    Object value = query.getObject(i);
                    Field field = clazz.getDeclaredField(name);
                    field.setAccessible(true);
                    field.set(t, value);
                }
                list.add(t);
            }
        } catch (SQLException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } finally {
            DBManager.closeAll(query,statement,connection);
        }
        return list;
    }


    /**
     * 获取对象
     * @param sql
     * @param clazz
     * @param params
     * @return
     */
    public T getInstance(String sql,Class<T> clazz,Object...params){

        try {
            connection = DBManager.getConnection();
            statement = connection.prepareStatement(sql);
            for(int i = 0;i<params.length;i++){
                statement.setObject(i+1,params[i]);
            }
            query = statement.executeQuery();
            metaData = query.getMetaData();
            int column = metaData.getColumnCount();

            if(query.next()){
                T t = clazz.newInstance();
                for(int i = 1;i<=column;i++){
                    String name = metaData.getColumnName(i);
                    Object value = query.getObject(i);
                    Field field = clazz.getDeclaredField(name);
                    field.setAccessible(true);
                    field.set(t, value);
                }
                return t;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }finally {
            DBManager.closeAll(statement,connection);
        }
        return null;
    }

}

这里面会有DBManager类,主要就是连接数据库和关闭的,可以自行补全。

很简单,简单使用反射的方法来给每一个属性赋值,然后返回就行。。。

当我们要使用的时候就可以这样:

public class StudentDaoImpl extends DBOperator<Student> {


    public List<Student> getList() {
        String sql = "select * from student";
        return super.getList(sql, Student.class);
    }

    public Student getStudentById(int id) {
        String sql = "select * from student where id=?";
        return super.getInstance(sql, GoodsInfo.class, id);
    }

}

Over。

写的不好,欢迎指正,不喜勿喷!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值