Как я могу правильно получить свой набор результатов?
Прошло два дня, так как я не могу двигаться дальше с этой проблемой. Я знаю, что для других это очень просто. Я только начинаю изучать JDBC за 3 месяца.
проблема
- Не удалось получить значение из набора результатов.
- Это дает мне нулевое значение.
Согласно тому, что я прочитал и прокомментировал о моих кодах, хранимая процедура может вернуть набор результатов, но в моем случае это не так. Я не должен перебирать Result Set. Поэтому, если я хочу получить значение, мне нужно вызвать соответствующий метод getXXX() для самого оператора Callable, а не для набора результатов. Поэтому я удалил мой код из блока Result Set и поместил его в блок 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;
Как вы можете видеть здесь, я получаю правильное значение. Но когда я получаю его с помощью Result Set, он дает мне нулевое значение.
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);
}
}
То, что я хочу сделать, если я буду искать существующую запись, будет выглядеть следующим образом.
Спасибо за ваше время, читая мой пост. Любая помощь оценит. Спасибо!:)