数据库通用类
/**
*
*/
package com.hotel.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hotel.constant.Constants;
/**
* 数据库连接通用类
* 连接数据库的步骤:
* 1. 导入驱动包
* 2. 加载驱动
* 3. 通过驱动管理器类获取数据库连接
* 4. 通过连接对象创建预编译对象
* 5. 通过编译对象执行SQL指令并处理返回结果
* 6. 关闭相关操作对象
*
*/
public class DBUtil {
/**
* 定义获取连接对象的方法
*
*/
private static Connection getConn() {
// 定义连接对象句柄
Connection conn = null;
try {
// 加载驱动
Class.forName(Constants.DRIVER_NAME);
// 通过驱动管理器类获取数据库连接
conn = DriverManager.getConnection(Constants.URL, Constants.USERNAME, Constants.PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 定义执行简单SQL的增,删,改指令
* @param sql 调用传入的SQL指令
* @param objects 执行SQL指令需要的参数
* @return int 返回方法操作后受影响的行数
*/
public static int executeMyUpdate(String sql,Object... objects) {
// 定义接受受影响行数的变量
int row = 0;
// 定义连接对象句柄
Connection conn = null;
// 定义编译对象句柄
PreparedStatement pst = null;
// 通过调用本类中的获取连接对象
conn = getConn();
try {
// 通过连接对象创建编译对象
pst = conn.prepareStatement(sql);
// 设置SQL命令所需的参数
if(objects != null) {
for(int i =0 ;i
pst.setObject(i+1, objects[i]);
}
}
// 执行SQL指令并处理返回结果
row = pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeObjects(pst,conn);
}
// 返回受影响行数
return row;
}
/**
* 定义执行简单查询语句的通用方法
* @param sql 调用传入查询的SQL指令
* @param objects 查询所需参数
* @return List> 返回查询构建集合对象
*/
public static List> executeQuery(String sql,Object...objects) {
// 定义表集合对象
List> table = new ArrayList>();
// 定义连接对象句柄
Connection conn = null;
// 定义编译对象句柄
PreparedStatement pst = null;
// 定义结果集句柄
ResultSet rs = null;
// 通过调用本类中的获取连接对象
conn = getConn();
try {
// 通过连接对象创建预编译对象
pst = conn.prepareStatement(sql);
// 为查询编译对象设置参数
if(objects != null) {
for(int i=0;i
pst.setObject(i+1, objects[i]);
}
}
// 通过编译对象执行SQL命令
rs = pst.executeQuery();
// 判断结果是否为空
if(rs != null) {
// 把得到结果集转化为一张虚拟表
ResultSetMetaData rsd = rs.getMetaData();
// 得到查询表有多少个字段(列)
int count = rsd.getColumnCount();
// 得到当前遍历的行Map(key,value)
while(rs.next()) {
// 定义存储行的Map集合对象
Map row = new HashMap();
// 循环列
/* userId(key) userName userPass userRemark
----------- -------------------- ------------------------------
10002 (value) normal 123 normal */
/*
* rsd.getColumnName(i+1) 得到当前遍历行对应列的名称
*/
for(int i=0;i
row.put(rsd.getColumnName(i+1), rs.getObject(rsd.getColumnName(i+1)));
}
// 把每次遍历的行存储到表集合中
table.add(row);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeObjects(rs,pst,conn);
}
return table;
}
/**
* 释放操作对象的方法
* @param objects 需要释放对象的列表
*/
private static void closeObjects(Object...objects) {
if(objects != null) {
for(Object param : objects) {
try {
if(param instanceof ResultSet) {
((ResultSet)param).close();
}
if(param instanceof PreparedStatement) {
((PreparedStatement)param).close();
}
if(param instanceof Connection) {
Connection conn = ((Connection)param);
if(!conn.isClosed()) {
conn.close();
conn = null;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}/**
*
*/
package com.hotel.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hotel.constant.Constants;
/**
* 数据库连接通用类
* 连接数据库的步骤:
* 1. 导入驱动包
* 2. 加载驱动
* 3. 通过驱动管理器类获取数据库连接
* 4. 通过连接对象创建预编译对象
* 5. 通过编译对象执行SQL指令并处理返回结果
* 6. 关闭相关操作对象
*
*/
public class DBUtil {
/**
* 定义获取连接对象的方法
*
*/
private static Connection getConn() {
// 定义连接对象句柄
Connection conn = null;
try {
// 加载驱动
Class.forName(Constants.DRIVER_NAME);
// 通过驱动管理器类获取数据库连接
conn = DriverManager.getConnection(Constants.URL, Constants.USERNAME, Constants.PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 定义执行简单SQL的增,删,改指令
* @param sql 调用传入的SQL指令
* @param objects 执行SQL指令需要的参数
* @return int 返回方法操作后受影响的行数
*/
public static int executeMyUpdate(String sql,Object... objects) {
// 定义接受受影响行数的变量
int row = 0;
// 定义连接对象句柄
Connection conn = null;
// 定义编译对象句柄
PreparedStatement pst = null;
// 通过调用本类中的获取连接对象
conn = getConn();
try {
// 通过连接对象创建编译对象
pst = conn.prepareStatement(sql);
// 设置SQL命令所需的参数
if(objects != null) {
for(int i =0 ;i
pst.setObject(i+1, objects[i]);
}
}
// 执行SQL指令并处理返回结果
row = pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeObjects(pst,conn);
}
// 返回受影响行数
return row;
}
/**
* 定义执行简单查询语句的通用方法
* @param sql 调用传入查询的SQL指令
* @param objects 查询所需参数
* @return List> 返回查询构建集合对象
*/
public static List> executeQuery(String sql,Object...objects) {
// 定义表集合对象
List> table = new ArrayList>();
// 定义连接对象句柄
Connection conn = null;
// 定义编译对象句柄
PreparedStatement pst = null;
// 定义结果集句柄
ResultSet rs = null;
// 通过调用本类中的获取连接对象
conn = getConn();
try {
// 通过连接对象创建预编译对象
pst = conn.prepareStatement(sql);
// 为查询编译对象设置参数
if(objects != null) {
for(int i=0;i
pst.setObject(i+1, objects[i]);
}
}
// 通过编译对象执行SQL命令
rs = pst.executeQuery();
// 判断结果是否为空
if(rs != null) {
// 把得到结果集转化为一张虚拟表
ResultSetMetaData rsd = rs.getMetaData();
// 得到查询表有多少个字段(列)
int count = rsd.getColumnCount();
// 得到当前遍历的行Map(key,value)
while(rs.next()) {
// 定义存储行的Map集合对象
Map row = new HashMap();
// 循环列
/* userId(key) userName userPass userRemark
----------- -------------------- ------------------------------
10002 (value) normal 123 normal */
/*
* rsd.getColumnName(i+1) 得到当前遍历行对应列的名称
*/
for(int i=0;i
row.put(rsd.getColumnName(i+1), rs.getObject(rsd.getColumnName(i+1)));
}
// 把每次遍历的行存储到表集合中
table.add(row);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeObjects(rs,pst,conn);
}
return table;
}
/**
* 释放操作对象的方法
* @param objects 需要释放对象的列表
*/
private static void closeObjects(Object...objects) {
if(objects != null) {
for(Object param : objects) {
try {
if(param instanceof ResultSet) {
((ResultSet)param).close();
}
if(param instanceof PreparedStatement) {
((PreparedStatement)param).close();
}
if(param instanceof Connection) {
Connection conn = ((Connection)param);
if(!conn.isClosed()) {
conn.close();
conn = null;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
©著作权归作者所有:来自51CTO博客作者lhm_java的原创作品,如需转载,请注明出处,否则将追究法律责任