【发布时间】:2016-12-05 16:04:29
【问题描述】:
我正在尝试从 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)
我的代码输出在这里显示
我得到了 SQL 命令的输出,但是在 JDBC 中我得到了,SQLException 说
参数1不是输出参数
我知道参数 1 已被用作 jdbc 代码中函数返回值的占位符。在 prepareCall 中,我也尝试了语法 - {?:= call getBalance1(?)} ,但即使这样也得到了相同的异常。
为什么会出现异常?
【问题讨论】:
-
快速猜测是 cs.getString("1");
标签: java mysql jdbc stored-functions callable-statement