这是目录结构:
其中后面三个类都是第一个类的子类,第一个类是父类。
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