【问题标题】:Java ResultSet SQL with GUI带有 GUI 的 Java ResultSet SQL
【发布时间】:2012-12-08 00:42:47
【问题描述】:

我对下面的代码有一个奇怪的问题,它在没有 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();
    }

我正在为 GUI 使用 netbeans。

谢谢

【问题讨论】:

    标签: java swing user-interface jtable resultset


    【解决方案1】:

    连接对象 (con) 应该在 if/else 块之外关闭。

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

    您可以通过将 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());
    

    【讨论】:

    • 感谢回复,还是不行。这是该方法的示例,您知道出了什么问题吗?它实际上正确显示了列标题,但单元格中没有内容。肯定有要显示的内容,并且没有 if /else 块pastebin.com/RHYpGEAg 可以正常工作
    【解决方案2】:

    请包含 finally 以处理关闭连接和删除其他资源。

    【讨论】:

    • 感谢您的回复,仍然无法正常工作,并且最终包含了块。这是该方法的示例,您知道出了什么问题吗?它实际上正确显示了列标题,但单元格中没有内容。肯定有要显示的内容,并且没有 if /else 块 pastebin.com/RHYpGEAg 可以正常工作
    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多