我试图为每个数据库建立一个单独的连接,因为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}}
现在这意味着我需要each thread
在运行方法中建立两个数据库连接,因为每个表的 JDBC url 都不同。所以我在我的代码中将 Connection 设置为 list 和 callableStatement ,并且根据 tableList 的大小,它将建立连接。
就像如果我们只有一张表,那么它只会建立一个连接,如果我们有两个表,那么它将建立两个连接。
dbConnection[0]
之类的东西dbConnection[1]
。
对于每张桌子,我都在打电话getRequiredMethods(suffix)
。所以我也需要把它作为清单。因为如果我们有两个表,那么列表中就会有两个表的方法。
下面是我的代码,我不确定如何tableList
在 run 方法中循环该映射并建立新连接并将其分配为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;
}
有谁可以帮我离开这里吗?
更新代码:-
我在这里取得了一些进展-我在运行方法中编写了以下代码-
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"));
}
}