100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > oracle数据库的连接——封装工具类(代码)

oracle数据库的连接——封装工具类(代码)

时间:2020-05-26 00:40:11

相关推荐

oracle数据库的连接——封装工具类(代码)

为了连接oracle数据库的方便性,写了一个工具类,每次需要对数据库的操作时,只要调用该类,写好连接数据库的语句即可,这里是对整个需要访问数据库进行了封装。

package com.yc.api.jdbc.util;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import javax.sql.DataSource;import mons.dbcp2.BasicDataSourceFactory;import org.apache.logging.log4j.LogManager;public class DBHelper {private static DataSource dataSource;static {try {//Class.forName(DRIVER_CLASS_NAME); // 1.加载驱动Properties props = new Properties();props.load(DBHelper.class.getClassLoader().getResourceAsStream("db.properties"));//使用连接池技术, 数据源DBCPdataSource = BasicDataSourceFactory.createDataSource(props);LogManager.getLogger().debug("加载数据库属性元素构建数据源成功...");} catch (Exception e) {LogManager.getLogger().error("加载数据库属性元素构建数据源!!!", e);}}/*** 建立连接* * @return*/public static Connection getConn() {Connection con = null;try {// 2.建立与数据库的 连接//使用连接池技术, 数据源DBCPcon = dataSource.getConnection();LogManager.getLogger().debug("数据库连接成功...");} catch (Exception e) {LogManager.getLogger().error("数据库连接失败!!!", e);}return con;}/*** 关闭操作* * @param con* 数据库连接* @param st* sql执行工具* @param rs* 返回结果集*/public static void close(Connection con, Statement st, ResultSet rs) {if (rs != null) {try {rs.close();LogManager.getLogger().debug("关闭结果集完成...");} catch (SQLException e) {LogManager.getLogger().error("关闭结果集失败!!!", e);}}if (st != null) {try {st.close();LogManager.getLogger().debug("关闭执行工具完成...");} catch (SQLException e) {LogManager.getLogger().error("关闭执行工具失败!!!", e);}}if (con != null) {try {con.close();LogManager.getLogger().debug("关闭数据库连接完成...");} catch (SQLException e) {LogManager.getLogger().error("关闭数据库连接失败!!!", e);}}}/*** * @param sql* 要执行的sql语句 insert, update, delete)* @param params* 执行sql语句需要的参数* @return 执行sql语句受影响的行数*/public static int doUpdate(String sql, Object... params) {Connection con = null;PreparedStatement st = null;int result = 0;try {con = getConn();LogManager.getLogger().debug("要执行sql语句:" + sql);st = con.prepareStatement(sql);setParams(st, params); // 设置参数LogManager.getLogger().debug("sql执行工具创建成功...");} catch (SQLException e) {LogManager.getLogger().error("sql执行工具创建失败!!!", e);}try {result = st.executeUpdate(); // 执行sql , 针对insert, delete,// update, 返回结果是受影响行数LogManager.getLogger().debug("插入数据成功,插入数据的条数是::" + result);} catch (SQLException e) {LogManager.getLogger().error("插入数据失败!!!", e);}finally{// 5.关闭连接DBHelper.close(con, st, null);}return result;}/*** * @param sql 要执行的sql语句* @param objs 执行sql语句需要的参数* @return 取出数据库的数据,每一条记录是一个map : key是字段名或字段别名(小写字母), value应对字段的值*/public static List<Map<String, Object>> doQuery(String sql, Object...objs){Connection con = null;PreparedStatement st = null;ResultSet rs = null; List<Map<String, Object>> results = null;try {con = getConn();st = con.prepareStatement(sql); // 3.sql执行工具setParams(st, objs);LogManager.getLogger().debug("sql执行工具创建成功...");} catch (SQLException e) {LogManager.getLogger().error("sql执行工具创建失败!!!", e);}try {rs = st.executeQuery(); // 4.执行sql取到返回数据白结果集LogManager.getLogger().debug("执行sql取到返回数据成功...");} catch (SQLException e) {LogManager.getLogger().error("执行sql取到返回数据失败!!!", e);}try {ResultSetMetaData rsmd = rs.getMetaData(); // 元数据; 对象取取到的结果集数据的描述int cloumCount = rsmd.getColumnCount();results = new ArrayList<Map<String, Object>>();while (rs.next()) { // 判断结果集是否还有数据 (数据是一条记录的方式取出)Map<String, Object> record = new HashMap<String, Object>();for (int i = 1; i <= cloumCount; i++) {//rsmd.getColumnName(i) :表的字段名或字段别名//rs.getObject(i) : 取到字段对应的值record.put(rsmd.getColumnName(i).toLowerCase(), rs.getObject(i));}results.add(record);}LogManager.getLogger().debug("取出结果集数据完成...");} catch (SQLException e) {LogManager.getLogger().error("取出结果集数据失败!!!", e);} finally {DBHelper.close(con, st, rs);}return results;}/*** * @param sql 要执行的sql语句* @param objs 执行sql语句需要的参数* @return 取出数据库的数据, key是字段名或字段别名(小写字母), value应对字段的值*/public static Map<String, Object> doQueryOne(String sql, Object...objs){Connection con = null;PreparedStatement st = null;ResultSet rs = null;Map<String, Object> results = null;try {con = getConn();st = con.prepareStatement(sql); // 3.sql执行工具setParams(st, objs);LogManager.getLogger().debug("sql执行工具创建成功...");} catch (SQLException e) {LogManager.getLogger().error("sql执行工具创建失败!!!", e);}try {rs = st.executeQuery(); // 4.执行sql取到返回数据白结果集LogManager.getLogger().debug("执行sql取到返回数据成功...");} catch (SQLException e) {LogManager.getLogger().error("执行sql取到返回数据失败!!!", e);}try {ResultSetMetaData rsmd = rs.getMetaData(); // 元数据; 对象取取到的结果集数据的描述int cloumCount = rsmd.getColumnCount();if (rs.next()) { // 判断结果集是否还有数据 (数据是一条记录的方式取出)results = new HashMap<String, Object>();for (int i = 1; i <= cloumCount; i++) {//rsmd.getColumnName(i) :表的字段名或字段别名//rs.getObject(i) : 取到字段对应的值results.put(rsmd.getColumnName(i).toLowerCase(), rs.getObject(i));}}LogManager.getLogger().debug("取出结果集数据完成...");} catch (SQLException e) {LogManager.getLogger().error("取出结果集数据失败!!!", e);} finally {DBHelper.close(con, st, rs);}return results;}private static void setParams(PreparedStatement st, Object... objs) {// 判断是否有参数if (objs == null || objs.length == 0) {return;}int flag = 0;try {for (int i = 0; i < objs.length; i++) {flag = i + 1;String paramType = objs[i].getClass().getName(); // 获得参数的类型if (Integer.class.getName().equals(paramType)) { // 判断是否是int类型st.setInt(i + 1, (int) objs[i]);} else if (Double.class.getName().equals(paramType)) { // 判断是否是dobule类型st.setDouble(i + 1, (double) objs[i]);} else if (String.class.getName().equals(paramType)) { // 判断是否是string类型st.setString(i + 1, (String) objs[i]);} else {st.setObject(i + 1, objs[i]);}}} catch (SQLException e) {LogManager.getLogger().error(String.format("注入第%d值时失败!!!", flag),e);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。