2

我正在使用准备好的语句将数组插入到我的数据库中

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(stringArray) VALUES (?)");
String[] arr = { "a", " b", "c" };
pstmt.setObject(1, arr);

我按照示例使用 setObject ,但 setArray 无法解析,并且 setBlob 也不起作用。

现在,当我阅读它时,我不确定如何处理我的对象以获取数组值!

PreparedStatement pstmt = conn.prepareStatement("SELECT stringArray FROM TABLE WHERE id = 1");
ResultSet rs = pstmt.executeQuery();
rs.next();
Object object = rs.getObject(1);
System.out.println(object.toString());

只是输出

[B@45d0e784

我知道我正在做 object.toString 并且我想要一个数组,但我该怎么做呢?插入时是否需要将其设置为字节或其他内容?

谢谢你的帮助

4

2 回答 2

2

PreparedStatement#setArray方法java.sql.Array作为参数。尝试 -

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(stringArray) VALUES (?)");
String[] arr = { "a", " b", "c" };
Array a = conn.createArrayOf("marksArray", arr);
pstmt.setArray(1, arr);

注意 -

JDBC 驱动程序负责将元素 Object 数组映射到在 java.sql.Types 中为给定的 Object 类定义的默认 JDBC SQL 类型。默认映射在 JDBC 规范的附录 B 中指定。如果生成的 JDBC 类型不是给定 typeName 的适当类型,则由实现定义是否抛出 SQLException 或驱动程序支持生成的转换。

于 2013-01-28T18:09:37.423 回答
0

我无法让 setArray 函数工作,每次都会出错。因此,我决定实现自己的序列化。

我使用 for 循环创建了一个字符串,其中包含我用逗号分隔的字符串。然后,当我从数据库中检索该行时,我用逗号分隔,我的数组被重新形成。

我猜在准备好的语句中使用的序列化对于用户定义的对象更有用,但对于我的字符串数组来说,这不值得费心。

于 2013-01-29T17:49:32.490 回答