




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
package com.hospital.dao.tools; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import org.apache.log4j.Logger; /* * 数据库操作管理类 * * author Harlyhood * */public class DBManager / - Instance private static Logger logger = Logger.getLogger(DBManager.class); / - Methods / 数据库连接对象 private Connection con; / SQL语句对象 private Statement stmt; / 带参数的Sql语句对象 private PreparedStatement pstmt; / 记录集对象 private ResultSet rs; / 数据连接管理(连接池对象) private DBConnectionManager dcm = null; /* *手动设置的连接参数* */ SuppressWarnings(unused) private static String _DRIVER = com.microsoft.sqlserver.jdbc.SQLServerDriver; SuppressWarnings(unused) private static String _URL = jdbc:sqlserver:/localhost:1433;database=Hospital_AI_DB;characterEncoding=gb2312; SuppressWarnings(unused) private static String _USER_NA = sa; SuppressWarnings(unused) private static String _PASSWORD = ; /* * */ / 默认构造 public DBManager() /* * */ /* * * 数据库连接初始化 * * */ /* * */ /* * 得到一个默认的数据库连接从 perties文件初始化 * * throws Exception */ private void getConnection() (#open:从默认的配置文件得到一个数据库连接); / 获取一个连接tb池管理类的实例 dcm = DBConnectionManager.getInstance(); / 得到一个数据库连接 con = dcm.getConnection(mysql); try con.setAutoCommit(false); catch (SQLException e) e.printStackTrace(); /* * 从指定参数得到一个连接对象 * * param driver * param url * param user_na * param password * throws Exception */ public void getConnection(String driver, String url, String user_na, String password) throws Exception try (#open:从指定配置中得到一个数据库连接); Class.forName(driver); con = DriverManager.getConnection(url, user_na, password); catch (ClassNotFoundException ex) logger .info(#Errorcom.hospital.dao.tools.DBManagerMethod:getConnectionLine:81找不到类驱动类: + driver); throw ex; catch (SQLException ex) logger .info(#Errorcom.hospital.dao.tools.DBManagerMethod:getConnectionLine:81加载类: + driver + 时出现 SQLException 异常); throw ex; /* * */ /* * * 数据库操作方法 * * */ /* * */ /* * 执行SQL语句操作(更新数据 无参数) * * param strSql * SQL语句 * throws Exception */ public boolean executeUpdate(String strSql) throws SQLException getConnection(); / getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD); boolean flag = false; stmt = con.createStatement(); (#:执行SQL语句操作(更新数据 无参数): + strSql); try if (0 stmt.executeUpdate(strSql) close_DB_Object(); flag = true; mit(); catch (SQLException ex) logger .info(#Error DBManager Line126:执行SQL语句操作(更新数据 无参数): + strSql + 失败!); flag = false; con.rollback(); throw ex; return flag; /* * 执行SQL语句操作(更新数据 有参数) * * param strSql * sql指令 * param prams * 参数列表 * return * throws SQLException */ public boolean executeUpdate(String strSql, HashMap prams) throws SQLException, ClassNotFoundException getConnection(); / getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD); boolean flag = false; try pstmt = con.prepareStatement(strSql); setParamet(pstmt, prams); (#:执行SQL语句操作(更新数据 有参数): + strSql); if (0 pstmt.executeUpdate() close_DB_Object(); flag = true; mit(); catch (SQLException ex) logger .info(#Error DBManager Line121:执行SQL语句操作(更新数据 无参数): + strSql + 失败!); flag = false; con.rollback(); throw ex; catch (ClassNotFoundException ex) logger .info(#Error DBManager Line152:执行SQL语句操作(更新数据 无参数): + strSql + 失败! 参数设置类型错误!); con.rollback(); throw ex; return flag; /* * 执行SQL语句操作(查询数据 无参数) * * param strSql * SQL语句 * return 数组对象列表 * throws Exception */ public ArrayListHashMap executeSql(String strSql) throws Exception getConnection(); / getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD); stmt = con.createStatement(); (#:执行SQL语句操作(查询数据): + strSql); rs = stmt.executeQuery(strSql); mit(); if (null != rs) return convertResultSetToArrayList(rs); close_DB_Object(); return null; /* * 执行SQL语句操作(查询数据 有参数) * * param strSql * SQL语句 * param prams * 参数列表 * return 数组对象列表 * throws Exception */ public ArrayListHashMap executeSql(String strSql, HashMap prams) throws Exception getConnection(); / getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD); pstmt = con.prepareStatement(strSql); setParamet(pstmt, prams); (#:执行SQL语句操作(查询数据): + strSql); rs = pstmt.executeQuery(); mit(); if (null != rs) return convertResultSetToArrayList(rs); return null; /* * 执行存储过程(查询数据 无参数) * * param procName * 存储过程名称 * return 数组列表对象 * throws Exception */ public ArrayListHashMap executeProcedureQuery( String procName) throws Exception getConnection();/ 获取连接 String callStr = call + procName + ;/ 构造执行存储过程的sql指令 CallableStatement cs = con.prepareCall(callStr); (#:执行存储过程(查询数据): + procName); rs = cs.executeQuery(); mit(); cs.close(); close_DB_Object(); return convertResultSetToArrayList(rs); /* * 执行存储过程(查询数据,带参数)返回结果集合 * * param procName * 存储过程名称 * param parameters * 参数对象数组 * param al * 数组列表对象 * return 数组列表对象 * throws Exception */ public ArrayListHashMap executeProcedureQuery( String procName, Object parameters) throws Exception int parameterPoint = 0; / 获取存储过程信息列表集合 ArrayListHashMap procedureInfo = getProcedureInfo(procName); / 获取存储过程的完全名称 String procedureCallName = getProcedureCallName(procName,parameters.length); / 获取连接对象 getConnection(); / 初始化 存储过程 执行对象 CallableStatement cs = con.prepareCall(procedureCallName); / 参数下标变量 int index = 0; / 获取 存储过程信息列表集合的 迭代器 对象 IteratorHashMap iter = procedureInfo.iterator(); / 遍历存储过程信息列表集合 while (iter.hasNext() HashMap hm = iter.next(); parameterPoint+; / 如果参数是输入参数 way = 0 if (hm.get(WAY).equals(0) / 设置参数到cs cs.setObject(parameterPoint, parametersindex); / 参数下标+1 index+; / 释放这个对象,做为第二次使用 procedureInfo = null; (#:执行存储过程(查询数据): + procedureCallName); rs = cs.executeQuery(); mit(); procedureInfo = convertResultSetToArrayList(rs); cs.close(); close_DB_Object(); return procedureInfo; /* * 执行存储过程(更新,查询数据简单查询、非纪录集,返回输出参数非纪录集) * * param procName * 存储过程名称 * param parameters * 参数对象数组 * param os * 输出参数对象数组 * return 输出参数对象数组 * throws Exception */ public Object executeProcedureUpdate(String procName, Object parameters) throws Exception (-); ( Run - executeProcedureUpdate # 正在执行 存储过程: + procName + #); CallableStatement cs = null; Object returnVal = null; try / 获取 存储过程 调用全名 String fullPCallName = getProcedureCallName(procName,parameters.length); ( Run - executeProcedureUpdate # 存储过程命令: + fullPCallName + #); /获取存储过程参数信息 ArrayListHashMap p_Call_Info_List = getProcedureInfo(procName); /获取连接 getConnection(); /创建 存储过程 执行对象 cs = con.prepareCall(fullPCallName); /数组下标 int index = 1; /输出参数下标 纪录 ArrayList outPutIndexList = new ArrayList(); ( Run - executeProcedureUpdate # 参数个数是: + parameters.length + #); for(HashMap tempHash:p_Call_Info_List) if(0.equals(tempHash.get(WAY) /设置输入参数 cs.setObject(index, parametersindex-1); ( Run - executeProcedureUpdate # 输入 Input: 编号: + index + 值: +parametersindex-1+ 类型: +parametersindex-1.getClass()+ #); else /注册输出参数 cs.registerOutParameter(index, getDataType(tempHash.get(TYPENAME).toString(); /纪录输出参数的下标 outPutIndexList.add(index); ( Run - executeProcedureUpdate # 输出 OutPut: 编号: + index + 值: +parametersindex-1+ 类型: +parametersindex-1.getClass()+ #); index+; ( Run - executeProcedureUpdate # 参数设置完毕,正在执行中 : #); /- 执行 - if(!cs.execute() returnVal = new ObjectoutPutIndexList.size(); ( Run - executeProcedureUpdate # 执行成功! : #); /取输 出参数的 返回值 for(int i = 0 ;i executeProcedureUpdate # 返回值 +(i+1)+ +returnVali+ #); mit();/提交 catch (Exception e) ( Run - executeProcedureUpdate # 执行失败!事务回滚中 : #); con.rollback(); throw e; (-); return returnVal; /* * */ /* * * 小工具 * * */ /* * */ /* * 关闭数据对象 */ public void close_DB_Object() (#close:关闭连接对象,语句对象,记录集对象); if (null != rs) try rs.close(); catch (SQLException ex) rs = null; if (null != stmt) try stmt.close(); catch (SQLException ex) stmt = null; if (null != pstmt) try pstmt.close(); catch (SQLException ex) pstmt = null; if (con != null) dcm.freeConnection(mysql, con); /* * 设置Sql 指令参数 * * param p_stmt * PreparedStatement * param pramets * HashMap */ private PreparedStatement setParamet(PreparedStatement p_stmt, HashMap pramets) throws ClassNotFoundException, SQLException / 如果参数为空 if (null != pramets) / 如果参数个数为0 if (0 = pramets.size() for (int i = 1; i = pramets.size(); i+) try / 字符类型 String if (pramets.get(i).getClass() = Class .forName(java.lang.String) p_stmt.setString(i, pramets.get(i).toString(); / 日期类型 Date if (pramets.get(i).getClass() = Class .forName(java.sql.Date) p_stmt.setDate(i, java.sql.Date.valueOf(pramets .get(i).toString(); / 布尔类型 Boolean if (pramets.get(i).getClass() = Class .forName(java.lang.Boolean) p_stmt.setBoolean(i, (Boolean) (pramets.get(i); / 整型 int if (pramets.get(i).getClass() = Class .forName(java.lang.Integer) p_stmt.setInt(i, (Integer) pramets.get(i); / 浮点 float if (pramets.get(i).getClass() = Class .forName(java.lang.Float) p_stmt.setFloat(i, (Float) pramets.get(i); / 双精度型 double if (pramets.get(i).getClass() = Class .forName(java.lang.Double) p_stmt.setDouble(i, (Double) pramets.get(i); catch (ClassNotFoundException ex) throw ex; catch (SQLException ex) throw ex; return p_stmt; /* * 转换记录集对象为数组列表对象 * * param rs * 纪录集合对象 * return 数组列表对象 * throws Exception */ private ArrayListHashMap convertResultSetToArrayList( ResultSet rs) throws Exception (#:转换记录集对象为数组列表对象); / 获取rs 集合信息对象 ResultSetMetaData rsmd = rs.getMetaData(); / 创建数组列表集合对象 ArrayListHashMap tempList = new ArrayListHashMap(); HashMap tempHash = null; / 填充数组列表集合 while (rs.next() / 创建键值对集合对象 tempHash = new HashMap(); for (int i = 0; i rsmd.getColumnCount(); i+) / 遍历每列数据,以键值形式存在对象tempHash中 tempHash.put(rsmd.getColumnName(i + 1).toUpperCase(), rs .getString(rsmd.getColumnName(i + 1); / 第一个键值对,存储在tempList列表集合对象中 tempList.add(tempHash); close_DB_Object();/ 关闭相关链接 return tempList;/ 返回填充完毕的数组列表集合对象 /* * 从数据库得到tb存储过程信息 * * param procName * 存储过程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年秋季初级经济师考试 经济基础知识深度解析试卷
- 2025年春季汽车修理工考试 汽车车身维修技术操作模拟试卷
- 2025年经济师职业资格考试 金融市场与金融工具模拟试卷
- 2025年公共营养师二级考试实战演练试卷及解析
- 2025年高考生物选择题冲刺押题试卷
- 易地搬迁工作情况汇报
- 2026届重庆市酉阳县化学高一上期中调研模拟试题含解析
- 现代兽医工作概述
- 测绘评职称工作总结
- 玩具培训知识内容大全课件
- 主体结构劳务分包工程(八标段)施工组织设计
- 一年级小学生行为规范培养指南
- 广州交通辅警试题及答案
- 医院后勤考试试题及答案
- 艾梅乙母婴传播防治培训
- 非标设备项目管理制度
- 2025年临床执业医师考试的院前急救知识试题及答案
- 游戏攻略短视频行业跨境出海战略研究报告
- 高考志愿规划创业
- 2025年度医院医德医风考评表格
- 世界给予我的 课件-2024-2025学年高二下学期开学第一课主题班会
评论
0/150
提交评论