这样的功能怎么实现:JAVA连接多台服务器数据库,如遇超时或网络不通自动跳过连接下一台 现在的情况是任何一台网络不通或超时就报错,程序终止了我想程序自动连接下一台依次类推 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try{第一个数据库连接;抛出异常;}catch(Exception e){现在的情况是任何一台网络不通或超时 就报错,程序终止了 ; 连接第二个数据库;}catch(Exception e){现在的情况是任何一台网络不通或超时 就报错,程序终止了 ; 连接第三个个数据库;}.....finally{关闭数据库连接;}不知道此方法是否行的通。 o(∩_∩)o... 我猜想你需要获取到任何一个服务器上的数据库连接吧,如果各台服务器的数据库连接代码都是一样的(除了HOST)那维护一个HOST数组 String[] HOSTS =....java.sql.Connection con = null;Class.forName(.....);for(int i=0;i<HOSTS.length;i++){ //获取到HOSTS[i]的连接,如果成功break; try{ con=..... break; }catch(。。) { } } 把数据库连接相关的信息封装成一个类(DBInfo),然后,200多个数据库,就会对应200多个DBInfo的对象,将这些对象保存在一个LinkedList里面.编写一个接口public interface Proccessor{ public abstract void proccess(Connection con)throws SQLException;}假设你处理这些数据的类是Controller,通过调用Controller.doProccess(Object args)方法来实现的.那么,可以做如下修改:public class Controller{ List dbiList = new LinkedList();//这是那200多个DBInfo对象的链表.自己想办法添进去.初始化的时候添一次就可以了. //原来的doProccess方法 public void doProcess(final Object args){ Proccessor p = new Processor({ public void proccess(Connection con)throws SQLException{ //在这里面添加你要对数据库操作的内容.注意,这里最好是要封装成一个事务进行提交. //如果不想使用匿名内部类,可以自己编写一个有名称的实现类. } }); doDBProccess(p); } private void doDBProccess(Proccessor p){ for(Iterator itr = dbiList.iterator();itr.hasNext();){ DBInfo info = (DBInfo)itr.next(); Connection conn = getDBConnection(info); try{ p.proccess(conn); return; }catch(SQLException e){ continue; } } noDBCanDO(p); } private void noDBCanDO(Proccessor p){ //所有DB的连接都无法完成时,代码添这里就可以了. } private Connection getDBConnection(DBInfo info){ //通过DBInfo对象的内容,创建一个数据库的连接.代码添这里就可以. }}以上,只是实现楼主要求的一种方式之一.方法太多,主要还是得根据具体情况来设计代码.我写得可能有些复杂了. noDBCanDO(Proccessor p)方法应该改名叫做noDBCanFinish(Proccessor p) 求一个汇编语言修改系统时间的代码!不胜感激 在线高分请教Junit的问题,请大家不吝赐教 请高手帮忙!!赐教!! 请帮我改一下这个程序 关于串口的小问题! JDBC访问Oracle数据库,出现异常!!!!急急急急急急急 请问在jb里面怎么让窗口或是frame用自己的图片做背景啊? Jakarta POI 对象的存取 关于rmi的问题 ... java布局中如何使控件从上到下先排好 执行和暂停
第一个数据库连接;抛出异常;
}catch(Exception e)
{
现在的情况是任何一台网络不通或超时
就报错,程序终止了 ;
连接第二个数据库;
}catch(Exception e)
{
现在的情况是任何一台网络不通或超时
就报错,程序终止了 ;
连接第三个个数据库;}
.....
finally{
关闭数据库连接;
}不知道此方法是否行的通。 o(∩_∩)o...
java.sql.Connection con = null;
Class.forName(.....);
for(int i=0;i<HOSTS.length;i++)
{
//获取到HOSTS[i]的连接,如果成功break;
try{
con=.....
break;
}catch(。。)
{
}
}
编写一个接口public interface Proccessor{
public abstract void proccess(Connection con)throws SQLException;
}假设你处理这些数据的类是Controller,通过调用Controller.doProccess(Object args)方法来实现的.那么,可以做如下修改:
public class Controller{
List dbiList = new LinkedList();//这是那200多个DBInfo对象的链表.自己想办法添进去.初始化的时候添一次就可以了.
//原来的doProccess方法
public void doProcess(final Object args){
Proccessor p = new Processor({
public void proccess(Connection con)throws SQLException{
//在这里面添加你要对数据库操作的内容.注意,这里最好是要封装成一个事务进行提交.
//如果不想使用匿名内部类,可以自己编写一个有名称的实现类.
}
});
doDBProccess(p);
}
private void doDBProccess(Proccessor p){
for(Iterator itr = dbiList.iterator();itr.hasNext();){
DBInfo info = (DBInfo)itr.next();
Connection conn = getDBConnection(info);
try{
p.proccess(conn);
return;
}catch(SQLException e){
continue;
}
}
noDBCanDO(p);
}
private void noDBCanDO(Proccessor p){
//所有DB的连接都无法完成时,代码添这里就可以了.
}
private Connection getDBConnection(DBInfo info){
//通过DBInfo对象的内容,创建一个数据库的连接.代码添这里就可以.
}
}以上,只是实现楼主要求的一种方式之一.方法太多,主要还是得根据具体情况来设计代码.我写得可能有些复杂了.