JDBC相关工具类的创建

导读:本篇文章讲解 JDBC相关工具类的创建,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

import java.sql.*;

public class DBUtilUtils {
    public static Connection getConnection() {
        String url = "jdbc:mysql://127.0.0.1:3306/itcat?useSSL=false";
        String user = "root";
        String psd = "123456";
        String driverName = "com.mysql.jdbc.Driver";

        Connection conn = null;

        try {
            //创建驱动实例
            Class clazz = Class.forName(driverName);
            Driver driver = (Driver) clazz.newInstance();
            //注册驱动
            DriverManager.registerDriver(driver);
            //获取连接
            conn = DriverManager.getConnection(url,user,psd);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void closeAll(Connection conn, Statement statement,ResultSet rs){
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        if (statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
       }
    }
}

反射的应用,使用反射来给对象赋值

import java.lang.reflect.Field;
import java.sql.*;

public class Test_data {
    public <T> T getInstane(Class<T> clazz, String sql, Object ...args){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            conn = DBUtilUtils.getConnection();
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                //prepareStatement的占位符是从1开始的
                ps.setObject(i+1,args[i]);
            }
            rs = ps.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int coluncount = rsmd.getColumnCount();
            if (rs.next()){
                T t = clazz.newInstance();
                for (int i = 0; i < coluncount; i++) {
                    //获取列值
                    Object columVal = rs.getObject(i+1);
                    //获取列名
                    String columName = rsmd.getColumnLabel(i+1);
                    //使用反射给对象的相应值赋值
                    Field declaredField = clazz.getDeclaredField(columName);
                    //暴力反射,即便是私有变量也可以赋值
                    declaredField.setAccessible(true);
                    declaredField.set(t,columVal);
                }
                return t;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtilUtils.closeAll(conn,ps,rs);
        }
    return null;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/88896.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!