栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何为本地查询设置String []参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何为本地查询设置String []参数?

通过将String
[]类型的Java数组传递给您进行测试,以进行测试

PreparedStatement.setObject(...)
。似乎PgJDBC不接受Java数组作为
PreparedStatement.setObject()
带有或不带有
Types.ARRAY
参数的参数。

合规

JDBC规范 16.5“数组对象” 建议JDBC

Array
部分存在,因此客户端不必将大数组复制到内存中,可以将其用作引用。我不太确定是否需要JDBC驱动程序才能接受原始Java数组作为参数。所有规范代码都引用了
java.sql.Array
该规范,并且该规范明确指出,数组是通过
Array
附录B和其他地方的接口映射的。在快速搜索/阅读中,除了作为参数或作为结果返回之外,我
没有 提到传递原始Java数组
byte[]


但是,在§16.5.4中,JDBC4.2规范草案如下:

A Java array may be passed as an input parameter by calling the methodPreparedSatement.setObject.

尽管那里的所有其余代码都指向

Array
对象。它们的意思
Array
是“ Java数组”吗?还是它们意味着原始的原生Java数组
String[]

在我看来,客户端应该通过使用

java.sql.Array
接口
Connection.createArrayOf(...)
,因此Eclipselink可能做错了事。

该怎么办

尝试将Eclipselink更新为2.4,希望它使用通过java.sql.Array对象将数组传递给JDBC的常用方法。

您可能还需要使用

@Array
Eclipselink扩展名对映射进行注释。另请参见此论坛线程re
2.3和bug
361701。

看来您可能必须为Eclipselink实现自己的类型处理程序,才能覆盖其行为。要通过PgJDBC正确设置数组参数,您必须使用:

    Array sqlArray = conn.createArrayOf("text", strArray);    pstmt.setArray(1, sqlArray);    pstmt.executeUpdate();

…其中

conn
pstmt
分别是a
java.sql.Connection
和a
PreparedStatement
,并且
strArray
是一个
String[]
实例。

请参阅eclipselink
Wiki中的“定制数据类型”。

另外,

createArrayOf
鉴于存在,使用字符串类型名称来指定数组的数据类型似乎有点疯狂
java.sql.Types
。它使可移植性变得更加困难。上面的代码无法在(例如)Oracle上运行,因为Oracle不想
VARCHAR
将其
text
用作类型名称。


注意:单元测试

org/postgresql/test/jdbc2/ArrayTest.java
具有
ArrayTest.testSetArray()
,在第166行进行测试:

    pstmt.setObject(1, arr);    pstmt.executeUpdate();

… …但是类型

arr
java.sql.Array
,没有
int[]
。这是JDBC数组类型,而不是常规Java数组。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号