如何从存储过程返回结果集?

时间:2016-03-17 16:33:27

标签: java stored-procedures jdbc derby

我创建了一个存储过程,我可以在其中获取我在以下文本字段中插入的所有数据。如何通过调用可调用语句来获取所有这些数据?我认为这是基于我阅读内容的Batch Statement最简单的方法。我只是为了实践目的而拖放以下组件。

存储过程

CREATE PROCEDURE show_data(OUT FULLNAME VARCHAR(50), OUT ADDRESS VARCHAR(50))
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
DYNAMIC RESULT SETS 1
EXTERNAL NAME 'Frame.searchButton'

我使用OUT参数使用getXXX()方法检索值。我有点混淆,因为这是我第一次在德比中使用存储过程。

GUI

enter image description here

用户在数据库中搜索以下记录后。如果值存在,它将打印到指定的文本字段。

消息来源

    String searchRecord = searchTf.getText();

    String searchQuery = "SELECT * FROM SAMPLEONLY";
    ResultSet data[] = null;//Why should I use this array?

    try (Connection myConn = DriverManager.getConnection(url, user, pass);
        PreparedStatement myPs = myConn.prepareStatement(searchQuery);)
        {
            String addFullname = fullnameTf.getText();//first field
            String addAddress = addressTf.getText();//second field

            data[0] = myPs.executeQuery();

            CallableStatement cs = myConn.prepareCall("{ call showData(?, ?)}");

            cs.setString(1, addFullname);
            cs.setString(2, addAddress);

            boolean hasResults = cs.execute();
            if (hasResults) {
            ResultSet rs = cs.getResultSet();
            while (rs.next()) {
                String getFullname = rs.getString(1);//get the value
                String getAddress = rs.getString(2);

                fullnameTf.setText(getFullname);//set the text here
                addressTf.setText(getAddress);  
            }//end of while
            rs.close();//close the resultset
        }//end of if
    }//end of try
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
    }//end of else
}

在“搜索”文本字段中插入后,它会向我抛出错误NullPointerExeption。我遵循德比参考手册,因此我可以让指南编写正确的存储过程。这段代码是我的大部分内容。如果我错过了什么错误,请引导我。随意评论谢谢。

0 个答案:

没有答案