首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres JDBC读取Hibernate编写的文本列

Postgres JDBC读取Hibernate编写的文本列
EN

Stack Overflow用户
提问于 2021-09-09 13:48:34
回答 1查看 161关注 0票数 0

我必须用Flyway迁移Postgres数据库。其中一个表包含一个文本列,其中包含由Hibernate编写的XML数据。由于在Flyway中手头只有一个java.sql.Connection,所以只能使用普通的jdbc。

下面您将看到一个尝试读取数据的代码片段:

代码语言:javascript
复制
    String query = "SELECT calc_proc_id, calc_key, parameters AS parameters FROM calculation WHERE parameters_json IS NULL";
    int counter = 0;
    try (Statement stmt = connection.createStatement())
    {
        try (ResultSet rs = stmt.executeQuery(query))
        {
            ResultSetMetaData resultSetMetaData = rs.getMetaData();
            int columnType = resultSetMetaData.getColumnType(3);
            String columnTypeName = resultSetMetaData.getColumnTypeName(3);
            String columnName = resultSetMetaData.getColumnName(3);
            logger.info("%s has %d (%s)", columnName, columnType, columnTypeName);
            while (rs.next())
            {
                UUID calcProcId = rs.getObject("calc_proc_id", UUID.class);
                String calcKey = rs.getString("calc_key");
                long oid = rs.getLong("parameters");
                try (LargeObject large = lom.open(oid, LargeObjectManager.READ))

当达到这个开放状态时,我得到了以下异常:

代码语言:javascript
复制
org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:337) ~[postgresql-42.2.9.jar:42.2.9]
    at org.postgresql.jdbc.PgConnection.executeTransactionCommand(PgConnection.java:829) ~[postgresql-42.2.9.jar:42.2.9]
    at org.postgresql.jdbc.PgConnection.rollback(PgConnection.java:872) ~[postgresql-42.2.9.jar:42.2.9]
    at org.flywaydb.core.internal.jdbc.TransactionTemplate.execute(TransactionTemplate.java:90) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:279) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:244) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.command.DbMigrate.access$100(DbMigrate.java:54) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:162) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:159) ~[flyway-core-6.0.8.jar:?]
    at org.flywaydb.core.internal.database.postgresql.PostgreSQLAdvisoryLockTemplate.execute(PostgreSQLAdvisoryLockTemplate.java:71) ~[flyway-core-6.0.8.jar:?]
...
Caused by: java.io.IOException: Unexpected packet type: 0
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2390) ~[postgresql-42.2.9.jar:42.2.9]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:310) ~[postgresql-42.2.9.jar:42.2.9]
    ... 147 more

有没有人以前见过这种情况并知道如何解决它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 13:51:02

我以前没有见过这个错误,但据我所知,您应该能够通过简单地调用getClob("parameters")来读取TEXT列

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69119403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档