- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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/
我有一个如下形式的 SQL 语句: BEGIN\n UPDATE tab SET stuff WHERE stuff RETURNING intA, intB, stringC INTO ?,?,?
我正在遵循有关可调用语句的指南。 在本指南中,它说我需要使用以下语句注册 out 参数: callsts.registerOutParameter(2, java.sql.Types.VARCHAR)
此代码给出“错误设置或注册参数”SQLException。有人可以帮忙吗? OracleConnection conn = getAppConnection(); String q = "BEGIN
任何人都知道如何将“SQL 结构化类型的完全限定名称”作为参数传递给 this function : public void registerOutParameter(int paramIndex,
在 Oracle 10g/11g 中有一个存储过程,如下所示: CREATE OR REPLACE PROCEDURE SP_SOME_PROC ( PRM_ID IN NUMBER , START
亲爱的 stackoverflow 社区 我正在尝试将使用 JAVA 开发的系统从使用 oracle DB 升级到 mysql DB。 我已经到了使用存储过程的地步,java 代码使用特定的 orac
我是一名优秀的程序员,十分优秀!