gpt4 book ai didi

java - JDBC 代码调用返回值的存储函数时出错

转载 作者:行者123 更新时间:2023-11-29 01:52:10 26 4
gpt4 key购买 nike

我正在尝试从 JDBC 代码打印 MySQL 存储的 函数 的返回值,如下所示(我使用的是 MySQL Server 5.7.13):

package jdbc;

import java.sql.DriverManager;
import java.sql.*;
import java.util.Scanner;


public class CallableStatementsCallingFunctions {
public static void main(String... syrt)
{
try
{
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
System.out.println("Error(class): "+ e);
}
try
{
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/collablestatement","root","mysql") ;
CallableStatement cs = conn.prepareCall("{call ?:=getBalance1(?)}");
String s = new Scanner(System.in).nextLine();
cs.registerOutParameter(1,Types.INTEGER);
cs.setInt(2,Integer.parseInt(s));
cs.execute();
System.out.println("Account number :" + cs.getInt(1));
conn.close();
}
catch(SQLException e)
{
System.out.println("Error(SQL) : "+e);
}
}
catch(Exception e)
{
System.out.println("Error(Fro outer try) : "+ e);
}
}

此处显示了存储函数 getBalance1(acno)

getBalance(acno numeric)

我的代码输出显示在这里

jdbc output

我正在从 SQL 命令获取输出,但在 JDBC 中我正在获取并且 SQLException 表示

parameter 1 is not an output parameter

我知道参数 1 在 jdbc 代码中被用作函数返回值的占位符。在 prepareCall 中,我还尝试了语法 - {?:= call getBalance1(?)} ,但即便如此也得到了相同的异常。

为什么我得到异常?

最佳答案

我想我得到了 SQLException,因为我使用的是 jdk1.8.xx,其中调用存储函数的语法不同。问题已通过替换语句解决

CallableStatement cs = conn.prepareCall("{call ?:=getBalance1(?)}");

在代码中

CallableStatement cs = conn.prepareCall("{? = call getBalance1(?)}");

在prepareCall()方法中调用函数作为参数的语法是here .

关于java - JDBC 代码调用返回值的存储函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com