JDBC工具类 不多解释了 注释写的挺全的
package com.sdu.utils; import java.io.UnsupportedEncodingException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * @类功能说明:JDBC工具类 * @公司名称:jinhou * @作者:WeiYC * @创建时间:2015-1-26 上午10:41:52 */ public class JDBCUtility { private Connection conn; private Statement st; private PreparedStatement pps; private ResultSet rs; public String url = DBPropertiesUtility.getUrl(); private String user = DBPropertiesUtility.getUser(); private String password = DBPropertiesUtility.getPwd(); private static String driver1 = "oracle.jdbc.driver.OracleDriver"; private static String driver2 = "com.mysql.jdbc.Driver"; // 加载驱动、放在静态代码块中,保证驱动在整个项目中只加载一次,提高效率 static { try { // String driver = DBPropertiesUtility.getDriver(); Class.forName(driver1); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 获取连接的方法 * * @return Connection 一个有效的数据库连接 */ public Connection getConnection() { try { // 注意链接时,要换成自己的数据库名,数据库用户名及密码 Connection con = DriverManager.getConnection(url, user, password); return con; } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 用于执行更新的方法,包括(insert delete update)操作 * * @param sql * String 类型的SQL语句 * @return Integer 表示受影响的行数 */ public int update(String sql) { // 定义变量用来判断更新操作是否成功,如果返回-1说明没有影响到更新操作的数据库记录条数,即更新操作失败 int row = -1; try { // 如果数据库链接被关闭了,就要既得一个新的链接 if (conn == null || conn.isClosed()) { conn = getConnection(); } // 使用Connection对象conn的createStatement()创建Statement(数据库语句对象)st st = conn.createStatement(); // 执行更新操作,返回影响的记录条数row row = st.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return row; } /** * 基于PreparedStatement的修改方法 PreparedStatement:表示预编译的 SQL 语句的对象 * * @param sql * String 类型的SQL语句(insert delete update) * @param obj * 存放动态参数的数组 * @return Integer 表示受影响的行数 */ public int update(String sql, Object... obj) { try { // 获取链接 if (conn == null || conn.isClosed()) { conn = getConnection(); } // 创建预编译的 SQL 语句对象 pps = conn.prepareStatement(sql); // 定义变量length代表数组长度,也就是预处理的sql语句中的参数个数 int length = 0; // ParameterMetaData:用于获取关于 PreparedStatement 对象中每个参数的类型和属性信息的对象 ParameterMetaData pmd = pps.getParameterMetaData(); length = pmd.getParameterCount(); // 循环将sql语句中的?设置为obj数组中对应的值,注意从1开始,所以i要加1 for (int i = 0; i < length; i++) { pps.setObject(i + 1, obj[i]); } // 执行更新操作 return pps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return -1; } /** * 获取一条记录的方法,要依赖于下面的queryToList方法,注意泛型的使用 * * @param sql * @return Map<String,Object> */ public Map<String, Object> getOneRow(String sql) { // 执行下面的queryToList方法 List<Map<String, Object>> list = queryToList(sql); // 三目运算,查询结果list不为空返回list中第一个对象,否则返回null return list.size() > 0 ? list.get(0) : null; } /** * 返回查询结果列表,形如:[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, * TEST_NO=3, TEST_PWD=bbb}...] * * @param sql * @return List<Map<String,Object>> */ public List<Map<String, Object>> queryToList(String sql) { // 创建集合列表用以保存所有查询到的记录 List<Map<String, Object>> list = new LinkedList<Map<String, Object>>(); try { if (conn == null || conn.isClosed()) { conn = getConnection(); } st = conn.createStatement(); rs = st.executeQuery(sql); // ResultSetMetaData 是结果集元数据,可获取关于 ResultSet 对象中列的类型和属性信息的对象 // 例如:结果集中共包括多少列,每列的名称和类型等信息 ResultSetMetaData rsmd = rs.getMetaData(); // 获取结果集中的列数 int columncount = rsmd.getColumnCount(); // while条件成立表明结果集中存在数据 while (rs.next()) { // 创建一个HashMap用于存储一条数据 HashMap<String, Object> onerow = new HashMap<String, Object>(); // 循环获取结果集中的列名及列名所对应的值,每次循环都得到一个对象,形如:{TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa} for (int i = 0; i < columncount; i++) { // 获取指定列的名称,注意orcle中列名的大小写 String columnName = rsmd.getColumnName(i + 1); //进行编码设置 int type = rsmd.getColumnType(i+1); if(type==Types.CHAR||type==Types.VARCHAR||type==Types.LONGVARCHAR){ if(!CommonUtility.isEmpty(rs.getString(i+1))){ String value=""; try { value = new String(rs.getString(i+1).getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } onerow.put(columnName, value); System.out.println("列名:"+columnName+" 值:"+value); } }else{ onerow.put(columnName, rs.getObject(i + 1)); System.out.println("列名:"+columnName+" 值:"+rs.getObject(i + 1)); } } // 将获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa}放到集合列表中 list.add(onerow); } } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return list; } /** * 返回查询结果列表,使用的是预编绎SQL 语句对象PreparedStatement 形如:[{TEST_NAME=aaa, TEST_NO=2, * TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}] * * @param sql * @param paramValues * @return List<Map<String,Object>> */ public List<Map<String, Object>> queryWithParam(String sql, Object... paramValues) { // 创建集合列表用以保存所有查询到的记录 List<Map<String, Object>> list = new LinkedList<Map<String, Object>>(); try { if (conn == null || conn.isClosed()) { conn = getConnection(); } pps = conn.prepareStatement(sql); for (int i = 0; i < paramValues.length; i++) { pps.setObject(i + 1, paramValues[i]); } rs = pps.executeQuery(); // ResultSetMetaData 是结果集元数据,可获取关于 ResultSet 对象中列的类型和属性信息的对象 // 例如:结果集中共包括多少列,每列的名称和类型等信息 ResultSetMetaData rsmd = rs.getMetaData(); // 获取结果集中的列数 int columncount = rsmd.getColumnCount(); // while条件成立表明结果集中存在数据 while (rs.next()) { // 创建一个HashMap用于存储一条数据 HashMap<String, Object> onerow = new HashMap<String, Object>(); // 循环获取结果集中的列名及列名所对应的值,每次循环都得到一个对象,形如:{TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa} for (int i = 0; i < columncount; i++) { // 获取指定列的名称,注意orcle中列名的大小写 String columnName = rsmd.getColumnName(i + 1); //进行编码设置 int type = rsmd.getColumnType(i+1); if(type==Types.CHAR||type==Types.VARCHAR||type==Types.LONGVARCHAR){ if(!CommonUtility.isEmpty(rs.getString(i+1))){ String value=""; try { value = new String(rs.getString(i+1).getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } onerow.put(columnName, value); } }else{ onerow.put(columnName, rs.getObject(i + 1)); } } // 将获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa}放到集合列表中 list.add(onerow); } } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return list; } /** * 关闭数据库各种资源Connection Statement PreparedStatement ResultSet的方法 */ private void close() { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pps != null) { try { pps.close(); } catch (SQLException e) { e.printStackTrace(); } } try { if (conn != null && !conn.isClosed()) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } } public static void main(String args[]){ JDBCUtility db = new JDBCUtility(); Map<String,Object> map = db.getOneRow("select * from HIS_BASE_DEPARTMENT"); System.out.println(map.get("DESCN")); } }
配置文件获取类
package com.sdu.utils; import java.io.IOException; import java.util.Properties; import com.sdu.utils.mail.PropertiesUtil; /** * @类功能说明:静态读取数据库配置文件 * @作者:WeiYC * @创建时间:2015-1-26 上午11:31:14 */ public class DBPropertiesUtility { private static Properties pros = new Properties(); private static String CONFIG_FILE = "res/jdbc.properties"; //配置文件路径 /** * 静态执行一段代码,将配置文件读入到内存中 */ static{ try { pros.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(CONFIG_FILE)); } catch (IOException e) { e.printStackTrace(); } } public static String getDriver(){ return pros.getProperty("oracle.driver"); } public static String getUrl(){ return pros.getProperty("oracle.url"); } public static String getUser(){ return pros.getProperty("oracle.user"); } public static String getPwd(){ return pros.getProperty("oracle.password"); } public static void main(String args[]){ System.out.println(DBPropertiesUtility.getDriver()); } }
配置文件
#oracle数据库参数 oracle.driver=oracle.jdbc.driver.OracleDriver oracle.url=jdbc:oracle:thin:@192.168.1.120:1521:db oracle.user=dbuser oracle.password=123456 #mysql数据库参数 mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://192.168.1.120:3306/db mysql.username=root mysql.password=123456 mysql.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
项目目录结构