我正在尝试为每个数据库建立单独的连接,因为JDBC URL's
对它们是不同的,并将这些不同的连接存储在数组中。
在我的下面的代码中,tableList
是包含表名称和属性的地图,应该看起来像这样。
ConcurrentHashMap<String, ConcurrentHashMap<String, String>> tableList
示例 -
{table1={DRIVER=oracle.jdbc.driver.OracleDriver, PASSWORD=stage_cs_user, URL=jdbc_url, SUFFIX=xt1, SQL=sql, USER=user}, table2={DRIVER=driver_name, PASSWORD=pass, URL=jdbc_url2, SUFFIX=xt2, SQL=sql2, USER=user}}
现在这意味着我需要在run方法中在each thread
内建立两个数据库连接,因为每个表的JDBC url都不同。所以我在我的代码中将Connection作为列表和callableStatement,并且取决于tableList大小,它将建立连接。
如果我们只有一个表,那么它只会产生一个连接,如果我们有两个表,那么它将建立两个连接。
像dbConnection[0]
,dbConnection[1]
等
对于每张桌子,我打电话给getRequiredMethods(suffix)
。所以我需要把它作为列表。因为如果我们有两个表,那么它将为列表中的两个表提供方法。
以下是我的代码,我不确定,如何在run方法中循环tableList
地图并建立新连接并将其指定为dbConenction[0]
和dbConnection[1]
,具体取决于tableList size
并确保所有线程安全问题。
class Task implements Runnable {
private Connection[] dbConnection = null;
private CallableStatement[] callableStatement = null;
public Task(ConcurrentHashMap<String, ConcurrentHashMap<String, String>> tableList) {
this.tableLists = tableList;
}
@Override
public void run() {
try {
for(loop around lableList map) {
/* Make a connection to database and assign it as dbConnection[0],
dbConnection[1] and callableStatement[0] etc.
*/
dbConnection = getDBConnection(url, username, password, driver);
callableStatement = dbConnection.prepareCall(sql);
ArrayList<Method> methods = getRequiredMethods(suffix);
}
}
}
private ArrayList<Method> getRequiredMethods(String suffix) {
Class<ConstantsTest> consClass = ConstantsTest.class;
Method[] methods = consClass.getDeclaredMethods();
ArrayList<Method> requiredMethods = new ArrayList<Method>();
for (int i = 0; i < methods.length; i++) {
String sName = methods[i].getName();
if (sName.endsWith(suffix)) {
requiredMethods.add(methods[i]);
}
}
return requiredMethods;
}
有人可以帮助我吗?
更新代码: -
我在这里取得了一些进展 - 我在我的run方法中编写了以下代码 -
public void run() {
ArrayList<Method> methods[];
for( int i=0; i<tableLists.size(); i++) {
dbConnection[i] = getDBConnection(tableLists.get(i).get("URL"), tableLists.get(i).get("USERNAME"), tableLists.get(i).get("PASSWORD"), tableLists.get(i).get("DRIVER"));
callableStatement[i] = dbConnection[i].prepareCall(tableLists.get(i).get("SQL"));
methods[i] = getRequiredMethods(tableLists.get(i).get("SUFFIX"));
}
}