调用javabean( fenzu.adduser)向数据库插值,插值成功后,如何关闭数据库连接?
在JSP页面中调用了javabean( fenzu.adduser)。大家看一下代码:jsp提交页面:
---------------------------------------------<% response.setHeader("Expires","0"); %> 
<!--生成一个JavaBean:lyf.adduser的实例,id为adduser,生存范围为page--> 
<jsp:useBean id="adduser" class="fenzu.adduser" scope="page"/>    -----------》调用的javabean( fenzu.adduser)
<jsp:setProperty name="adduser" property="*"/> 
<html> 
<head> 
<title>用户添加</title> 
</head> 
<body bgcolor="#FFFFFF"> 
<div align="center"><center> 
<% 
//调用lyf.adduser的checkUser()方法检查是否有重复的用户名 
if(!adduser.checkUser()) 

out.println("对不起,这个组"+adduser.getUsername()+"已经被创建了!"); 
return; 

%> 
<% 
if(adduser.addNewUser()){ 
%> 
<H2><font size="2">添加新组成功!</font></P> 
<font size="2"> 
<%}else{%> 
</font> 
<H2><font size="2">添加组失败!</font></P> 
<%                                             ------------》在此处或者其他位置如何关闭数据库?
}
%> 
</BODY> 
</HTML>
--------------------------------------------------------调用的javabean( fenzu.adduser)
--------------------------------------------------------
package fenzu;
import java.sql.*; 
import java.lang.*; 
import java.util.Date;
//adduser由db派生出来,拥有db的成员变量和方法 
 public class adduser extends db { 
//构建器 
 public boolean addNewUser(){ 
 boolean boadduser=false; 
 try { 
//进行用户注册的记录添加操作,生成sql语句 
  String sSql=new String("insert into fenzu(username,unit)"); 
  sSql=sSql+ " values('"+Username+"','"+Unit+"')"; 
//调用父类的executeUpdate方法,并根据成功以否来设置返回值 
  if(super.executeUpdate(sSql))boadduser=true; 
  } 
 catch(Exception ex) { 
//出错处理 
 }finally{ 
//无论是否出错,都要返回值 
 return boadduser; 
 } 

//checkUser()方法用来检查用户名是否重复 //如果重复返回一个false 
 public boolean checkUser(){ 
  boolean boadduser=false; 
  try { 
//构建sql查询语句 
   String sSql="select * from fenzu where username='"+Username+"' and unit='"+Unit+"'";
//调用父类的executeQuery方法 
   if((super.executeQuery(sSql)).next()){ 
//查询出来的记录集为空 
   boadduser=false; 
   }else{ 
    boadduser=true; 
   } 
  } 
  catch(Exception ex) { 
//出错处理 
  }finally{ 
//返回值 
   return boadduser; 
  } 
 } 
 public String getUsername(){ return Username;} 
 public void setUsername(String newUsername){ 
//如果是中文,需要进行转换 
  Username = newUsername;} 
  public String getUnit(){ 
  return Unit;} 
  public void setUnit(String newUnit){ Unit = newUnit;} } 
--------------------------------------------------------javabean( fenzu.db)
--------------------------------------------------------
package fenzu;
import java.net.*; 
import java.sql.*; 
import java.lang.*; 
import java.io.*; 
import java.util.*; 
public class db { 
Connection conn = null;  
ResultSet rs = null;  
String Username=""; 
String Unit=""; 
String url="jdbc:mysql://localhost:3306/dstore";
public db() { 
 try { 
  String name="org.gjt.mm.mysql.Driver";
  Class.forName(name); 
  conn = DriverManager.getConnection(url,"root","root");
  } 
 catch(Exception e) { 
 } 
 } 
 public ResultSet executeQuery(String sql) { 
  rs = null; 
  try { 
  Statement stmt = conn.createStatement(); 
  rs = stmt.executeQuery(sql); 
  } 
  catch(SQLException ex) { 
  
  } 
  return rs; 
 } 
//executeUpdate方法用于进行add或者update记录的操作 
 public boolean executeUpdate(String sql) { 
  boolean bupdate=false; 
  rs = null; 
  try { 
  
  Statement stmt = conn.createStatement(); 
  int rowCount = stmt.executeUpdate(sql); 
  if(rowCount!=0)bupdate=true; 
  } 
  catch(SQLException ex) { 
  
  } 
 return bupdate; 
 } //否则将会是???这样的字符串 
 public static String toChinese(String strvalue) { 
  try{ 
   if(strvalue==null) 
  { 
  return null; 
  } 
  else { 
   strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); 
   return strvalue; 
  } 
  }catch(Exception e){ 
   return null; 
  } 
 } 
public boolean closeConn() { //关闭数据库的链接try { 
if (conn!=null) conn.close(); 
return true; 

catch ( SQLException ex ) 
{ return false; 
} } 
}--------------------------------------------------------

解决方案 »

  1.   

    请帮忙,插值成功后,关闭数据库连接的代码,怎么写?写在什么地方(写在javabean( fenzu.adduser)
    里?还是调用javabean( fenzu.DB)中的关闭数据库,如何调用呢?)
      

  2.   

    在你的父类中写上关闭连接的方法public static void closeConnection(Connection conn){
        if(conn!=null){
             try {
    conn.close();
    } catch (Exception e) {
    System.out.println("Connection 关闭失败");
    }
        }
    }如果有用到ReSultSet,PreparedStatement,Statement对象的话,方法也都类似
    放在你父类的查询,增加,修改,删除那些方法的finally下。
      

  3.   

    麻烦你看一下我上面的代码。我是在JSP中调用的adduser类,adduser类中引用了db类(连接数据库的),在db类中有一个关闭连接数据库的方法,但是我在JSP中引用的是adduser类,就不知道怎么调用DB类中的关闭数据库的程序了。如果我在jsp中引用<jsp:useBean id="adduser" class="fenzu.db" scope="page"/>我在JSP执行完查询,增加,修改,删除后使用db.closeConn();就可以关闭数据库连接,但是我现在引用的是class="fenzu.adduser"就不知道怎么关闭连接了. 请指教
      

  4.   

    //无论是否出错,都要返回值 
    super.closeConn();
     return boadduser;  SQL语句可以被别人注入的。好好学学理解MVC结构。最好看看视频。