zoukankan      html  css  js  c++  java
  • java通用的jdbc数据库操作类

    package com.hy.fddsvr.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Field;
    import java.sql.*;
    import java.util.*;
    
    
    public class DBManager {
    
        /**
         * @param args
         */
        static String driver;
        static String url;
        static String username;
        static String password;
        private Connection connection;
        private PreparedStatement pstmt;
        private ResultSet resultSet;
    
        public DBManager() {
            //从配置文件db.properties中读取数据库配置信息
            InputStream in = DBManager.class.getClassLoader().getResourceAsStream("db.properties");
            Properties pro = new Properties();
            try {
                pro.load(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            //数据库驱动
            driver = pro.getProperty("driver");
            //服务器地址
            url = pro.getProperty("url");
            //数据库用户名
            username = pro.getProperty("username");
            //数据库密码
            password = pro.getProperty("password");
    
            try {
                //连接数据库
                getConnection();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获得数据库的连接
         *
         * @return
         * @throws ClassNotFoundException
         */
        public Connection getConnection() {
            try {
                Class.forName(driver);
                connection = DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (Exception e) {
                System.out.println("fail to connect database");
            }
            return connection;
        }
    
        /**
         * 获得最大ID
         *
         * @param tableName
         * @return
         * @throws SQLException
         */
        public int getMaxId(String tableName) {
            Statement state = null;
            ResultSet rs = null;
            int maxId = 0;
            try {
                state = connection.createStatement();
                String sql = "select max(autoid) maxId from " + tableName;
                rs = state.executeQuery(sql);
                // 从resultset对象中将数据取出
                if (rs.next()) {
                    maxId = rs.getInt("maxId");
                }
            } catch (Exception ex) {
                // TODO Auto-generated catch block
                ex.printStackTrace();
            }
    
            return ++maxId;
        }
    
        /**
         * 判断当前sql语句返回是否为空
         *
         * @param sql
         * @return 返回true表示空数据集,返回false表示非空数据集
         * @throws SQLException
         */
        public boolean CheckDataIsEmpty(String sql) {
            Statement state = null;
            ResultSet rs = null;
            boolean isempty=true;
    
    
            try {
                state = connection.createStatement();
                rs = state.executeQuery(sql);
                if (rs==null){
                    isempty=true;
                }else{
                    if(rs.next()){
                        isempty=false;
                    }else{
                        isempty=true;
                    }
                }
            } catch (Exception ex) {
                // TODO Auto-generated catch block
                ex.printStackTrace();
            }
    
    
            return isempty;
        }
    
    
    
        /**
         * 获取某个sql语句的首行首列值
         *
         * @param sql
         * @return 返回首行首列值
         * @throws SQLException
         */
        public String GetTopValue(String sql) {
            Statement state = null;
            ResultSet rs = null;
            String topvalue="";
    
    
            try {
                state = connection.createStatement();
                rs = state.executeQuery(sql);
                if (rs!=null){
                    if(rs.next()){
                        topvalue = rs.getString(1);
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    
    
            return topvalue;
        }
    
        /**
         * 获取某个sql语句的首行记录集
         *
         * @param sql
         * @return 返回首行记录集
         * @throws SQLException
         */
        public ResultSet GetTopDataSet(String sql) {
            Statement state = null;
            ResultSet rs = null;
            try {
                state = connection.createStatement();
                rs = state.executeQuery(sql);
                if (rs!=null){
                    rs.next();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return rs;
        }
    
    
        /**
         * 执行某个sql语句的更新操作
         *
         * @param sql
         * @return 执行成功返回true,失败返回false
         * @throws SQLException
         */
        public boolean ExecSql(String sql) {
            Statement state = null;
            int iflag=-1;
            boolean res=false;
    
            try {
                pstmt = connection.prepareStatement(sql);
                iflag = pstmt.executeUpdate();
                res = (iflag > 0 ? true : false);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return res;
        }
    
    
        /**
         * 增加、删除、改
         *
         * @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);
                    int type = metaData.getColumnType(i + 1);
                    if (cols_value == null) {
                        if (type == Types.INTEGER) {
                            cols_value = 0;
                        } else {
                            cols_value = "";
                        }
                    }
                    Field field = cls.getDeclaredField(cols_name.toLowerCase());
                    field.setAccessible(true); // 打开javabean的访问权限
                    if (type == Types.TIMESTAMP) {
                        field.set(resultObject, String.valueOf(cols_value));
                    } else {
                        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();
                }
            }
        }
    }

    在 resources目录下创建一个dbo.properties文件,内容:

    driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
    url = jdbc:sqlserver://localhost:1433;DatabaseName=MyDB;
    username = sa
    password = 123

    调用方式:

    DBManager db=new DBManager();
    db.ExecSql("update mytb set a1=0 where b1 is null");
  • 相关阅读:
    备忘录方法与动态规划比较
    struct大小
    位域
    cocos2d-x获得系统的语言
    游戏中的心理学:利用归因错误让玩家更爱你的游戏
    武侠游戏核心追求点
    将“Cocos2dx-截屏并设置图片尺寸 ”中cocos2d-x代码转换为2.2的代码
    Cocos2dx-截屏并设置图片尺寸
    信息图:iOS 7开发者需要知道的事
    批处理学习 二
  • 原文地址:https://www.cnblogs.com/lpq21314/p/13169731.html
Copyright © 2011-2022 走看看