当前位置: 代码迷 >> Java Web开发 >> 一个连接数据库的Bean程序为什么在每一个set方法里面都要声明StringBuffer类型的变量?该怎么处理
  详细解决方案

一个连接数据库的Bean程序为什么在每一个set方法里面都要声明StringBuffer类型的变量?该怎么处理

热度:2240   发布时间:2013-02-25 21:18:21.0
一个连接数据库的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的初始化方式就能够接受了.
  相关解决方案