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

Jack_dun 2009-03-22 09:59:03
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;
}
}
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
anpen123 2012-06-10
  • 打赏
  • 举报
回复
求各路大神指点啊。。。
anpen123 2012-06-10
  • 打赏
  • 举报
回复
我有也这个疑问,到底是为什么呢?
快乐的2 2009-03-23
  • 打赏
  • 举报
回复
我认为应该是编写有问题吧,应该在getQueryResult()中第一行初始化StringBuffer
这样每次返回的结果都是当前数据库执行结果.而不是当第N次执行后StringBuffer内是由多次getQueryResult()的结果的集合.
当然也不否认编写者是为了在两次getQueryResult()之间向数据库中插入了值,为了观察数据库多次执行的变化而这么做,
如果目的是这样那么StringBuffer的初始化方式就能够接受了.
BearKin 2009-03-23
  • 打赏
  • 举报
回复
他的意思是每进行一些特殊的操作的时候(比如更换数据名 或者更换表名)都要重新初始化一下那个STRINGBUFFER

因为StringBuffer是 getQueryResult() 方法返回的结果 所以一但更换表名就意味着 该结果已经过时了 所以他要进行初始化。。。
Study_Work_2009 2009-03-23
  • 打赏
  • 举报
回复
从你的代码来看,应该没那个必要,用一个就够了
Jack_dun 2009-03-23
  • 打赏
  • 举报
回复
这是我们教材上的例子,应该没有错,不只这一个程序是这样的,所有连接数据库的Bean程序的BufferString 类型都是这么初始化的,这就是我不理解的地方.
palm_civet 2009-03-22
  • 打赏
  • 举报
回复
写这个类的人估计想达到一个效果,就是调用一次set方法,再调用getQueryResult返回的结果不会受到上次调用getQueryResult的影响而连续调用两次getQueryResult第二次返回的值是相当于第一次返回值自身拼接一次(在不考虑数据库中数据改变的情况下)

其实我觉得这段程序写错了,因为第二种情况好像没有什么意义

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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