【发布时间】:2017-03-12 04:09:53
【问题描述】:
我正在开发一个应用程序,它让 java 代码调用 postgres 存储过程(它返回一个 JSON 字符串)。
create or replace function get_nsx_all() returns text as
$$
begin
return array_to_json(array_agg("nguoi.nhaSanXuat")) from "nguoi.nhaSanXuat";
end
$$
LANGUAGE 'plpgsql';
但是,当我使用这个通过 JDBC 调用函数时:
public static void getAllNSX() throws SQLException
{
connection = DB.getConnection();
CallableStatement statement = connection.prepareCall("{ ? = call get_nsx_all() }");
statement.registerOutParameter(1, Types.VARCHAR);
statement.execute();
String x = statement.getString(1);
System.out.println(x);
}
我只有这个:
我想知道我做错了什么以及如何将完整的 JSON 字符串发送到我的应用程序。
谢谢!
【问题讨论】:
-
截图的主要问题是我们无法看到和复制/粘贴实际字符,所以我不得不问:
sadfs后面的空格是什么?第一个屏幕截图显示"sadfs "(s和结尾"之间的空格),但如果这不是真正的空格(unicode\u0020),那么它可能是导致字符串显示失败的原因。您是否尝试打印字符串长度,即x.length()?注意所有你的值是如何有尾随“空格”的。 -
除此之外,您还可以
SELECT astring::bytea::text获取十六进制字节。 -
您好安德烈亚斯,感谢您的评论。正如您所建议的,我将 pgAdmin 的 JSON 代码粘贴到此处:pastebin.com/raw/a1L6K1zy(您也可以在 dropbox 上查看 txt 文件:dropbox.com/s/q7v4qn9ql31e7vc/data.txt?dl=0),而我在 intellij 中得到的长度实际上是 33,600。
标签: java postgresql jdbc