首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通配符插入Postgres的json列

使用通配符插入Postgres的json列
EN

Stack Overflow用户
提问于 2015-10-30 17:01:15
回答 2查看 2.1K关注 0票数 3

我正在运行一个web应用程序,它是一个rest,我使用的是通配符9.0.2和PostgreSQL。数据库连接使用的是最新的jdbc4.2驱动程序,jre是oracle的jr8。

我在这个主题之后安装了jdbc,到目前为止我使用通配符管理控制台安装了数据源。

因此,当我试图插入一个json字段时,问题就出现了。我很快意识到JDBC没有一个直接的方法来插入json字段,比如String、Integer、Timestamp等等。所以我在网上找到了这个解决方案,我现在不记得了:

代码语言:javascript
复制
oPGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(new Gson().toJson(ctrlClienteComunicacao));
preparedStatement.setObject(++i,jsonObject);

这个解决方案很好,因为我尝试从一个简单的主类运行它,我可以插入我想要的任何json,但是当我在通配符上运行时尝试这段代码时,我得到了这个类没有找到错误:

代码语言:javascript
复制
java.lang.NoClassDefFoundError: org/postgresql/util/PGobject

我的第一个任务是从JDBC库中删除提供的属性,以便将其包含在.war中。然后我又犯了一个错误:

代码语言:javascript
复制
org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.util.PGobject. Use setObject() with an explicit Types value to specify the type to use.

经过几次尝试后,我意识到将jar包含在战争中使野蝇将其部署为驱动程序。

代码语言:javascript
复制
[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) WFLYJCA0018: Started Driver service with driver-name = VirtualForum.war_org.postgresql.Driver_9_4

因此,我尝试了另一种方法,在部署war时,我将数据源从最初的pgsql驱动程序更改为这个数据源,该驱动程序是在应用程序部署期间启动的,it works!,我可以插入json字段。

但我不认为这是一个正确的解决方案,因为我更希望使用安装在野蝇上的驱动程序。

我很抱歉我的英语和问题布局,这是我的第一个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-03 13:07:51

org.postgres依赖项添加到war清单为我解决了这个问题。

下面是一个maven片段:

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Dependencies>org.postgres</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

下面是生成的MANIFEST.MF (参见最后一行):

代码语言:javascript
复制
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dedek
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Dependencies: org.postgres
票数 4
EN

Stack Overflow用户

发布于 2015-11-02 12:11:08

因此,只需将插入方法更改为现在需要任何postgres特定方法,就可以做到这一点:

将查询更改为

代码语言:javascript
复制
INSERT INTO table (json_column) VALUES (to_json(?::json))

并将准备语句中的方法更改为:

代码语言:javascript
复制
 preparedStatement.setString(1, json);

这解决了我的问题,不确定它是否是最好的/最有效的解决方案,但它是有效的。

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

https://stackoverflow.com/questions/33441201

复制
相关文章

相似问题

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