在使用Oracle数据库时,在驱动及连接正常的情况下,报错如下:
java.sql.SQLException: 关闭的连接
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:895)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
修改前:
将加载驱动以及连接数据库的getConnection()函数,另外编写在JDBCUtil的类中,当需要使用数据库时,在相应的函数中调用JDBCUtil.getConnection()进行数据库的连接。
修改办法:
将getConnection()中的连接 *** 作,直接编写到相应的使用数据库的函数中,不再单独编写,如下面的程序:
public Book getBook(int ID) {
Book result=null;
try {
//加载数据库驱动
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("加载数据库驱动成功!");
}
catch(ClassNotFoundException e){
System.out.println("加载数据库驱动失败!");
e.printStackTrace();
}
//连接数据库
if(con==null){
try{
con=DriverManager.getConnection(url,"user","000");
System.out.println("创建数据库连接成功!");
}
catch(SQLException e){
System.out.println("创建数据库连接失败!");
e.printStackTrace();
}
}
//查询相应等数据库的具体 *** 作
String sql="select * from BOOK2 where ID=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1, ID);
ResultSet rs=pstmt.executeQuery();
while(rs.next()) {
result=new Book();
result.setID(ID);
String name=rs.getString(2);
float price=rs.getFloat(3);
result.setName(name);
result.setPrice(price);
}
//关闭rs、pstmt以及数据库连接
if(rs!=null) {
rs.close();
}
rs=null;
if(pstmt!=null) {
pstmt.close();
}
pstmt=null;
if(con!=null) {
con.close();
con=null;
}
}
catch(SQLException e) {
System.out.println("Error!");
e.printStackTrace();
}
return result;
}
问题原因
我也不太清楚啊,就是试着改了一下就可以了,希望会遇到大佬进行解答吧!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)