【问题标题】:Postgresql JSON data truncated with JDBCPostgresql JSON 数据被 JDBC 截断
【发布时间】: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';

函数正确执行并在 pgAdmin 中返回:

但是,当我使用这个通过 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


【解决方案1】:

事实证明 Postgresql 没有任何问题,但由于我将所有字符串的数据类型设置为字符(255),这是一个 255 个字符的固定大小字符串,所有尾随空格都是 255 减去字符串长度。

感谢 Laurenz、Andreas 的意见。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2011-07-30
    相关资源
    最近更新 更多