在写servlet时连接数据库出现No operations allowed after connection closed

qq_37772909 2017-08-10 07:51:01
我在做上传图片到服务器然后数据库存这个图片的地址,下面name是传递过来的图片的地址,第一次能正确存进去,后面再也存不进去,并出现题目的错误

package uploadPack;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class ItemManager {
public void uploadItemImage(String itemNo,String name){
Connection conn=null;
PreparedStatement stmt=null;
ResultSet rs=null;
try{
conn=DBHelper.getConnection();
stmt=conn.prepareStatement("INSERT pictures(picture) VALUES(?)");
stmt.setString(1, name);
stmt.executeUpdate();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
DBHelper.close(rs, stmt, conn);
}
}
}

下面是加载和创建数据库的类

package uploadPack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBHelper {

//静态代码块来加载驱动
static {
try{
String driverName="com.mysql.jdbc.Driver";
Class.forName(driverName);
}catch(Exception e){
e.printStackTrace();//打印异常输出
}
}

//连接到指定的数据库,三个参数分别是数据库地址,账号,密码
public static Connection getConnection(){
Connection conn=null;
try{
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Demos", "root", "root");
}catch(Exception e){
e.printStackTrace();
}
return conn;
}

//关闭数据库连接
public static void close(ResultSet rs,Statement stmt,Connection conn){
try{
if(rs!=null)
rs.close();
}catch(Exception ex){
ex.printStackTrace();
}

try{
if(stmt!=null)
stmt.close();
}catch(Exception ex){
ex.printStackTrace();
}

try{
if(conn!=null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}


这个问题我在CSDN上看到原因,但不理解,我想知道我这个怎么改~
...全文
562 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hz890 2017-08-13
  • 打赏
  • 举报
回复
getConnection和close方法均采用实例化调用模式,应该可以避免此问题。 楼主不妨先尝试一下。
hz890 2017-08-13
  • 打赏
  • 举报
回复
引用 楼主 qq_37772909 的回复:
我在做上传图片到服务器然后数据库存这个图片的地址,下面name是传递过来的图片的地址,第一次能正确存进去,后面再也存不进去,并出现题目的错误

package uploadPack;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class ItemManager {
	public void uploadItemImage(String itemNo,String name){
		Connection conn=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		try{
			conn=DBHelper.getConnection();
			stmt=conn.prepareStatement("INSERT pictures(picture) VALUES(?)");
			stmt.setString(1, name);
			stmt.executeUpdate();
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			DBHelper.close(rs, stmt, conn);
		}
	}
}
下面是加载和创建数据库的类

package uploadPack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBHelper {
   
	//静态代码块来加载驱动
	static {
		try{
			String driverName="com.mysql.jdbc.Driver";
			Class.forName(driverName);
		}catch(Exception e){
			e.printStackTrace();//打印异常输出
		}
	}
	
	//连接到指定的数据库,三个参数分别是数据库地址,账号,密码
	public static Connection getConnection(){
		Connection conn=null;
		try{
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Demos", "root", "root");
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}
	
	//关闭数据库连接
	public static void close(ResultSet rs,Statement stmt,Connection conn){
		try{
			if(rs!=null)
				rs.close();
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
		try{
			if(stmt!=null)
				stmt.close();
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
		try{
			if(conn!=null)
				conn.close();
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
}
这个问题我在CSDN上看到原因,但不理解,我想知道我这个怎么改~
第一次能正确存进去,后面再也存不进去 public static Connection getConnection() DBHelper.close(rs, stmt, conn); 个人看法,问题应该在于楼主的getConnection方法是静态的。 所以第一次uploadItemImage方法执行成功后,由于该方法内部执行了close方法,导致后续执行所获取到的Connection对象都处于关闭状态。 接下来就会引发“No operations allowed after connection closed”异常!
nbman2013 2017-08-11
  • 打赏
  • 举报
回复
代码看上去是没问题的,调用地方的代码发来看看?jdbc包版本号是多少?
一个帅逼 2017-08-11
  • 打赏
  • 举报
回复
看了下,应该是你上传后吧所有东西都关了,但是你的加载驱动那一块使用静态块,导致后面不能加载驱动获取不到链接,你可以把加载驱动那部分写到获取连接里试试

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧