zoukankan      html  css  js  c++  java
  • jdbc的封装(使用参数文件)

    借鉴原CSDN作者yanzi1225627的一篇:http://blog.csdn.net/yanzi1225627/article/details/26950615

    作者东西写的很好,自己用的时候进行了一点修改,修改的地方是参数文件关闭连接函数.修改部分会用红色标记

    JdbcUtils.java

    修改后代码如下:

    /**
     * Created by Administrator on 2017-12-08.
     */
    import java.io.IOException;
    import java.io.InputStream;
    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.util.*;
    
    
    public class JdbcUtils {
    
        //数据库用户名
        private static String USERNAME;
        //数据库密码
        private static String PASSWORD;
        //驱动信息
        private static String DRIVER;
        //数据库地址
        private static String URL;
        private Connection connection;
        private PreparedStatement pstmt;
        private ResultSet resultSet;
    
        //无参数构造函数,参数由配置文件中出
        public JdbcUtils() {
         //使用参数文件方式进行对数据库连接的判断,config.properties文件在JdbcUtil.java文件的同目录下,比如我的java文件在src文件夹里,config.properties也在src文件夹中
            InputStream inputStream = getClass().getResourceAsStream("config.properties");
            Properties p = new Properties();
            try {
                p.load(inputStream);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            DRIVER = p.getProperty("DRIVER");
            URL = p.getProperty("URL");
            USERNAME = p.getProperty("USERNAME");
            PASSWORD = p.getProperty("PASSWORD");
    //        System.out.println("Url:"+p.getProperty("URL")+",USERNAME:"+p.getProperty("USERNAME")+",PASSWORD:"+p.getProperty("PASSWORD"));
            try{
                Class.forName(DRIVER);
                System.out.println("数据库连接成功!");
            }catch(Exception e){
    
            }
        }
    
        /**
         * 获得数据库的连接
         * @return
         */
        public Connection getConnection(){
            try {
                connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return connection;
        }
    
    
        /**
         * 增加、删除、改
         * @param sql
         * @param params
         * @return
         * @throws SQLException
         */
        public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException{
            boolean flag = false;
            int result = -1;
            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));
                }
            }
            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>();
            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 col_len = metaData.getColumnCount();
            while(resultSet.next()){
                for(int i=0; i<col_len; i++ ){
                    String cols_name = metaData.getColumnName(i+1);
                    Object cols_value = resultSet.getObject(cols_name);
                    if(cols_value == null){
                        cols_value = "";
                    }
                    map.put(cols_name, cols_value);
                }
            }
            return map;
        }
    
        /**查询多条记录
         * @param sql
         * @param params
         * @return
         * @throws SQLException
         */
        public List<Map<String, Object>> findModeResult(String sql, List<Object> params) throws SQLException{
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            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()){
                Map<String, Object> map = new HashMap<String, Object>();
                for(int i=0; i<cols_len; i++){
                    String cols_name = metaData.getColumnName(i+1);
                    Object cols_value = resultSet.getObject(cols_name);
                    if(cols_value == null){
                        cols_value = "";
                    }
                    map.put(cols_name, cols_value);
                }
                list.add(map);
            }
    
            return list;
        }
    
        /**通过反射机制查询单条记录
         * @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();
                for(int i = 0; i<cols_len; i++){
                    String cols_name = metaData.getColumnName(i+1);
                    Object cols_value = resultSet.getObject(cols_name);
                    if(cols_value == null){
                        cols_value = "";
                    }
                    Field field = cls.getDeclaredField(cols_name);
                    field.setAccessible(true); //打开javabean的访问权限
                    field.set(resultObject, cols_value);
                }
            }
            return resultObject;
    
        }
    
        /**通过反射机制查询多条记录
         * @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()){
                //通过反射机制创建一个实例
                T resultObject = cls.newInstance();
                for(int i = 0; i<cols_len; i++){
                    String cols_name = metaData.getColumnName(i+1);
                    Object cols_value = resultSet.getObject(cols_name);
                    if(cols_value == null){
                        cols_value = "";
                    }
                    Field field = cls.getDeclaredField(cols_name);
                    field.setAccessible(true); //打开javabean的访问权限
                    field.set(resultObject, cols_value);
                }
                list.add(resultObject);
            }
            return list;
        }
    
        /**
         * 释放数据库连接
         */
        public void releaseConn(){
            if(resultSet != null){
                try{
                    resultSet.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭所有资源,原代码中的releaseConn中关闭了结果集对象,对prepareStatement和connection没有释放。
         */
        private void closeAll() {
            // 关闭结果集对象
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
    
            // 关闭PreparedStatement对象
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
    
            // 关闭Connection 对象
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) throws SQLException {
            // TODO Auto-generated method stub
            JdbcUtils jdbcUtils = new JdbcUtils();
            jdbcUtils.getConnection();
            jdbcUtils.closeAll();
    
            /*******************增*********************/
            /*      String sql = "insert into userinfo (username, pswd) values (?, ?), (?, ?), (?, ?)";
            List<Object> params = new ArrayList<Object>();
            params.add("小明");
            params.add("123xiaoming");
            params.add("张三");
            params.add("zhangsan");
            params.add("李四");
            params.add("lisi000");
            try {
                boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
                System.out.println(flag);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/
    
    
            /*******************删*********************/
            //删除名字为张三的记录
            /*      String sql = "delete from userinfo where username = ?";
            List<Object> params = new ArrayList<Object>();
            params.add("小明");
            boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);*/
    
            /*******************改*********************/
            //将名字为李四的密码改了
            /*      String sql = "update userinfo set pswd = ? where username = ? ";
            List<Object> params = new ArrayList<Object>();
            params.add("lisi88888");
            params.add("李四");
            boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
            System.out.println(flag);*/
    
            /*******************查*********************/
            //不利用反射查询多个记录
            /*      String sql2 = "select * from userinfo ";
            List<Map<String, Object>> list = jdbcUtils.findModeResult(sql2, null);
            System.out.println(list);*/
        }
    
    }
    

      

    config.properties文件如下,修改成自己想要连接的库参数就可以了。

    DRIVER = com.mysql.jdbc.Driver
    URL = jdbc:mysql://localhost:3307/test
    USERNAME = Main
    PASSWORD = qwertasdfg
    

      

    有不懂或写错的地方请联系我。q1163949417

  • 相关阅读:
    第12-13周总结
    排球比赛计分规则
    我与计算机
    排球比赛计分规则-三层架构
    怎样成为一个高手 观后感
    最后一周冲刺
    本周psp(观众页面)
    本周psp(观众页面)
    本周工作计量
    本周总结
  • 原文地址:https://www.cnblogs.com/Jacck/p/8021753.html
Copyright © 2011-2022 走看看