简体   繁体   English

带有GUI的Java ResultSet SQL

[英]Java ResultSet SQL with GUI

I'm having a strange problem with the below code, it works fine when its run without the if else statements, but displays no results in the jtable when if else is used. 我在下面的代码中遇到一个奇怪的问题,它在没有if else语句的情况下运行时可以正常工作,但是在使用if else时在jtable中不显示任何结果。 Is there something stupid I'm missing here? 我在这里缺少什么愚蠢的东西吗?

        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();
    }

I'm using netbeans for the GUI. 我将netbeans用于GUI。

Thanks 谢谢

The connection object (con) should be closed outside if/else block. 连接对象(con)应该在if / else块外部关闭。

Beside, the userResult.next() was called twice in the else statement block.. 此外,在else语句块中两次调用了userResult.next()。

You may fix it by replacing while() by do while loop: 您可以通过用do while循环替换while()来修复它:

do {
        dataRows = new Vector();
        for (int j = 1; j < cols; j++) {
            dataRows.addElement(userResult.getString(j));
        }
            dtm.addRow(dataRows);
    }
while (userResult.next());

请最后包括处理关闭连接并删除其他资源的步骤。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM