gpt4 book ai didi

java - jdbc的registerOutParameter中的sqlType是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 07:44:13 25 4
gpt4 key购买 nike

我正在使用 jdbc CallableStatement 在 MySQL 数据库中执行程序。在编写单元测试时,我遇到了关于 registerOutParameter 方法的奇怪行为。

使用的 SQL 过程

PROCEDURE TEST_DOUBLE( OUT val DOUBLE ) BEGIN SET val = 2.5; END
PROCEDURE TEST_TEXT( OUT val TEXT ) BEGIN SET val = 'test'; END

测试

statement = connection.prepareCall( "CALL TEST_DOUBLE(?)" );
statement.registerOutParameter( "val" , java.sql.Types.INTEGER );
statement.execute();
statement.getInt( "val" ); //Integer 2
statement.getDouble( "val" ); //Double 2.5
statement.getString( "val" ); //String "2.5"

statement = connection.prepareCall( "CALL TEST_TEXT(?)" );
statement.registerOutParameter( "val" , java.sql.Types.INTEGER );
statement.execute();
statement.getInt( "val" ); //Invalid value for getInt
statement.getDouble( "val" ); //Invalid value for getDouble
statement.getString( "val" ); //String "test"

statement = connection.prepareCall( "CALL TEST_TEXT(?)" );
statement.registerOutParameter( "val" , 0 );
statement.execute();
statement.getInt( "val" ); //Invalid value for getInt
statement.getDouble( "val" ); //Invalid value for getDouble
statement.getString( "val" ); //String "test"

等等……

我的观点是 - 传递给 registerOutParameter 的值 java.sql.Types.* 似乎什么都不做......无论我传递什么 sql 类型,一切都取决于调用正确的 getter 方法和数据库返回的实际值。

我可以在所有地方都传递 0 并且它无论如何都能正常工作吗?那为什么要传递这个参数呢?或者这个数据库是否相关,对于其他数据库是否有意义?

最佳答案

我猜这个参数是数据库相关的。 Oracle 当然会关注它:

statement = connection.prepareCall("CALL_TEST_NUMBER(?)");
statement.registerOutParameter("val", java.sql.Types.INTEGER);
statement.execute();
statement.getInt("val"); // 2
statement.getDouble("val"); // 2.5
statement.getString("val"); // "2.5"

statement = connection.prepareCall("CALL TEST_TEXT(?)");
statement.registerOutParameter("val", java.sql.Types.INTEGER);
statement.execute(); // java.sql.SQLSyntaxErrorException: ORA-01722: invalid number

关于java - jdbc的registerOutParameter中的sqlType是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244151/

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