万能动态数据库连接工具类
来源:互联网 发布:台湾已经独立了知乎 编辑:程序博客网 时间:2024/06/05 22:32
0、写在前面的话
今天在工作中遇到一个需求,是这样的,需要连接很多的数据库(我这里300多个),去每个库执行一段sql,然后把结果进行处理
如果手工用数据库去连接那就太LOW了,而且300个诶大哥好辛苦,所以我的思路是写一个循环读取文件中的数据库ip地址,端口,用户名,密码,动态的去连接数据库,拿回返回结果再处理
现在把我的这个工具分享给大家,大神不用看了,只是jdbc的简单连接使用
1、使用场景
需要动态连接到很多数据库执行相同或则不同的业务
我只写了mysql和sql server的连接,后续使用可以直接扩展
2、废话不多说,直接看代码
package com.test.db;import java.sql.*;import java.util.ArrayList;import java.util.List;/** * Careate by chenjin at 2017-09-25 * 动态连接数据库工具类 * </br> * <p> * 主要针对动态连接数据库 */public class DBHelper { //数据库连接 private static Connection conn = null; //数据库连接配置 private static DbPro dbPro = null; private DBHelper() { System.out.println(DBHelper.class.getName() + "该类不能初始化!!!"); } /** * 获取连接数据库拼接的URL * * @return */ private static String getUrl() { //判断IP和端口是否是空的 if (dbPro == null || dbPro.getIp() == null || "".equals(dbPro.getIp()) || dbPro.getPort() == null || "".equals(dbPro.getPort())) { System.out.println("请初始化IP和端口!!!"); return null; } String urlStart; if (dbPro.getSqlTyle() == SQL_TYPE.SQL_SERVER) { urlStart = "jdbc:sqlserver://" + dbPro.getIp() + ":" + dbPro.getPort() + ";DatabaseName=" + dbPro.getDataBaseName(); } else if (dbPro.getSqlTyle() == SQL_TYPE.MYSQL) { urlStart = "jdbc:mysql://" + dbPro.getIp() + ":" + dbPro.getPort() + "/" + dbPro.getDataBaseName(); } else { System.out.println("未知数据库类型!!!"); urlStart = null; } return urlStart; } /** * 初始化连接 * * @param dbPro * @return */ public static Connection initConn(DbPro dbPro) { try { if (dbPro == null) { new RuntimeException("初始化参数dbPro不能为空!!"); return null; } DBHelper.dbPro = dbPro; //加载对应驱动 Class.forName(dbPro.getDriver()); //超时时间 DriverManager.setLoginTimeout(dbPro.getLoginTimeOutSeconds()); String url = getUrl(); if (url == null || "".equals(url)) { return null; } conn = DriverManager.getConnection(url, dbPro.getUserName(), dbPro.getPassWord()); System.out.println("数据库初始化连接成功!!!"); } catch (ClassNotFoundException e) { System.out.println("数据库初始化连接【失败】"); e.printStackTrace(); closeConn(); } catch (SQLException e) { System.out.println("数据库初始化连接【失败】"); e.printStackTrace(); closeConn(); } finally { } return conn; } public static void closeConn() { if (conn != null) { try { conn.close(); System.out.println("关闭成功!!!"); } catch (SQLException e) { e.printStackTrace(); System.out.println("连接关闭失败!!!" + e.getMessage()); } } else { System.out.println("连接为空,无需关闭!!!"); } } /** * 执行SQL查询 * * @param sql * @return */ public static List<List<String>> exec(String sql) { if (sql == null || sql.equals("")) { System.out.println("sql为空,请先设置执行的SQL语句"); return null; } List<List<String>> allDatas = new ArrayList<List<String>>(); try { if (conn == null) { System.out.println("conn == null"); return null; } PreparedStatement preparedStatement = conn.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); //获取到数据列数 int columnCount = resultSet.getMetaData().getColumnCount(); //column 列 //row 行 while (resultSet.next()) { List<String> rows = new ArrayList<>(); for (int i = 1; i <= columnCount; i++) { if (dbPro.isPrint()) { if (i < columnCount) { System.out.print(resultSet.getString(i) + "\t"); } else { System.out.print(resultSet.getString(i)); } } rows.add(resultSet.getString(i)); } if (dbPro.isPrint()) { System.out.println(); } allDatas.add(rows); } System.out.println("SQL 执行完成!!!" + sql); } catch (SQLException e) { e.printStackTrace(); } return allDatas; } /** * 执行SQL查询 * * @return */ public static List<List<String>> exec() { if (dbPro.getSql() == null || dbPro.getSql().equals("")) { System.out.println("dbPro.getSql()为空,请先设置执行的SQL 语句"); return null; } return exec(dbPro.getSql()); } /** * 数据库配置类 */ static class DbPro { private String ip = null; private String port = null; private String driver = null; private String userName = null; private String passWord = null; private String sql = null; private String dataBaseName = null; private SQL_TYPE sqlTyle = null; private int loginTimeOutSeconds = 0; private boolean isPrint = false; public boolean isPrint() { return isPrint; } public void setPrint(boolean print) { isPrint = print; } public int getLoginTimeOutSeconds() { return loginTimeOutSeconds; } public void setLoginTimeOutSeconds(int loginTimeOutSeconds) { this.loginTimeOutSeconds = loginTimeOutSeconds; } public SQL_TYPE getSqlTyle() { return sqlTyle; } public void setSqlTyle(SQL_TYPE sqlTyle) { this.sqlTyle = sqlTyle; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } public String getDataBaseName() { return dataBaseName; } public void setDataBaseName(String dataBaseName) { this.dataBaseName = dataBaseName; } } /** * 数据库类型枚举 */ enum SQL_TYPE { MYSQL, SQL_SERVER }}
阅读全文
0 0
- 万能动态数据库连接工具类
- 工具类-万能Adapter
- 万能数据库连接程序
- 万能的数据库连接程序
- 万能的数据库连接程序
- 万能的数据库连接程序
- JDBC-数据库连接工具类
- SQL数据库连接工具类
- 数据库连接工具类
- JDBC数据库连接工具类
- oracle 数据库连接工具类
- java 数据库连接工具类
- 数据库连接JDBC工具类
- 数据库连接工具类
- 数据库连接工具类BaseDao
- 数据库连接工具类
- 数据库连接工具类
- 数据库连接工具类
- Java常见集合框架(二):Iterable、Collection(List、Set、Queue)、AbstractCollection
- 手写原生商城的注册模块
- 设计模式系列(五)外观模式
- 《项目三》二维物体(盖板图像)的倒置检测
- 【Caffe】Matlab接口(make编译通过,make mattest出错)
- 万能动态数据库连接工具类
- codevs 2597 团伙 并查集 解题报告
- 欢迎使用CSDN-markdown编辑器
- struts2注解开发,运行原理
- Log管理
- runProguard false:Could not find method runProguard()
- 关于调用存储过程-事务使用
- 闭包
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path