如何正确检索结果集?

时间:2016-03-25 09:08:42

标签: java mysql stored-procedures jdbc callable-statement

因为我不能继续解决这个问题已经两天了。我知道其他人这很简单。我刚刚开始学习JDBC 3个月。

问题

  • 无法从结果集中检索值。
  • 它给了我一个空值。

根据我阅读的内容和对我的代码的评论,存储过程可以返回结果集,但我的情况却没有。我不应该遍历结果集。因此,如果我想要检索值,我需要在可调用语句本身上调用适当的getXXX()方法,而不是在结果集上。所以我所做的是从结果集块中删除我的代码并将其放在Callable Statement块上,它给出了一个空值。我无法正确检索我的价值观。

CREATE TABLE allsections_list
(
SECTION_ID INT PRIMARY KEY,
SECTION_NAME VARCHAR(50) NULL
)


DELIMITER @@
DROP PROCEDURE getSECTION_NAME @@
CREATE PROCEDURE enrollmentdb.getSECTION_NAME
(IN myID INT, OUT myName VARCHAR(50))
BEGIN
    SELECT SECTION_NAME INTO myName FROM allsections_list WHERE SECTION_ID = myID; 
END @@ 
DELIMITER ; 

当我尝试通过调用语法检索我的存储过程时。我成功地检索了现有记录。

SET @myID = 9;
CALL getSECTION_NAME(@myID, @myName);
SELECT @myName;

enter image description here

正如您在此处所见,我正在检索正确的值。但是当我使用结果集检索它时,它会给我一个空值。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String searchSection = Section_SearchSection_Textfield.getText();
    String searchSection_Name = Section_SectionName_TextField.getText();
    int sectionID = 0;
    if (searchSection.isEmpty())
    {
        JOptionPane.showMessageDialog(null, "Please fill up this fields");
    }
    else 
        try (Connection myConn = DBUtil.connect();
             CallableStatement myFirstCs = myConn.prepareCall("{call getSECTION_NAME(?,?)}"))
        {

             myFirstCs.setInt(1, sectionID);// I set the ID for Primary Key
             myFirstCs.registerOutParameter(2, Types.VARCHAR);

            boolean hasresults = myFirstCs.execute();

        if (hasresults)
        {
        try (ResultSet myRs = myFirstCs.getResultSet())
        {
            int counter = 0;
            while (myRs.next())
            {
                sectionID = myRs.getInt("SECTION_ID");
                System.out.print(sectionID);
                counter++;
            }//end of while

        }//end of resultset
        }//end of if
                String sectionName = myFirstCs.getString(2);
                Section_SectionName_TextField.setText(sectionName);//Set the value of text
                Section_SectionName_TextField.setEnabled(true);//Set to enable
                System.out.print(sectionName);
        }//end of connection
        catch (SQLException e) 
        {
            DBUtil.processException(e);
        }
}

enter image description here

如果我搜索现有记录,我想要做的就是这样。 enter image description here

感谢您抽出时间阅读我的帖子。任何帮助将不胜感激。谢谢! :)

0 个答案:

没有答案