首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

,由于连接数据库老是失败,所以写了个死循环来进行数据库连接,但是还是会失败

2013-12-28 
求助,由于连接数据库老是失败,所以写了个死循环来进行数据库连接,但是还是会失败急求解决方案,不知道是循

求助,由于连接数据库老是失败,所以写了个死循环来进行数据库连接,但是还是会失败
急求解决方案,不知道是循环写的有问题还是其他的问题
死循环代码如下:


Connection conn1 = null;
//getDbConnection db1 = new getDbConnection();
//Connection conn1 = db1.getConn();
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
while(true){
conn1 = DriverManager.getConnection("jdbc:oracle:thin:@132.232.36.137:1521:manage", "server","server");
if(conn1!=null){
//System.out.println("异常数据没有导入成功:"+info.getDEST_NUM()+"------------------------------------------------------");
break;
   }
}
/*DriverManager.setLoginTimeout(600);
conn1 = DriverManager.getConnection("jdbc:oracle:thin:@132.232.33.133:1521:manage1", "server1","server1");

*/
PreparedStatement ps = conn1.prepareStatement(sql);
result = 0;

[解决办法]
引用:
答楼上所有人:谢谢各位了,

1.远程是可以的,ip是可以ping通的
2.连接字符串是没有问题的,因为有时候可以连接,有时候连接不上。
3.数据库没有问题的,可以通过客户端连接的。

因为是要向数据库里边插入excel数据,写了一个循环来进行读取excel表格到本地,然后再本地读取每条数据插入数据库,插入是利用循环,就是读一条数据,向数据库请求连接,然后插入数据,最后释放,然后再进行下一条数据插入循环,
可是有时候可以完全导入成功,有时候会失败,报错,数据库连接不上。网络问题基本可以排除

这个问题很正常,你读一条就打开一次,看看有时候网络延迟,导致记录没加载到,但是又打开链接,你最好把数据先加载过来,然后批处理一次搞掂吧,这样保险,用try catch回滚下或者跳过继续面的,大概如此了
[解决办法]
在一个连接内完成操作。

如果中断,做日志记录,继续连接,从中断点开始操作。
[解决办法]
引用:
Quote: 引用:

不用写循环,连接看报什么错误,跟着错误去检查修改就是了。
先保证数据库没问题,通过客户端先连接下,然后再通过java代码去连接。


谢谢,我写了问题的详细,麻烦请您看下。 在 4楼
有时候时部分失败,还是全部失败呢?楼主可以贴一些代码出来,看是否不同的流程中,哪里把数据库连接关闭掉了。
[解决办法]
引用:
失败就是执行了一部分数据后,然后报数据连接失败,然后写库就终止了,不在继续执行。难道非得一次性写入才可以?我想知道为什么上边的死循环都可以跳出来呢。
 上面的死循环只是保证连接上数据库,连接上之后,

while(true){
                conn1 = DriverManager.getConnection("jdbc:oracle:thin:@132.232.36.137:1521:manage", "server","server");
                if(conn1!=null){
//                    System.out.println("异常数据没有导入成功:"+info.getDEST_NUM()+"------------------------------------------------------");
                    break;
               }
            }
 就break跳出该方法了
[解决办法]
去掉了注释后我们把所有的可能排查一下

1. Connection conn1 = null;
2. try {
3.     Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
4.    while(true){
5.        conn1 = DriverManager.getConnection("jdbc:oracle:thin:@132.232.36.137:1521:manage", "server","server");
6.        if(conn1!=null){
7.            break;
8.        }
9.    }
10.    PreparedStatement ps = conn1.prepareStatement(sql);
11.    result = 0;
    /*可能1: 执行完ps后 连接有没有关闭掉,每次执行这一段代码都会去getConnection(""),因为第一行把conn1=null了。如果没有关闭掉连接的话有可能你的程序打开了太多的连接超过了数据的最大连接数。
      可能2:不知道,希望你能贴完整一点的代码。

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

答楼上所有人:谢谢各位了,

1.远程是可以的,ip是可以ping通的
2.连接字符串是没有问题的,因为有时候可以连接,有时候连接不上。
3.数据库没有问题的,可以通过客户端连接的。

因为是要向数据库里边插入excel数据,写了一个循环来进行读取excel表格到本地,然后再本地读取每条数据插入数据库,插入是利用循环,就是读一条数据,向数据库请求连接,然后插入数据,最后释放,然后再进行下一条数据插入循环,
可是有时候可以完全导入成功,有时候会失败,报错,数据库连接不上。网络问题基本可以排除

这个问题很正常,你读一条就打开一次,看看有时候网络延迟,导致记录没加载到,但是又打开链接,你最好把数据先加载过来,然后批处理一次搞掂吧,这样保险,用try catch回滚下或者跳过继续面的,大概如此了


难道非得一次性写库才可以,循环多次就不行么,搞了多天了,就是不知道问题在哪儿


看情况上,你说有时ping得通有时又不行,很明显是你那里的网络不行,有时候链接断了,服务器那里没有close,也没设置链接超时时间,所以还是在占用着链接,所以你循环获取链接有时会失败,然后之前的链接可能因为尚未超时或者未手工关闭导致没资源

是不是连接没有释放掉,看一下数据库中的spid,是不是涨的很快。最好让一个connection多做点操作啊

热点排行