我有一个Java程序,它在数据库上执行一些搜索操作,这是代码:
public class DBSearch {
public static void SearchDatabase() throws Exception{
ArrayList<String> names = new ArrayList<String>();
Connection c = null;
PreparedStatement ps = null;
ResultSet rs = null;
String host = "localhost";
String db = "mydatabase";
String user = "root";
String password = "password";
Class.forName("com.mysql.jdbc.Driver");
c = DriverManager.getConnection("jdbc:mysql://"+host+"/" + db +"?user="+user+"&password="+password);
ps = c.prepareStatement("SELECT NAME FROM NAMES");
rs = ps.executeQuery();
names.clear()
while ( rs.next() ) {
names.add(rs.getString("NAME"));
}
for(i = 1; i < names.size(); i++){
//Do some database operations
现在我想做的是,在这些操作结束时,进程开始在另一个数据库中进行相同的操作。我的想法是创建一个名为dblist
的ArrayList,其中包含所有数据库名称,然后执行以下操作:
...
for(i=1, i < dblist.size(); i++{
Class.forName("com.mysql.jdbc.Driver");
c = DriverManager.getConnection("jdbc:mysql://"+host+"/" + dblist.get(i) +"?user="+user+"&password="+password);
但是这个过程似乎不是为每个数据库循环,它只与数组中的第一个数据库一起使用而不是停止。
答案 0 :(得分:1)
你收到什么消息?没有人可以根据您发布的内容提供帮助。
这是一个丑陋,低效的代码。
我会提供一些建议:
听起来像一个糟糕的设计。为什么要将冗余数据分散在许多数据库中?
答案 1 :(得分:0)
不要将变量放在for循环的外部,而是将其放在里面。因此,它每次都会创建一个新连接。
同时检查您是否从dblist
获取了正确的数据库信息。事实上,确保您甚至获取数据库信息,而不是在for循环中运行相同的连接。
实施例。 请注意,我在for循环中使用0,因为数组列表中的第一个索引是0。
for(i=0, i < dblist.size(); i++
{
dblist.get(i);
//Separate the string you got from the ArrayList into host, user, pass and assign correct variables
Class.forName("com.mysql.jdbc.Driver");
//Variables you got from the list go in the next statement
Connection c = DriverManager.getConnection("jdbc:mysql://"+host+"/" + db +"?user="+user+"&password="+password);
}
不是我在Connection中没有我的get语句(我假设你的ArrayList包含主机,数据库,用户和传递)
或者你可以将整个连接字符串存储在Array列表中,它只是:
Connection c = DriverManager.getConnection(dblist.get(i));