jdbc增删改查进行封装/数据库工具类的终极封装

package javacto.taobao.com;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class DBUtil {
    private  static String driverName;
    private  static String url;
    private  static String usreName;
    private  static String pwd;

    static {
        //加载类之前就会执行
        //调用init()方法
        init();
    }

    private static void init() {
        Properties ps = new Properties();
        String path = "db.properties";
        InputStream is = DBUtil.class.getClassLoader().getResourceAsStream(path);
        try {
            ps.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //请各位同学务必打印输出 值 是否正确
        System.out.println(ps.get("db.driverName"));
        System.out.println(ps.get("db.url"));
        System.out.println(ps.get("db.username"));
        System.out.println(ps.get("db.pwd"));

        driverName= (String) ps.get("db.driverName");
        url= (String) ps.get("db.url");
        usreName= (String) ps.get("db.username");
        pwd= (String) ps.get("db.pwd");
    }

    /**
     * 建立连接
     * @return
     */
    public static Connection getConnection(){
        //访问网址:javacto.taobao.com
        Connection conn = null;
        try {
            //1.加载驱动  DriverManager
            Class.forName(driverName);
            //2.建立连接   Connection
            conn = DriverManager.getConnection(url,usreName,pwd);

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


    /**
     * 释放资源
     * PreparedStatement extends Statement
     */
    public static void closeAll(Connection conn, Statement pstm, ResultSet rs){
        try {
            if(rs!=null){
                rs.close();
            }

            if(pstm!=null){
                pstm.close();
            }
            if(conn!=null){
                conn.close();
            }

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

    /**
     * 封装增删改
     * 访问网址:javacto.taobao.com
     * @return
     */
    public static   int   executeUpdate(String sql,Object agrs[]){
        int num=0;

        //1.定义变量
        Connection conn =  null;
        PreparedStatement pstm =null;
        try{
            //2.建立连接   Connection
            conn = getConnection();
            // 3.PreparedStatement 处理预编译sql语句

            //把之前的 DML随便一个复制过来,然后修改两步即可
            pstm = conn.prepareStatement(sql);
            // 4.给?赋值
            //我也不知道 Object agrs[] 变量中 会有 多个参数  直接循环,有就就会循环
            for(int i = 0;i<agrs.length;i++){
                pstm.setObject(i+1,agrs[i]);
            }
            // 5.执行预编译sql语句  DML executeUpdate ()  返回int类型
            num = pstm.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 6.释放资源
            closeAll(conn,pstm,null);
        }
        return num;

    }

    /**
     * 列表查询
     * javacto.taobao.com 访问网址
     */
    public  static<T> List<T> queryListExecute(String sql, ArrayList<Object> paras, Class<T> cls ){
        Connection conn = getConnection();
        PreparedStatement pst = null;
        ResultSet rs = null;
        T singleObject = null;
        int index = 1;
        List <T> list = new ArrayList<T>();
        try {
            pst = conn.prepareStatement(sql);
            if(paras !=null && paras.size()>0) {
                pst.clearParameters();
                for(int i = 0;i<paras.size();i++) {
                    pst.setObject(index++, paras.get(i));
                }
            }
            rs = pst.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            while(rs.next()) {
                singleObject = cls.newInstance();
                for(int i = 0;i<columnCount;i++) {
                    String columnName = rsmd.getColumnName(i+1);
                    Object columdValue = rs.getObject(columnName);
                    Field field = cls.getDeclaredField(columnName);
                    field.setAccessible(true);
                    field.set(singleObject, columdValue);
                }
                list.add(singleObject);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            closeAll(conn, pst, rs);
        }

        return list;
    }
}

db.properties文件中代码

db.driverName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/javacto
db.username=root
db.pwd=学习更多请访问:javacto.taobao.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章