您的位置:程序门 -> java -> web 开发



问题太奇怪了,以前居然没发现,奉上100分,请高人给解释解释,我该怎么做


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


问题太奇怪了,以前居然没发现,奉上100分,请高人给解释解释,我该怎么做
发表于:2007-10-27 13:14:24 楼主

操作数据库的类   database.java   所有的类都是基于些类操作

package   cn.com.util;
import   java.sql.*;
public   class   database  
{
public   connection   conn=null;
public   database()throws   exception
{
string   url   ="jdbc:mysql://localhost:3306/gelou?user=root&password=130411&useunicode=true&characterencoding=utf-8";
class.forname("org.gjt.mm.mysql.driver").newinstance();
conn=drivermanager.getconnection(url);
}
/*打开并返回一个数据库连接*/
public   connection   getconnection()throws   exception  
{

return   conn;
}
    /*返回resultset*/
public   resultset   EXECutequery(string   rs_sql)throws   exception
{
resultset   rs=null;
try  
{
preparedstatement   pstmt   =conn.preparestatement(rs_sql);
rs   =   pstmt.EXECutequery();
}
catch   (exception   ex)
{
system.err.println("sql_data.EXECutequery:"   +   ex.getmessage());
}
return   rs;
}
    /*插入数据*/
public   boolean   EXECuteinsert(string   insert_sql)throws   exception
{
preparedstatement   pstmt   =conn.preparestatement(insert_sql);
try
{
pstmt.EXECuteupdate();

pstmt.close();
conn.close();
return   true;
}
catch   (exception   ex)
{
system.err.println(ex.getmessage());
pstmt.close();
conn.close();
return   false;
}
}
//更新数据库数据
public   boolean   EXECuteupdate(string   update_sql)throws   exception
{
preparedstatement   pstmt   =conn.preparestatement(update_sql);
try   {
pstmt.EXECuteupdate();
pstmt.close();
conn.close();
return   true;

}
catch   (exception   ex)  
{
system.err.println("aq.EXECutequery:   "   +   ex.getmessage());
pstmt.close();
conn.close();
return   false;
}
}
//检测数据库中的数据是否存在

public   boolean   booldata(string   bool_sql)throws   exception
{
preparedstatement   pstmt   =conn.preparestatement(bool_sql);
boolean   bool=false;
resultset   rs=null;
try  
{
rs   =   pstmt.EXECutequery();
if(rs.next())
{
bool=true;
}
else
{
bool=false;
}

}
catch   (exception   ex)
{
system.err.println("sql_data.EXECutequery:"   +   ex.getmessage());
bool=true;
}
rs.close();
pstmt.close();
conn.close();
return   bool;
}
}

                #############################################################
                下面是我在servlet或jsp中调用database.java的代码
                    database   db=new   database();
  string   selectsql;
  string   insertsql;
                  boolean   bool=true;
                  selectsql="select   sortname   from   sorts   where   sortname='"+sortname+"'";
                  insertsql   =   "insert   into   sorts(sortname)values('"+   sortname   +   "')";
  bool=db.booldata(selectsql);
                  if(bool)
                    {
                      out.println("数据库中以存在该类,不能添加");
      return;
                    }
                    else
                  {
                  db.EXECuteinsert(insertsql);
                    }
               
                  当第一次操作数据库就是   bool=db.booldata(selectsql);是成功的,但是插入数据时
                      db.EXECuteinsert(insertsql);出现如下异常  


                      com.mysql.jdbc.exceptions.mysqlnontransientconnectionexception:   no   operations   allowed   after   connection   closed.  

                     
##########################################
          不知如何是好


发表于:2007-10-27 13:55:331楼 得分:0
public   boolean   booldata(string   bool_sql)throws   exception  
{  
preparedstatement   pstmt   =conn.preparestatement(bool_sql);  
boolean   bool=false;  
resultset   rs=null;  
try    
{  
rs   =   pstmt.EXECutequery();  
if(rs.next())  
{  
bool=true;  
}  
else  
{  
bool=false;  
}  

}  
catch   (exception   ex)  
{  
system.err.println("sql_data.EXECutequery:"   +   ex.getmessage());  
bool=true;  
}  
rs.close();  
pstmt.close();  
conn.close();   //这里,你已经把数据库连接关闭,下次调用,除非你重新连接,否则就出错了
return   bool;  
}  
}  
发表于:2007-10-27 13:57:312楼 得分:0
你第一次换做插入试试,

你在第一次之后就关闭了conn,导致后面的操作不再存在conn对象

建议应该在EXECuteupdate和EXECuteinsert以及EXECutequery这三个方法中取得连接!
使用完毕后再关闭
发表于:2007-10-27 14:02:033楼 得分:0
调试一下,看看public   boolean   EXECuteinsert(string   insert_sql)throws   exception   中的pstmt.EXECuteupdate();   是否已经把conn关闭了!
发表于:2007-10-27 14:03:464楼 得分:0
我错了!!!呵呵。qybao正解
发表于:2007-10-27 14:07:185楼 得分:0

只做插入没问题,如果重新调用话,难道要重新new   一个database不成
发表于:2007-10-27 16:11:596楼 得分:0
大哥,你在bool=db.booldata(selectsql);  
后就将连接给关了,再执行,都没conn了,还怎么能用呢?
发表于:2007-10-28 00:46:067楼 得分:0
呵呵
发表于:2007-10-28 01:00:548楼 得分:0
链接已经关闭了~



快速检索

最新资讯
热门点击