我有一个长度变化很大的字符串序列:从30到282420个字符.我想使用jdbc将每个字符串存储到postgres数据库中.

     String query = "INSERT INTO " + tableName + 
                       " (cbsID, ownerID, naam, soortRegio, jaar, centroidLat, centroidLon, borders) " + 
                       " VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
     PreparedStatement ps = connection.prepareStatement(query); 
     for (Marker marker: gemeenteMarkers)
     {
        Area gemeente = (Area) marker.getProperty("area");
        String sloc = "";

        // ... do some computations
        // Compute sloc, a string that may contain over 250.000 characters
        ps.setInt (1, gemeente.getAreaId ());
        ps.setInt (2, gemeente.getParentId ());
        ps.setString (3, gemeente.getAreaName ());
        ps.setString (4, "GM");
        ps.setInt (5, 2014);
        ps.setFloat (6, gemeente.getCentroid ().getLat ());
        ps.setFloat (7, gemeente.getCentroid ().getLon ());
        ps.setString (8, slocs);
        System.out.printf ("%s - %d locations, len = %d\n", gemeente.getAreaName (), locs.size (), slocs.length ());

        ps.addBatch ();
     } // for
     int [] affected = ps.executeBatch ();

slocs之外,所有信息都存储在数据库中,slocs包含上述字符串,并存储在"borders"列中.请参见下面的pdAdmin屏幕截图.

边框定义为文本.正如您所见,在大多数情况下,它不会被存储,除非它很短,通常小于7000个字符.该代码包含一条print语句,部分输出如下所示:

Appingedam - 1649 locations, len = 32980
Bedum - 1210 locations, len = 24200
Bellingwedde - 1500 locations, len = 30000
Ten Boer - 1186 locations, len = 23720
Delfzijl - 16 locations, len = 320
Groningen - 2662 locations, len = 53240
Grootegast - 4843 locations, len = 96860
Haren - 1940 locations, len = 38800
Hoogezand-Sappemeer - 1481 locations, len = 29620
Leek - 2575 locations, len = 51500
Loppersum - 2991 locations, len = 59820
Marum - 1936 locations, len = 38720
Almere - 213 locations, len = 4260
Stadskanaal - 2701 locations, len = 54020
Slochteren - 1555 locations, len = 31100
Veendam - 1098 locations, len = 21960
Vlagtwedde - 2621 locations, len = 52420
Zeewolde - 25 locations, len = 500
Winsum - 2992 locations, len = 59840
Zuidhorn - 5282 locations, len = 105640
Dongeradeel - 256 locations, len = 5120
Achtkarspelen - 4644 locations, len = 92880
Ameland - 158 locations, len = 3160
het Bildt - 2337 locations, len = 46740
Franekeradeel - 50 locations, len = 1000
Harlingen - 50 locations, len = 1000
Heerenveen - 5195 locations, len = 103900

在我找到的postgres手册中

如果希望存储没有特定上限的长字符串,请使用

虽然pgAdmin屏幕上只显示短文本,但似乎有一些长度限制.有人知道我做错了什么吗?

Edit 1

抱歉我不清楚.我已经添加到代码示例中,并包含了程序和pgAdmin的输出,以在表中显示数据.

Edit 2

我在示例中添加了executeBatch.它出现在原始代码中,输出不变.

推荐答案

有人对缺乏实例发表了一些合理的 comments .在玩这些示例时,我偶然发现了pgAdmin的一些显著行为:它不显示当前的信息.只需从原始问题中显示的pgAdmin数据编辑器的输出中 Select 一些行,并将其粘贴到编辑器中.然后,它does显示在pgAdmin的数据显示中不可见的信息,见下文.

3;0;"Appingedam";"GM";2014;53.3172;6.84957;"53.345131 6.885408  53.344925 6.885422  ...
5;0;"Bedum";"GM";2014;53.2949;6.59717;"53.255638 6.587573  53.255646 6.587514  53.25...
7;0;"Bellingwedde";"GM";2014;53.0986;7.12118;"53.097076 7.038233  53.097099 7.038254...
9;0;"Ten Boer";"GM";2014;53.2788;6.69145;"53.312183 6.740470  53.312176 6.740486  53...
10;0;"Delfzijl";"GM";2014;53.3227;7.09945;"53.322491 7.100943  53.322414 7.100940  5...
14;0;"Groningen";"GM";2014;53.2222;6.5634;"53.198223 6.515755  53.198238 6.515728  5...
15;0;"Grootegast";"GM";2014;53.2086;6.27322;"53.203838 6.318381  53.203819 6.318180 ...
17;0;"Haren";"GM";2014;53.1545;6.63106;"53.165165 6.560897  53.165207 6.560884  53.1...
18;0;"Hoogezand-Sappemeer";"GM";2014;53.1473;6.7468;"53.116516 6.743022  53.116371 6...
22;0;"Leek";"GM";2014;53.1633;6.36926;"53.211250 6.362241  53.211262 6.362327  53.21...

看来pgAdmin的行为就像what you don't see is what you don't get.Java、jdbc和Postgres的行为符合预期,而pgAdmin则没有.

Postgresql相关问答推荐

如何使用postgr sql regex删除重复项和inc表记录

Postgresql我必须创建一个索引还是已经有一个索引了?

使用函数返回值作为另一个函数的参数

ANTLR4 PostgreSQL语法被 destruct 了吗?

错误:用户需要系统密码:postgres

PostgreSQL 连接字符串的正则表达式

如何使用 go-pg 包删除所有记录

求和直到达到一个值 postgresql

Postgres 函数 now() 返回不正确的时区偏移量

Supabase 数据库大小问题

PostgreSQL - 我应该如何使用 first_value()?

保存 geodjango PointField 时出错

带有初始数据的 docker postgres 不会在提交中持久化

如何在可选参数上查询 postgres?

如何查询存储在数组中的 Rails ActiveRecord 数据

如何在 PostgreSQL 中插入多行

如何使用 Node.js 和 Postgresql 找到最后一个插入 ID?

错误:ERROR: table name specified more than once

Array Push的 Postgres 数组追加和数组长度

用于将布尔列排序为 true、null、false 的 SQL