您的位置:首页 > 编程语言 > Java开发

Java操作jdbc工具类

2017-12-19 11:39 423 查看
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();
}
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: