带GUI的Java结果集SQL

带GUI的Java结果集SQL,java,swing,user-interface,jtable,resultset,Java,Swing,User Interface,Jtable,Resultset,我对下面的代码有一个奇怪的问题,当它在没有if-else语句的情况下运行时可以正常工作,但是当使用if-else时在jtable中不显示结果。有什么愚蠢的东西我错过了吗 try { Class.forName(dbClass); Connection con = DriverManager.getConnection (dbUrl,dbUsername, dbPassword); Statement stmt = con.creat

我对下面的代码有一个奇怪的问题,当它在没有if-else语句的情况下运行时可以正常工作,但是当使用if-else时在jtable中不显示结果。有什么愚蠢的东西我错过了吗

        try {
        Class.forName(dbClass);
        Connection con = DriverManager.getConnection (dbUrl,dbUsername, dbPassword);
        Statement stmt = con.createStatement();

        String userQuery = "SELECT p_id AS 'Patient ID', forename AS 'Forename', surname AS 'Surname', address AS 'Address' FROM Patient WHERE surname LIKE '%"+s+"%'";
        ResultSet userResult = stmt.executeQuery(userQuery);

        if(!userResult.next())
        {
            JOptionPane.showMessageDialog(null, "No Results.");
        {
        else{
        ResultSetMetaData rsMetaData =userResult.getMetaData();
        DefaultTableModel dtm = new DefaultTableModel();
        int cols = rsMetaData.getColumnCount();
        Vector colName = new Vector();
        Vector dataRows = new Vector();

        for (int i=1; i<cols; i++){
        colName.addElement(rsMetaData.getColumnName(i));
        }
        dtm.setColumnIdentifiers(colName);

        while(userResult.next()){
            dataRows = new Vector();
            for(int j = 1; j<cols; j++){
                dataRows.addElement(userResult.getString(j));
            }
            dtm.addRow(dataRows);
        }
        searchTable.setModel(dtm);
        con.close();
        }
    } //end try

    catch(ClassNotFoundException e) {
        JOptionPane.showMessageDialog(null, "Database Error.");
        e.printStackTrace();
    }

    catch(SQLException e) {
        JOptionPane.showMessageDialog(null, "Database Error.");
        e.printStackTrace();
    }
试试看{
类forName(dbClass);
Connection con=DriverManager.getConnection(dbUrl、dbUsername、dbPassword);
语句stmt=con.createStatement();
String userQuery=“从患者中选择p_id作为‘患者id’,名字作为‘名字’,姓氏作为‘姓氏’,地址作为‘地址’,姓氏类似“%”“+s+“%””;
ResultSet userResult=stmt.executeQuery(userQuery);
如果(!userResult.next())
{
showMessageDialog(null,“无结果”);
{
否则{
ResultSetMetaData rsMetaData=userResult.getMetaData();
DefaultTableModel dtm=新的DefaultTableModel();
int cols=rsMetaData.getColumnCount();
向量colName=新向量();
向量数据行=新向量();
对于(int i=1;i连接对象(con)应在if/else块外关闭

此外,在else语句块中调用了两次userResult.next()

您可以通过将while()替换为do while循环来修复它:

do {
        dataRows = new Vector();
        for (int j = 1; j < cols; j++) {
            dataRows.addElement(userResult.getString(j));
        }
            dtm.addRow(dataRows);
    }
while (userResult.next());
do{
dataRows=新向量();
对于(int j=1;j
请最后包括处理关闭连接和删除其他资源的步骤。

感谢您的回复,仍然不起作用。下面是该方法的示例,您知道出了什么问题吗?它实际上正确显示了列标题,但单元格中没有内容。肯定有内容要显示,并且它可以与但是if/else块谢谢你的回复,仍然不起作用,Finnaly块也包括在内。这是一个方法示例,你知道哪里出了问题吗?它实际上正确显示了列标题,但单元格中没有内容。肯定有内容要显示,没有if/else块pastebin.com/RHYpGEAg,它也可以正常工作