用同一个sql语句查询。
100个数据库里面的表的结构都是相同的。
我现在要做的就是::需要同时链接100个数据库进行查询。查出一条符合 条件的就显示一条。。
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://192.168.20.236:3306/express001","root" ,"123456"); ps=conn.prepareStatement("select * from sf where f29=? or f30=? or f40=? or f41=?");
这是连接1个数据库的时候。。。
有什么好办法可以解决嘛
多线程能解决吗??我没有接触过多线程,,如果可以,还请麻烦给点提示 谢谢。。。
如果是oracle,可以用dblink,不是楼主的是mysql,可能只能分别连接100个数据库分别查询,最后汇总。如果是多线程分别查询这100个数据库,需要注意汇总时线程安全问题
你既然要操作100个库,自然需要100个不同的连接,这是硬性条件。
给楼主一个当当网的开源项目吧。
sharding-jdbc
这能有什么好办法,一个一个连吧,起的线程数量应当是cpu核心数目,太多了浪费资源。使用线程池吧。
我认为多线程可以解决..不然就是同步执行下来了。
没测试,你试试
public class Test100Conn { static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) throws Throwable { String f29 = "haha"; //或者其他类似条件? String db ; for (int i = 1; i <= 100; i++) { if (i < 10) { db = "00" + i; } else if (i >= 10 && i < 100) { db = "0" + i; }else{ db = "100"; } Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.20.236:3306/express" + db, "root", "123456"); PreparedStatement stmt = conn.prepareStatement("select * from sf where f29=? or f30=? or f40=? or f41=?"); stmt.setString(1, "");//下面还有几个,这个1看你具体需求 ResultSet rs = stmt.executeQuery(); while(rs.next()){ System.out.println("这是第"+db+"个数据库开始"); if(rs.getString(1).equals(f29)){ //判断条件放在这里判断 System.out.println(rs.getString(1)); break; } System.out.println("这是第"+db+"个数据库结束"); } rs.close(); stmt.close(); conn.close(); } } }