package com.jdbc;

import java.lang.reflect.Field;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.ResultSetMetaData;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.ArrayList;  
import java.util.HashMap;   
import java.util.List;  
import java.util.Map;  
  
import com.mysql.jdbc.Driver;  
  
public class JdbcUtils {  
  
    // 定义数据库的用户名  
    private final String USERNAME = "root";  
    // 定义数据库的密码  
    private final String PASSWORD = "";  
    // 定义数据库的驱动信息  
    private final String DRIVER = "com.mysql.jdbc.Driver";  
    // 定义访问数据库的地址  
    private final String URL = "jdbc:mysql://localhost:3306/mydb";  
  
    // 定义访问数据库的连接  
    private Connection connection;  
    // 定义sql语句的执行对象  
    private PreparedStatement pstmt;  
    // 定义查询返回的结果集合  
    private ResultSet resultSet;  
      
    // 实现批处理的功能  
    private Statement stmt;  
  
    public JdbcUtils() {  
        // TODO Auto-generated constructor stub  
        try {  
            Class.forName(DRIVER);  
            System.out.println("注册驱动成功!!");  
        } catch (ClassNotFoundException e) {  
            // TODO Auto-generated catch block  
            System.out.println("注册驱动失败!!");  
        }  
  
    }  
  
    // 定义获得数据库的连接  
    public Connection getConnection() {  
  
        try {  
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);  
  
        } catch (Exception e) {  
            // TODO: handle exception  
            System.out.println("Connection exception !");  
        }  
  
        return connection;  
  
    }  
      
      
      
    /** 实现批处理删除 
     * @param sql 
     * @return 
     * @throws SQLException 
     */  
    public boolean deleteByBatch(String[] sql) throws SQLException{  
        boolean flag = false;  
        stmt = connection.createStatement();  
        if (sql!=null) { //判断数组是否为空,不能用length来判断,否则可能会报空指针异常。  
              
            for(int i = 0 ; i<sql.length ; i++){  
                stmt.addBatch(sql[i]);  
            }  
              
            int[] count = stmt.executeBatch();  
            if (count!=null) {  
                flag = true;  
            }  
              
        }     
        return flag;          
    }  
  
    /** 
     * 完成对数据库标的增加删除和修改的操作 
     *  
     * @param sql 
     * @param params 
     * @return 
     * @throws SQLException 
     */  
    public boolean updateByPreparedStatement(String sql, List<Object> params)  
            throws SQLException {  
        boolean flag = false;  
        int result = -1;// 表示当用户执行增加删除和修改的操作影响的行数  
        int index = 1; // 表示 占位符 ,从1开始  
        pstmt = connection.prepareStatement(sql);  
        if (params != null && !params.isEmpty()) {  
            for (int i = 0; i < params.size(); i++) {  
                pstmt.setObject(index++, params.get(i)); // 填充占位符  
            }  
        }  
  
        result = pstmt.executeUpdate();  
        flag = result > 0 ? true : false;  
        return flag;  
  
    }  
  
    /** 
     * 查询返回单条记录 
     *  
     * @param sql 
     * @param params 
     * @return 
     * @throws SQLException 
     */  
    public  Map<String, Object> findSimpleResult(String sql, List<Object> params)  
            throws SQLException {  
        Map<String, Object> map = new HashMap<String, Object>();  
        pstmt = connection.prepareStatement(sql);  
        int index = 1;  
        if (params != null && !params.isEmpty()) {  
            for (int i = 0; i < params.size(); i++) {  
                pstmt.setObject(index++, params.get(i));  
            }  
        }  
        resultSet = pstmt.executeQuery(); // 返回查询结果  
  
        ResultSetMetaData metaData = pstmt.getMetaData(); // 获取 结果中,一行所有列的结果  
        int cols_len = metaData.getColumnCount(); // 获得列的总数  
  
        while (resultSet.next()) {  
            for (int i = 0; i < cols_len; i++) {  
                String col_name = metaData.getColumnName(i + 1); // 获得第i列的字段名称  
                Object col_value = resultSet.getObject(col_name);// 返回 第i列的内容值  
                if (col_value == null) {  
                    col_value = "";  
                }  
                map.put(col_name, col_value);  
            }  
  
        }  
  
        return map;  
    }  
  
    /** 
     * 查询返回多条记录 
     *  
     * @param sql 
     * @param params 
     * @return 
     * @throws SQLException 
     */  
    public List<Map<String, Object>> findMoreResult(String sql,  
            List<Object> params) throws SQLException {  
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
        pstmt = connection.prepareStatement(sql);  
        int index = 1; // 表示占位符  
        if (params != null && !params.isEmpty()) {  
            for (int i = 0; i < params.size(); i++) {  
                pstmt.setObject(index++, params.get(i));  
            }  
        }  
        resultSet = pstmt.executeQuery(); // 返回查询结果集合  
        ResultSetMetaData metaData = resultSet.getMetaData(); // 获得列的结果  
  
        while (resultSet.next()) {  
            Map<String, Object> map = new HashMap<String, Object>();  
            int cols_len = metaData.getColumnCount(); // 获取总的列数  
            for (int i = 0; i < cols_len; i++) {  
                String col_name = metaData.getColumnName(i + 1); // 获取第 i列的字段名称  
                                                                    // ,列计算从1开始  
                Object col_value = resultSet.getObject(col_name); // 获取第i列的内容值  
                if (col_value == null) {  
                    col_value = "";  
                }  
  
                map.put(col_name, col_value);  
            }  
            list.add(map);  
        }  
  
        return list;  
  
    }  
  
    /** 
     * 查询返回单个JavaBean(使用java反射机制) 
     *  
     * @param sql 
     * @param params 
     * @param cls 
     * @return 
     * @throws Exception 
     */  
    public <T> T findSimpleRefResult(String sql, List<Object> params,  
            Class<T> cls) throws Exception {  
        T resultObject = null;  
        int index = 1; // 占位符  
        pstmt = connection.prepareStatement(sql);  
        if (params != null && !params.isEmpty()) {  
            for (int i = 0; i < params.size(); i++) {  
                pstmt.setObject(index++, params.get(i)); // 填充占位符  
            }  
        }  
        resultSet = pstmt.executeQuery(); // 获取查询结果  
  
        ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列的信息  
        int cols_len = metaData.getColumnCount(); // 获取总的列数  
        while (resultSet.next()) {  
            // 通过反射机制创建实例  
            resultObject = cls.newInstance(); // java反射机制  
            for (int i = 0; i < cols_len; i++) {  
                String col_name = metaData.getColumnName(i + 1); // 获取第i列的名称  
                Object col_value = resultSet.getObject(col_name); // 获取第i列的值  
                if (col_value == null) {  
                    col_value = "";  
                }  
                Field field = cls.getDeclaredField(col_name);  
                field.setAccessible(true);// 打开 JavaBean的访问 private权限  
                field.set(resultObject, col_value);  
            }  
  
        }  
  
        return resultObject;  
    }  
  
    /** 查询返回多个JavaBean(通过java反射机制) 
     * @param sql 
     * @param params 
     * @param cls 
     * @return 
     * @throws Exception 
     */  
    public <T> List<T> findMoreRefResult(String sql, List<Object> params,  
            Class<T> cls) throws Exception {  
        List<T> list = new ArrayList<T>();  
        int index = 1; //占位符  
        pstmt = connection.prepareStatement(sql);  
        if (params != null && !params.isEmpty()) {  
            for (int i = 0; i < params.size(); i++) {  
                pstmt.setObject(index++, params.get(i));  
            }  
        }  
        resultSet = pstmt.executeQuery(); // 返回查询结果集合  
  
        ResultSetMetaData metaData = resultSet.getMetaData(); // 返回列的信息  
        int cols_len = metaData.getColumnCount(); // 结果集中总的列数  
        while (resultSet.next()) {  
            // 通过反射机制创建一个java实例  
            T resultObject = cls.newInstance();  
            for (int i = 0; i < cols_len; i++) {  
                String col_name = metaData.getColumnName(i + 1); // 获得第i列的名称  
                Object col_value = resultSet.getObject(col_name); // 获得第i列的内容  
                if (col_value == null) {  
                    col_value = "";  
                }  
                Field field = cls.getDeclaredField(col_name);  
                field.setAccessible(true); // 打开JavaBean的访问private权限  
                field.set(resultObject, col_value);  
            }  
            list.add(resultObject);  
  
        }  
  
        return list;  
    }  
      
    /**关闭数据库访问 
     * @throws SQLException 
     */  
    public void releaseConn(){  
        if (resultSet!=null) {  
            try {  
                resultSet.close();  
            } catch (Exception e) {  
                // TODO: handle exception  
                e.printStackTrace();  
            }  
              
        }  
        if(stmt!=null){  
              
            try {  
                stmt.close();  
            } catch (Exception e) {  
                // TODO: handle exception  
                e.printStackTrace();  
            }  
        }  
        if (pstmt!=null) {  
            try {  
                pstmt.close();  
            } catch (Exception e) {  
                // TODO: handle exception  
                e.printStackTrace();  
            }  
        }  
        if (connection!=null) {  
            try {  
                connection.close();  
            } catch (Exception e) {  
                // TODO: handle exception  
                e.printStackTrace();  
            }  
        }  
    }  
  
      
}  
最近下载更多
asddwh  LV12 1月1日
xiongwei11231  LV8 2023年12月2日
321170193  LV6 2023年11月12日
jiemomo  LV12 2023年10月19日
天士大夫  LV2 2023年5月25日
summery  LV8 2023年4月25日
无名氏111  LV32 2022年12月15日
1379585889  LV11 2022年12月13日
SQ2930501923  LV14 2022年10月10日
13112360  LV2 2022年9月27日
最近浏览更多
wang13392 2023年12月28日
暂无贡献等级
asddwh  LV12 2023年12月25日
a2796831202 2023年12月20日
暂无贡献等级
颜菜菜  LV2 2023年12月19日
yuanshun  LV6 2023年12月19日
yyidaaa  LV1 2023年12月9日
15234568145  LV1 2023年12月5日
xiongwei11231  LV8 2023年12月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友