【发布时间】:2016-07-11 04:23:29
【问题描述】:
我正在尝试查找记录。这让我可以选择使用存储过程在我的数据库中查找现有记录。当我尝试搜索现有数据时,它并没有给我想要的值。当我点击搜索按钮时,它不会将值打印到文本字段。
代码
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())
{
try (CallableStatement myFirstCs = myConn.prepareCall("{call getSECTION_NAME(?,?)}"))
{
myFirstCs.setInt(1, sectionID);// I set the ID for Primary Key
myFirstCs.registerOutParameter(2, Types.VARCHAR);
myFirstCs.setString(2, searchSection_Name);
boolean hasresults = myFirstCs.execute();
if (hasresults)
{
try (ResultSet myRs = myFirstCs.getResultSet())
{
int resultsCounter = 0;
while (myRs.next())
{
sectionID = myRs.getInt("SECTION_ID");
String sectionName = myRs.getString(2);
Section_SectionName_TextField.setText(sectionName);//Set the value of text
Section_SectionName_TextField.setEnabled(true);//Set to enable
resultsCounter++;
}//end of while
}//end of if
}//end of resultset
}//end of callablestatement
}//end of connection
catch (SQLException e)
{
DBUtil.processException(e);
}
}
存储过程
CREATE PROCEDURE getSECTION_NAME(IN ID INT, OUT NAME VARCHAR(50))
SELECT * FROM allsections_list WHERE SECTION_ID = ID AND SECTION_NAME = NAME
表格
CREATE TABLE
(
SECTION_ID INT PRIMARY KEY AUTO_INCREMENT,
SECTION_NAME VARCHAR(50) NOT NULL
)
任何帮助将不胜感激!谢谢!
更新! 根据我阅读的内容,存储过程可以返回一个结果集。我想检索 OUT 参数的值。
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String searchSection = Section_SearchSection_Textfield.getText();
String searchSection_Name = Section_SectionName_TextField.getText();
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())
{
while (myRs.next())
{
sectionID = myRs.getInt("SECTION_ID");
System.out.print(sectionID);
}//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);
}
}
我删除了
String sectionName = myRs.getString(2);
Section_SectionName_TextField.setText(sectionName);
Section_SectionName_TextField.setEnabled(true); 移出 Result Set 块并将其放入 Callable Statement 块中。当我运行程序时。唯一的变化是启用了文本字段并打印了一个“空”值。
第二次更新! 我想返回 OUT 参数的值,我不应该使用 Result Set 来检索它。所以我根据@Gord Thompson 使用了Callable Statement 参数和存储过程的OUT 参数。
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String searchSection = Section_SearchSection_Textfield.getText();
String searchSection_Name = Section_SectionName_TextField.getText();
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, 2);// I set the ID for Primary Key
myFirstCs.registerOutParameter(2, Types.VARCHAR);
myFirstCs.execute();
String sectionName = myFirstCs.getString(2); // retrieve value from OUT parameter
Section_SectionName_TextField.setText(sectionName);//Set the value of text
Section_SectionName_TextField.setEnabled(true);//Set to enable
System.out.println(sectionName);
}//end of connection
catch (SQLException e)
{
DBUtil.processException(e);
}
}
它仍然给我一个空值,我不知道为什么我得到这个值。
对我的 GUI 的唯一更改是启用了文本字段,并且它没有在以下文本字段中打印我想要的值。 :(
感谢您的回复。欢迎发表评论。
【问题讨论】:
-
@SashaSalauyou 嗨!请看我更新的帖子。谢谢:)
-
@SashaSalauyou 当我运行查询并引发错误时。 '结束;'不只显示第 3 行附近的错误。谢谢。
-
顺便说一下,您的 Java 代码示例肯定不完整,因为它以“else”开头而没有“if”。它在代码中间结束。这样,很难帮助你。请至少提供完整的方法,如果不是整个类的源代码。
-
@LarsGendner 我刚刚剪切了我的源代码。感谢您的回复。请看我更新的帖子。我已经发布了整个代码。再次感谢。
标签: java mysql stored-procedures jdbc callable-statement