EJB3.0在取得数据源之后,第二次操作数据时 java.sql.SQLException: The statement is closed

lishixnew 2008-05-23 05:59:06
EJB3.0在取得数据源之后,如果执行完插入数据操作后,总是提示,让我自己关闭连接,

代码改了之后,第一次执行没问题,第二次在插入数据时,提示,java.sql.SQLException: The statement is closed异常,sql语句没问题
就一个WEB工程里面的一个简单的页面传参,

我的代码看了没看出什么问题
private EntityManager entityManager;
@Resource(mappedName = "OracleDS")
private DataSource ds;
private Statement sta;
private ResultSet set;
private Connection con;
private String sql;
public void getStatement(){
if(sta==null||con==null){
try {
con=ds.getConnection();
sta=con.createStatement();
} catch (SQLException e) {
System.out.println("取得连接异常");
e.printStackTrace();
}
}
}
public void close() throws SQLException{
if(set!=null){
set.close();
set=null;
}
if(sta!=null){
sta.close();
set=null;
}
if(con!=null){
con.close();
set=null;
}
}
下面是保存数据操作
public void save(String TableName,String pFieldList,String pValueList) throws SQLException {
try {
sql="insert into "+TableName+"("+pFieldList+")values("+pValueList+")";
getStatement();
sta.executeUpdate(sql);
} catch (RuntimeException re) {
throw re;
}finally{
close();
}
}



如果,是用JAVA工程就没这么多提示,就运行一次直接通过。但是必顺不能加close那方法,要不一次也执行不了就提示The statement is closed.异常,我都感觉很奇怪
...全文
834 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishixnew 2008-05-23
  • 打赏
  • 举报
回复
哦,发现了,但是我关闭了之后会不会等于NULL呀
比如if(con==null)我感觉con.close()不等NULL希望下面能给个答案

现在在家,没法做实验。先给加50分,等看看其它回答,回者有份
Shine_Panda 2008-05-23
  • 打赏
  • 举报
回复
}
if(con!=null){
con.close();
set=null;
}
}
这里你出现了一个笔误。

}
if(con!=null){
con.close();
con=null;
}
}
lishixnew 2008-05-23
  • 打赏
  • 举报
回复
getStatement(); // 既然每次都关闭,干次每次都重新获得就行了
sql = "insert into " + TableName + "(" + pFieldList + ")values(" + pValueList + ")";
getStatement();

回复上面的回复,为什么要取两次,我这个方法本来一次就可以打开的。


public void getStatement(){
if(sta==null ¦con==null){
try {
con=ds.getConnection();
sta=con.createStatement();
} catch (SQLException e) {
System.out.println("取得连接异常");
e.printStackTrace();
}

我发现当我自己关闭连接之后,在取Connection和Statement时都没有取到似的
老紫竹 2008-05-23
  • 打赏
  • 举报
回复
finally{
close();
}
}


你每次执行save都会关闭那些东西的。所以你的save应该类似下面这样
  public void save(String TableName, String pFieldList, String pValueList) throws SQLException {
try {
getStatement(); // 既然每次都关闭,干次每次都重新获得就行了
sql = "insert into " + TableName + "(" + pFieldList + ")values(" + pValueList + ")";
getStatement();
sta.executeUpdate(sql);
} catch (RuntimeException re) {
throw re;
} finally {
close();
}
}

67,513

社区成员

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

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