打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
BaseDao
package com.rongle.dao.base;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.rongle.controller.rpc.AdminController;
import com.rongle.utils.DBUtils;
import com.rongle.utils.EntityUtils;


/**
 * 封装JDBC查询、更改操作,所有DAO的基类
 * @author jiansx
 * @date 2015-7-9
 */
public abstract class BaseDAO<E> implements OracleSQL {
Logger l=Logger.getLogger(BaseDAO.class);
// 将结果集封装成bean对象
protected List<E> queryEntity(String querySQL, Object[] params)
throws Exception {
Connection con = null;
try {
// 获取连接
con = DBUtils.getConnection();

// 调用query1执行查询,返回结果集
ResultSet rs = query1(con, querySQL, params);

// 遍历结果集的数据,封装成实体对象返回
List<E> list = new ArrayList<E>();
while (rs.next()) {
list.add(toEntity(rs));
}

return list;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}

/**
* 将结果集封装成非bean对象
* @param querySQL
* @param params
* @return
*/
protected List query(String querySQL, Object[] params) throws Exception {
Connection con = null;
try {
// 获取连接
con = DBUtils.getConnection();

// 调用query1执行查询,返回结果集
ResultSet rs = query1(con, querySQL, params);

// 遍历结果集的数据,封装成普通对象返回

List list = new ArrayList();

ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();

if (count > 1) {
// 集合里放对象类型的数组
while (rs.next()) {
Object[] arr = new Object[count];
for (int i = 0; i < arr.length; i++) {
arr[i] = rs.getObject(i + 1);
}
list.add(arr);
}

} else {
// 集合里放单个对象
while (rs.next()) {
// ResultSet getXXX("列名") getXXX(列号)
list.add(rs.getObject(1));
}
}

return list;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}

/**
* 用指定的连接,执行查询,返回结果集
* @param con
* @param querySQL
* @param params
* @return
* @throws Exception
*/
private ResultSet query1(Connection con, String querySQL, Object[] params)
throws Exception {
// 根据参数querySQL创建PreparedStatement
PreparedStatement stmt = con.prepareStatement(querySQL);
// 根据params数组设置参数
if (params != null) {
for (int i = 0; i < params.length; i++) {
// JDBC来判断具体的参数类型
stmt.setObject(i + 1, params[i]);
// Oracle参数从1开始
}
}
l.info(EntityUtils.getPreparedSQL(querySQL, params));
return stmt.executeQuery();
}

/**
* 封装的所有的更改语句
* @param updateSQL
* @param params
* @throws Exception
*/
protected int updateSQL(String updateSQL,Object[] params)throws Exception{
int num = 0;
Connection conn = null;
try {
//获取连接
conn =  DBUtils.getConnection();
//设置自动提交为false
conn.setAutoCommit(false);
//根据updateSQL获取PreparedStatement对象
PreparedStatement psmt = conn.prepareStatement(updateSQL);
//根据params设置参数
if(params!=null){
for(int i=0;i<params.length;i++){
psmt.setObject(i+1, params[i]);
}
}
l.info(EntityUtils.getPreparedSQL(updateSQL, params));
num = psmt.executeUpdate();
//执行后提交事务
conn.commit();
} catch (SQLException e) {
conn.rollback();
e.printStackTrace();
throw e;
} finally{
if(conn!=null){
DBUtils.closeConnetion();
}
}
return num;
public abstract E toEntity(ResultSet rs)
throws Exception;

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
编写一个代码以显示这些详细信息。
java程序连接ORACLE 10g 数据库与操作
java连接Oracle数据库的工具类
JAVA基础:将数据库操作封装到Javabean
规范和封装jdbc程序代码
偷懒工具设计之sql2Excel
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服