连接数据库查询时,显示“关闭的连接:next”错误。
原因大概就是在取结果集的时候,发现连接已经关闭导致了,连接关闭的原因大概可以分为两种:程序书写问题,连接池的连接时间问题。
本文主要是程序书写连接的方法处理有问题,如果大家检查不是程序书写的问题,可以参考文章:关闭的连接:next这个是关于连接池时间修改的解决方法。
下面贴出代码看看:
package configSelenium.Assert;
import java.sql.*;
/**
* @author wangyan
* @date 2019-02-22 下午 04:11
*/
public class Assert_database {
static Connection ct = null;
static PreparedStatement stmt=null;
public static Connection getConnection(){
try {
if(ct!=null&&!ct.isClosed()) {
return ct;
}
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.2.101:1521:test","admin","ad9");
if(ct==null) {
throw new Exception("获取连接失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return ct;
}
public static ResultSet getResult(String var) {
ResultSet rs = null;
try {
getConnection();
System.out.println("查询语句:"+var);
stmt=ct.prepareCall(var);
rs=stmt.executeQuery();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (Exception er) {
er.printStackTrace();
}
try {
ct.close();
} catch (Exception er) {
er.printStackTrace();
}
}
return rs;
}
上面程序再调用的时候,执行完,直接到这里,然后调用关闭的方法,所以导致其他程序的结果还没取完就关闭了,于是把关闭的方法单独拿出去。
finally {
try {
stmt.close();
} catch (Exception er) {
er.printStackTrace();
}
try {
ct.close();
} catch (Exception er) {
er.printStackTrace();
}
}
修改后的代码:
package configSelenium.Assert;
import java.sql.*;
/**
* @author wangyan
* @date 2019-02-22 下午 04:11
*/
public class Assert_database {
static Connection ct = null;
static PreparedStatement stmt=null;
public static Connection getConnection(){
try {
if(ct!=null&&!ct.isClosed()) {
return ct;
}
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:oracle:thin:@192.168.2.101:1521:test","admin","ad9");
if(ct==null) {
throw new Exception("获取连接失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return ct;
}
public static ResultSet getResult(String var) {
ResultSet rs = null;
try {
getConnection();
System.out.println("查询语句:"+var);
stmt=ct.prepareCall(var);
rs=stmt.executeQuery();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (Exception er) {
er.printStackTrace();
}
try {
ct.close();
} catch (Exception er) {
er.printStackTrace();
}
}
return rs;
}
public static ResultSet getResult(String var) {
ResultSet rs = null;
try {
getConnection();
System.out.println("查询语句:"+var);
stmt=ct.prepareCall(var);
rs=stmt.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public static void getClose(){
System.out.println("要关闭了");
if(stmt!=null){
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(ct!=null) {
try {
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在调用完getResult(“”)后,调用getClose方法就可以了。