我的JdbcUtils类

这是目录结构:

其中后面三个类都是第一个类的子类,第一个类是父类。

JdbcUtils:

package com.smt.db;

import java.io.IOException;
import java.io.InputStream;
import java.sql.CallableStatement;
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 java.util.Properties;

import com.alibaba.druid.pool.DruidDataSource;

public class JdbcUtils {
    // 定义变量
    private Connection ct = null;
    // 大多数情况下用preparedstatement替代statement
    private PreparedStatement ps = null;
    private ResultSet rs = null;

    // 连接数据库的参数
    protected String url = "";
    protected String username = "";
    protected String driver = "";
    protected String passwd = "";

    private CallableStatement cs = null;
    protected DruidDataSource dataSource = new DruidDataSource();

    public CallableStatement getCs() {
        return cs;
    }

    // 得到连接
    public void getConnection() {
        try {
            ct = dataSource.getConnection();
            ct.setAutoCommit(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void closeConnection(){
        try {
            ct.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public void BeginTran(){
        try {
            ct = dataSource.getConnection();
            ct.setAutoCommit(false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void CommitTran() throws SQLException{
        ct.commit();
        ct.close();
    }
    
    public void RollBackTran(){
        try {
            ct.rollback();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                ct.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public List<Map> executeQuery(String sql, String[] parameters) {
        List<Map> list = new ArrayList<Map>();
        try {
            ps = ct.prepareStatement(sql);
            if (parameters != null) {
                for (int i = 0; i < parameters.length; i++) {
                    ps.setString(i + 1, parameters[i]);
                }
            }
            rs = ps.executeQuery();

            List<Map> heads = new ArrayList<Map>();
            ResultSetMetaData rsmd = rs.getMetaData();// rs为查询结果集
            int count = rsmd.getColumnCount();
            for (int i = 1; i <= count; i++) {
                Map meta = new HashMap();
                meta.put("colName", rsmd.getColumnName(i));
                meta.put("dataType", rsmd.getColumnTypeName(i));
                heads.add(meta);// 把列名存入向量heads中
            }

            while (rs.next()) {
                Map map = new HashMap();
                for (Map col : heads) {
                    switch (col.get("dataType").toString()) {
                    case "VARCHAR":
                        map.put(col.get("colName").toString().toLowerCase(),
                                rs.getString(col.get("colName").toString()));
                        break;
                    case "BIGINT":
                        map.put(col.get("colName").toString().toLowerCase(), rs.getInt(col.get("colName").toString()));
                        break;
                    case "SMALLINT":
                        map.put(col.get("colName").toString().toLowerCase(), rs.getInt(col.get("colName").toString()));
                        break;
                    case "INTEGER":
                        map.put(col.get("colName").toString().toLowerCase(), rs.getInt(col.get("colName").toString()));
                        break;
                    case "BIGDECIMAL":
                        map.put(col.get("colName").toString().toLowerCase(),
                                rs.getBigDecimal(col.get("colName").toString()));
                        break;
                    case "DECIMAL":
                        map.put(col.get("colName").toString().toLowerCase(),
                                rs.getBigDecimal(col.get("colName").toString()));
                        break;
                    case "DATE":
                        map.put(col.get("colName").toString().toLowerCase(),
                                rs.getString(col.get("colName").toString()));
                        break;
                    case "DATETIME":
                        map.put(col.get("colName").toString().toLowerCase(),
                                rs.getString(col.get("colName").toString()));
                        break;
                    default:
                        break;
                    }
                }
                list.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally {
            close(rs, ps);
        }
        return list;
    }

    // 先写一个update、delete、insert
    // sql格式:update 表名 set 字段名 =?where 字段=?
    // parameter神应该是(”abc“,23)
    public void executeUpdate(String sql, String[] parameters) {
        try {
            ps = ct.prepareStatement(sql);
            if (parameters != null) {
                for (int i = 0; i < parameters.length; i++) {
                    ps.setString(i + 1, parameters[i]);
                }

            }
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();// 开发阶段
            // 抛出异常
            // 可以处理,也可以不处理
            throw new RuntimeException(e.getMessage());
        } finally {
            close(rs, ps);
        }
    }

    public void close(ResultSet rs, Statement ps) {
        // 关闭资源(先开后关)
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ps = null;
        }
    }
}

LocalHelper:

package com.smt.db;

import java.io.IOException;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class LocalHelper extends JdbcUtils {
    
    private static Properties  pp = null;
    private InputStream fis = null;
    
    public LocalHelper(){
        super();
        pp = new Properties();
        fis=OggHelper.class.getClassLoader().getResourceAsStream("local.properties");
        //fis = new FileInputStream();
        try {
            pp.load(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        url = pp.getProperty("dbUrl");
        driver = pp.getProperty("dbDriver");
        username = pp.getProperty("dbUserName");
        passwd = pp.getProperty("dbPassword");
        
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(passwd);
    }
}

local.properties:

#application configs
#jdbc c3p0 config
dbDriver=com.mysql.jdbc.Driver
dbUrl = jdbc:mysql://localhost:3306/shbi?characterEncoding=utf8
dbUserName = root
dbPassword = root
原文地址:https://www.cnblogs.com/wpcnblog/p/8668879.html