求助,由于连接数据库老是失败,所以写了个死循环来进行数据库连接,但是还是会失败
急求解决方案,不知道是循环写的有问题还是其他的问题
死循环代码如下:
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;
失败就是执行了一部分数据后,然后报数据连接失败,然后写库就终止了,不在继续执行。难道非得一次性写入才可以?我想知道为什么上边的死循环都可以跳出来呢。
就break跳出该方法了
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;
}
}
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:不知道,希望你能贴完整一点的代码。
答楼上所有人:谢谢各位了,
1.远程是可以的,ip是可以ping通的
2.连接字符串是没有问题的,因为有时候可以连接,有时候连接不上。
3.数据库没有问题的,可以通过客户端连接的。
因为是要向数据库里边插入excel数据,写了一个循环来进行读取excel表格到本地,然后再本地读取每条数据插入数据库,插入是利用循环,就是读一条数据,向数据库请求连接,然后插入数据,最后释放,然后再进行下一条数据插入循环,
可是有时候可以完全导入成功,有时候会失败,报错,数据库连接不上。网络问题基本可以排除
这个问题很正常,你读一条就打开一次,看看有时候网络延迟,导致记录没加载到,但是又打开链接,你最好把数据先加载过来,然后批处理一次搞掂吧,这样保险,用try catch回滚下或者跳过继续面的,大概如此了
难道非得一次性写库才可以,循环多次就不行么,搞了多天了,就是不知道问题在哪儿
看情况上,你说有时ping得通有时又不行,很明显是你那里的网络不行,有时候链接断了,服务器那里没有close,也没设置链接超时时间,所以还是在占用着链接,所以你循环获取链接有时会失败,然后之前的链接可能因为尚未超时或者未手工关闭导致没资源