java数据库通用类_数据库通用类

数据库通用类

/**

*

*/

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的原创作品,如需转载,请注明出处,否则将追究法律责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值