import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.tianque.exception.base.ServiceValidationException;
public final class DbTools {
private static Logger log = LoggerFactory.getLogger(DbTools.class);
private DbTools() {
}
/**
* 根据数据库连接参数生成数据库连接对象
*
* @param mapDb
* {DS_URL:"",DS_USER:"",DS_PASS:"",DS_CS:"10"}
* @return 返回数据库连接对象
*/
public static Connection getConnection(Map mapDb) {
String dsUrl = MapUtils.getString(mapDb, "DS_URL");
String driver = "oracle.jdbc.driver.OracleDriver";
if (dsUrl.indexOf("mysql") != -1) {
driver = "com.mysql.jdbc.Driver";
}
if (dsUrl.indexOf("sqlserver") != -1) {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
}
Connection conn = null;
Properties props = new Properties();
try {
Class.forName(driver);
DriverManager.setLoginTimeout(MapUtils.getIntValue(mapDb, "DS_CS", 10));
props.setProperty("user", MapUtils.getString(mapDb, "DS_USER", ""));
props.setProperty("password", MapUtils.getString(mapDb, "DS_PASS", ""));
props.setProperty("remarks", "true"); // 设置可以获取remarks信息
props.setProperty("useInformationSchema", "true");// 设置可以获取tables remarks信息(mysql时必须设置)
conn = DriverManager.getConnection(dsUrl, props);
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
/**
* 查询数据库中所有表信息
*
* @param mapDb
* {DS_URL:"",DS_USER:"",DS_PASS:"",DS_CS:"10"}
* @return 返回所有表信息
*/
public static List
} finally {
DbTools.close(rs, conn);
}
}
public static void close(ResultSet rs, Connection conn) {
close(rs);
close(conn);
}
/**
* 关闭数据库对象
*
* @param obj
* 数据库对象
*/
public static void close(Object obj) {
if (obj == null) {
return;
}
if (obj instanceof ResultSet) {
try {
((ResultSet) obj).close();
} catch (SQLException e) {
log.error(e.getMessage());
}
} else if (obj instanceof Statement) {
try {
((Statement) obj).close();
} catch (SQLException e) {
log.error(e.getMessage());
}
} else if (obj instanceof Connection) {
Connection c = (Connection) obj;
try {
if (!c.isClosed()) {
c.close();
}
} catch (SQLException e) {
log.error(e.getMessage());
}
}
}
public List
try {
DataSourceConfig dataSourceConfig = getDataSourceConfig(id);
String password_ = AESUtil.decrypt(dataSourceConfig.getPassword(), Base64Password.BASE64_PASSWORD);
List
{ "DS_URL", dataSourceConfig.getUrl() }, { "DS_USER", dataSourceConfig.getUserName() },
{ "DS_PASS", password_ }, { "DS_TYPE", dbType },
{ "DataSource_Type", Integer.toString(dataSourceConfig.getDataSourceType()) }, }));
return list;
} catch (Exception e) {
throw new ServiceValidationException("连接失败", e);
}
}
}