我有一个非常简单的 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 子句时,会错过一项测试。