package com.wgcloud.util.jdbc; import com.wgcloud.entity.DbInfo; import com.wgcloud.service.DbInfoService; import com.wgcloud.service.LogInfoService; import com.wgcloud.util.staticvar.StaticKeys; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @version v2.3 * @ClassName:ConnectionUtil.java * @author: http://www.wgstart.com * @date: 2019年11月16日 * @Description: ConnectionUtil.java * @Copyright: 2017-2022 wgcloud. All rights reserved. */ @Component public class ConnectionUtil { private static final Logger logger = LoggerFactory.getLogger(ConnectionUtil.class); @Resource private LogInfoService logInfoService; @Resource private DbInfoService dbInfoService; public JdbcTemplate getJdbcTemplate(DbInfo dbInfo) throws Exception { JdbcTemplate jdbcTemplate = null; String driver = ""; String url = ""; if ("mysql".equals(dbInfo.getDbType())) { driver = RDSConnection.driver_mysql; url = RDSConnection.url_mysql; } else if ("postgresql".equals(dbInfo.getDbType())) { driver = RDSConnection.driver_postgresql; url = RDSConnection.url_postgresql; } else if ("sqlserver".equals(dbInfo.getDbType())) { driver = RDSConnection.driver_sqlserver; url = RDSConnection.url_sqlserver; } else if ("db2".equals(dbInfo.getDbType())) { driver = RDSConnection.driver_db2; url = RDSConnection.url_db2; } else { driver = RDSConnection.driver_oracle; url = RDSConnection.url_oracle; } url = url.replace("{ip}", dbInfo.getIp()).replace("{port}", dbInfo.getPort()).replace("{dbname}", dbInfo.getDbName()); try { //创建连接池 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(dbInfo.getUser()); dataSource.setPassword(dbInfo.getPasswd()); jdbcTemplate = new JdbcTemplate(dataSource); if ("mysql".equals(dbInfo.getDbType())) { jdbcTemplate.queryForRowSet(RDSConnection.MYSQL_VERSION); } else if ("postgresql".equals(dbInfo.getDbType())) { jdbcTemplate.queryForRowSet(RDSConnection.MYSQL_VERSION); } else if ("sqlserver".equals(dbInfo.getDbType())) { jdbcTemplate.queryForRowSet(RDSConnection.SQLSERVER_VERSION); } else if ("db2".equals(dbInfo.getDbType())) { jdbcTemplate.queryForRowSet(RDSConnection.DB2_VERSION); } else { jdbcTemplate.queryForRowSet(RDSConnection.ORACLE_VERSION); } dbInfo.setDbState("1"); dbInfoService.updateById(dbInfo); return jdbcTemplate; } catch (Exception e) { jdbcTemplate = null; logger.error("连接数据库错误", e); logInfoService.save("连接数据库错误:" + dbInfo.getAliasName(), "IP:" + dbInfo.getIp() + ",端口:" + dbInfo.getPort() + ",数据库别名:" + dbInfo.getAliasName() + ",错误信息:" + e.toString(), StaticKeys.LOG_ERROR); dbInfo.setDbState("2"); dbInfoService.updateById(dbInfo); } return null; } public long queryTableCount(DbInfo dbInfo, String sql) { try { JdbcTemplate jdbcTemplate = getJdbcTemplate(dbInfo); if (null == jdbcTemplate) { return 0; } return jdbcTemplate.queryForObject(sql, Long.class); } catch (Exception e) { logger.error("统计数据表错误:", e); logInfoService.save("统计数据表错误:" + dbInfo.getAliasName(), "IP:" + dbInfo.getIp() + ",端口:" + dbInfo.getPort() + ",数据库别名:" + dbInfo.getAliasName() + ",错误信息:" + e.toString(), StaticKeys.LOG_ERROR); return 0; } } }