Java操作jdbc工具类

来源:互联网 发布:人工智能三年行动计划 编辑:程序博客网 时间:2024/06/05 02:47
package com.cuihs.esb.db;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;/** * JDBC常用的一些操作 *  * @author ZHAO * @date 2015年10月11日 */public class JDBCUtils {/** * 初始值不赋,免得写死了 */private static String driver_class;private static String url;private static String username;private static String password;/** * 因为只需要加载一次,所以使用静态代码块, 在类加载时就执行,把属性文件里面的值赋给属性 */static {Properties pro = new Properties();try {pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));driver_class = pro.getProperty("jdbc.driver_class");url = pro.getProperty("jdbc.url");username = pro.getProperty("jdbc.username");password = pro.getProperty("jdbc.password");} catch (IOException e) {e.printStackTrace();}}/** * JDBC获取连接操作 *  * @return Connection对象 */public static Connection getConnection() {Connection conn = null;try {// 加载驱动Class.forName(driver_class);conn = DriverManager.getConnection(url, username, password);} catch (Exception e) {e.printStackTrace();}return conn;}/** * JDBC查询操作 */public static List<Map<String, Object>> executeQuery(String sql,Object... parameters) {List<Map<String, Object>> table = new ArrayList<Map<String, Object>>();ResultSet result = null;Connection conn = null;PreparedStatement pst = null;int len = parameters.length;try {conn = getConnection();pst = conn.prepareStatement(sql);// 设置参数if (parameters != null && len > 0) {for (int i = 0; i < len; i++) {pst.setObject(i + 1, parameters[i]);}}// 执行SQL指令并处理结果result = pst.executeQuery();if (result != null) {// 把查询到的结集转换成一张虚拟的表java.sql.ResultSetMetaData rsd = result.getMetaData();// 获得列数int columnCounts = rsd.getColumnCount();while (result.next()) {// 定义一个Map集合来存储每一行的数据Map<String, Object> row = new HashMap<String, Object>();// 遍历列赋值for (int i = 1; i <= columnCounts; i++) {row.put(rsd.getColumnName(i),result.getObject(rsd.getColumnName(i)));}// 把每次得到的Map集合添加到table中table.add(row);}}} catch (Exception e) {e.printStackTrace();} finally {closeObject(result, pst, conn);}return table;}/** * JDBC增、删、改操作 *  * @param sql *            用来接收调用处传入的SQL指令 * @param parameters *            接收调用处传入的与SQL指令一一对应的占位符 */public static int executeEdit(String sql, Object... parameters) {int row = 0;int len = parameters.length;Connection conn = getConnection();PreparedStatement pst = null;try {pst = conn.prepareStatement(sql);// 设置参数if (parameters != null && len > 0) {for (int i = 0; i < len; i++) {pst.setObject(i + 1, parameters[i]);}}row = pst.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {closeObject(pst, conn);}return row;}/** * JDBC关闭对象,释放资源 */public static void closeObject(Object... objects) {if (objects != null) {for (Object obj : objects) {try {if (obj instanceof PreparedStatement) {((PreparedStatement) obj).close();}if (obj instanceof ResultSet) {((ResultSet) obj).close();}if (obj instanceof Connection) {Connection conn = (Connection) obj;if(!conn.isClosed()) {conn.close();conn = null;}}} catch (Exception e) {e.printStackTrace();}}}}}

原创粉丝点击