zoukankan      html  css  js  c++  java
  • 针对MySql封装的JDBC通用框架类(包含增删改查、JavaBean反射原理)

    package com.DBUtils;
    
    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.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.bean.UserInfo;
    
    public class JdbcUtils {
        private static final String USERNAME = "system";//数据库用户名
        private static final String PASSWORD = "zZ123456";//数据库密码
        private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";//驱动信息
        private static final String URL = "jdbc:oracle:thin:@localhost:1521:bookstore";//数据库地址
        private Connection connection = null;
        private PreparedStatement statement = null;
        private ResultSet resultSet = null;
        public JdbcUtils() {
            try {
                Class.forName(DRIVER);
                System.out.println("Connect database Successlly!");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 得到数据库连接
         * @return connection
         */
        public Connection getConnection() {
            try {
                connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
        
        /**
         * 更新操作(增删改)
         * @param sql
         * @param params
         * @return boolean
         * @throws SQLException
         */
        public boolean updateByPreparedStatement(String sql,List<Object> params) throws SQLException {
            boolean flag = false;
            int result = -1;
            statement = connection.prepareStatement(sql);
            int index = 1;
            if(params != null && !params.isEmpty()){
                for(int i=0; i<params.size(); i++){
                    statement.setObject(index++, params.get(i));
                }
            }
            result = statement.executeUpdate();
            return flag = result > 0 ? true : false;
        }
        
        /**
         * 查询单条数据
         * @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>();
            statement = connection.prepareStatement(sql);
            int index = 1;
            if(params != null && !params.isEmpty()){
                for(int i=0; i<params.size(); i++){
                    statement.setObject(index++, params.get(i));
                }
            }
            resultSet = statement.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.getCatalogName(i+1).toLowerCase();
                    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;
            statement = connection.prepareStatement(sql);
            if(params != null && !params.isEmpty()){
                for(int i = 0; i<params.size(); i++){
                    statement.setObject(index++, params.get(i));
                }
            }
            resultSet = statement.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).toLowerCase();
                    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;
            statement = connection.prepareStatement(sql);
            if(params != null && !params.isEmpty()){
                for(int i = 0; i<params.size(); i++){
                    statement.setObject(index++, params.get(i));
                }
            }
            resultSet = statement.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).toLowerCase();
                    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;
            statement = connection.prepareStatement(sql);
            if(params != null && !params.isEmpty()){
                for(int i = 0; i<params.size(); i++){
                    statement.setObject(index++, params.get(i));
                }
            }
            resultSet = statement.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).toLowerCase();
                    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 Conn(){
            if(resultSet != null){
                try{
                    resultSet.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
            if(statement != null){
                try{
                    statement.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
            if(connection != null){
                try{
                    connection.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) {
            JdbcUtils jdbcUtils = new JdbcUtils();
            jdbcUtils.getConnection();
            /*******************增*********************/
            /*
            String sql = "insert into userinfo (username, password) values (?, ?)";
            List<Object> params = new ArrayList<Object>();
            params.add("02");
            params.add("02");
            try {
                boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
                System.out.println(flag);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                jdbcUtils.Conn();
            }
            */
     
            /*******************删*********************/
            //删除名字为张三的记录
            /*
            String sql = "delete from userinfo where username = ?";
            List<Object> params = new ArrayList<Object>();
            params.add("7");
            try {
                boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
                System.out.println(flag);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
                jdbcUtils.Conn();
            }
            */
            
            /*******************改*********************/
            /*
            String sql = "update userinfo set password = ? where username = ? ";
            List<Object> params = new ArrayList<Object>();
            params.add("233333");
            params.add("01");
            boolean flag;
            try {
                flag = jdbcUtils.updateByPreparedStatement(sql, params);
                System.out.println(flag);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
                jdbcUtils.Conn();
            }
            */
     
            /*******************查*********************/
            //不利用反射查询多个记录
            /*
            String sql2 = "select * from userinfo";
            List<Map<String, Object>> list;
            try {
                list = jdbcUtils.findModeResult(sql2, null);
                System.out.println(list); //list toSteing() 直接输出
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                jdbcUtils.Conn();
            }*/
            
             /*
             //不利用反射查询单个记录 (出不来!!!)
             String sql2 = "select * from userinfo where username = ?";
             Map<String,Object> map;//
             List<Object> params = new ArrayList<Object>();
             params.add("01");
             Map<String, Object> userinfo ;
             try{
                 userinfo =  jdbcUtils.findSimpleResult(sql2, params);
                 System.out.println(userinfo);
             }catch(Exception e){
                 
             }finally{
                 jdbcUtils.Conn();
             }
             */
            
            /*
            //利用反射查询单条记录
            String sql = "select * from userinfo where username = ? ";
            List<Object> params = new ArrayList<Object>();
            params.add("01");
            UserInfo userInfo;
            try {
                userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
                System.out.print(userInfo);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                jdbcUtils.Conn();
            }
            */
            
            /*
            //利用反射查询多条记录
            String sql = "select * from userinfo where username = ?";
            List<Object> params = new ArrayList<Object>();
            params.add("02");
            List<UserInfo> list;
            try {
                list = jdbcUtils.findMoreRefResult(sql, params, UserInfo.class);
                System.out.print(list);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                jdbcUtils.Conn();
            }
            */
            
        }
    }
    package com.bean;
    
    import java.io.Serializable;
    import java.util.Arrays;
    import java.util.Date;
    
    public class UserInfo implements Serializable{ 
        
        private static final long serialVersionUID = 1L;
        private String username;
        private String password;
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "UserInfo [username=" + username + ", password=" + password
                    + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
                    + ", toString()=" + super.toString() + "]";
        }
        
    }
  • 相关阅读:
    Spring基础学习(四)—AOP
    Spring基础学习(三)—详解Bean(下)
    Spring基础学习(二)—详解Bean(上)
    Spring基础学习(一)—初识Spring
    Hibernate基础学习(九)—9999
    Hibernate基础学习(八)—8888888
    Hibernate基础学习(七)—检索方式
    Kali下安装Oracle JDK
    CentOS下安装vsftpd及问题解决
    CentOS下安装vsftpd及问题解决
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9917302.html
Copyright © 2011-2022 走看看