日期:2014-05-17  浏览次数:20736 次

一个连接数据库的Bean程序为什么在每一个set方法里面都要声明StringBuffer类型的变量?
Java code
package database.operation;
import java.sql.*;
public class QueryBean
{   String databaseName="";        //数据库名
    String tableName="";           //表名
    String user=""       ;         //用户
    String secret="" ;            //密码 
    StringBuffer queryResult;     //查询结果
    public QueryBean()
    {  queryResult=new StringBuffer();
       try{  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          }
       catch(Exception e) {} 
    }
    public void setDatabaseName(String s)
    {  databaseName=s.trim();
       queryResult=new StringBuffer();  //这里声明了
    }
    public String getDatabaseName()
    {  return databaseName;
    }
    public void setTableName(String s)
    {  tableName=s.trim();
       queryResult=new StringBuffer();  //这里又声明了
    }
    public String getTableName()
    {  return tableName;
    }
    public void setSecret(String s)
    {  secret=s.trim();
       queryResult=new StringBuffer();   //这里又声明了
    }
    public String getSecret()
    {  return secret;
    }
    public void setUser(String s)
    {  user=s.trim();
       queryResult=new StringBuffer();          //这里又声明了
    }
    public String getUser()
    {  return user;
    } 
    public StringBuffer getQueryResult()
    {  Connection con;
       Statement sql; 
       ResultSet rs;
      try { queryResult.append("<table border=1>"); 
            String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
            String id=user;
            String password=secret;
            con=DriverManager.getConnection(uri,id,password);
            DatabaseMetaData metadata=con.getMetaData();
            ResultSet rs1=metadata.getColumns(null,null,tableName,null);
            int 字段个数=0;
            queryResult.append("<tr>");
            while(rs1.next())
             { 字段个数++;
               String clumnName=rs1.getString(4);
               queryResult.append("<td>"+clumnName+"</td>");
             }
            queryResult.append("</tr>");
            sql=con.createStatement();
            rs=sql.executeQuery("SELECT * FROM "+tableName);
            while(rs.next())
            {  queryResult.append("<tr>");
               for(int k=1;k<=字段个数;k++) 
                {  queryResult.append("<td>"+rs.getString(k)+"</td>");
                }
               queryResult.append("</tr>");
            }
            queryResult.append("</table>");
            con.close();
           }
       catch(SQLException e)
          {  queryResult.append("请输入正确的用户名和密码");
          }
       return queryResult;
   }    
}     



------解决方案--------------------
他的意思是每进行一些特殊的操作的时候(比如更换数据名 或者更换表名)都要重新初始化一下那个STRINGBUFFER

因为StringBuffer是 getQueryResult() 方法返回的结果 所以一但更换表名就意味着 该结果已经过时了 所以他要进行初始化。。。

------解决方案--------------------
我认为应该是编写有问题吧,应该在getQueryResult()中第一行初始化StringBuffer
这样每次返回的结果都是当前数据库执行结果.而不是当第N次执行后StringBuffer内是由多次getQueryResult()的结果的集合.
当然也不否认编写者是为了在两次getQueryResult()之间向数据库中插入了值,为了观察数据库多次执行的变化而这么做,
如果目的是这样那么StringBuffer的初始化方式就能够接受了.