0

我有一个非常简单的 java 应用程序,旨在进入数据库并根据 java 表单上的输入提取结果集。但是,添加到 SQL 语句中的任何参数都以丢失记录集中的最终记录而结束(尽管它似乎确实提取了正确的结果。)

下面的代码生成了我的整个数据集,顶部有示例(如预期的那样。)

Name|Location|Details
A|Here|7854
A|There|7854
B|Here|8761
C|Gone|5312

public void actionPerformed(ActionEvent e) {

try {
     String url = "jdbc:sqlserver://localhost:1433;DatabaseName=$DBname;user=$user;password=$password";
     String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
     Class.forName(driver).newInstance();
     Connection dbconn = DriverManager.getConnection(url);
     Statement stmt = dbconn.createStatement();
     ResultSet rs;
     rs = stmt.executeQuery("SELECT * from schema.table");
     tblServers.setModel(buildTableModel(rs));
     dbconn.close();
 } catch (Exception f) {
     System.err.println("Downloading Servers from the Database Failed! ");
     System.err.println(f.getMessage());
 }  

}

private DefaultTableModel buildTableModel(ResultSet rs) throws SQLException {

ResultSetMetaData rsmetaData = rs.getMetaData();

//Get Column Names
int numCols = rsmetaData.getColumnCount();
Vector<String> columnNames = new Vector<String>();
for (int column = 1; column <= numCols; column++) {
    columnNames.add(rsmetaData.getColumnName(column));
}                   
//Iterate through rows
Vector<Object> data = new Vector<Object>();
while (rs.next()) {
    Vector<Object> rows = new Vector<Object>();
    for (int colIndex = 1; colIndex <= numCols ; colIndex++) {
        rows.add(rs.getObject(colIndex));
    }
    data.add(rows);
}
return new DefaultTableModel(data, columnNames);
}
            }

);

现在,如果我只将 SQL 行更改为带有“where”子句的任何变体,例如:

rs = stmt.executeQuery("SELECT * from schema.table where name = 'A'");

我得到:

Name|Location|Details
A|Here|7854

或者如果搜索 B,我没有得到任何结果:

Name|Location|Details
|||

任何想法表示赞赏;我确信这是非常简单的事情。

@Sasha:是的,我确定我会得到 1 个结果。我尝试了许多排列,它总是导致空白结果集(但具有准确的标题)或标题和结果集减去最后一行。

@PM77-1:只要代码吐出返回(数据,列名),我的 JTable 就会对用户显示结果集。

@Glenn:根据您的建议,我在“返回新的 DefaultTableModel”之前添加了 System.out.println(data) 和 'System.out.println(rs)'。输出分别为 [] 和 SQLServerResultSet:1

@JohnnyAW 带有 where 子句的结果与我上面的评论相同 - 系统日志中没有出现“测试”。当我删除 where 子句时,我会得到一堆以“test”开头的系统日志条目。

更正:我得到 8 个测试的总和,即我的整个测试记录集的“testtesttest”。当我有 Where 子句时,会错过一项测试。

4

0 回答 0