- 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的初始化方式就能够接受了.