当前位置: 首页 > 知识库问答 >
问题:

使用野蝇插入Postgres的json列

杜正奇
2023-03-14

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

我根据这个主题安装了jdbc,并且运行得很好。到目前为止,我使用wildfly管理控制台安装了数据源。

因此,当我尝试插入json字段时,问题出现了。我很快意识到JDBC没有直接的方法来插入json字段,比如字符串、整数、时间戳等。所以我在网上的某个地方找到了这个解决方案,我现在不记得了:

oPGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(new Gson().toJson(ctrlClienteComunicacao));
preparedStatement.setObject(++i,jsonObject);

这个解决方案工作正常,因为我尝试从一个简单的主类运行它,我可以插入我想要的任何json,但当我在Wildfly上运行时尝试此代码时,我得到了这个类未找到错误:

java.lang.NoClassDefFoundError: org/postgresql/util/PGobject

我的第一个习惯是从JDBC库中删除提供的属性,以便将其包含在. war中。然后我得到了一个新的错误:

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使wildfly将其部署为驱动程序。

[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驱动程序更改为在应用程序部署期间启动的数据源,并且它可以工作!我可以插入json字段。

但我认为这不是一个合适的解决方案,因为我更喜欢使用安装在wildfly上的驱动程序。

我为我的英语和问题布局道歉这是我的第一个问题。

共有2个答案

廖招
2023-03-14

因此,只需将插入方法更改为现在需要任何postgres jdbc特定方法,即可解决此问题:

将查询更改为,

INSERT INTO table (json_column) VALUES (to_json(?::json))

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

 preparedStatement.setString(1, json);

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

须彭亮
2023-03-14

添加组织。postgres对战争清单的依赖为我解决了这个问题。

下面是一个maven代码片段:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Dependencies>org.postgres</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这是生成的清单。MF(见最后一行):

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
 类似资料:
  • 我想从詹金斯那里向wildfly部署一个war文件。我尝试了很多方法,但都不管用 我使用了将WAR/EAR部署到wildfly插件,但它对我不起作用,我得到了错误: (致命:无法初始化命令上下文。生成步骤“将WAR/EAR部署到WildFly”将生成标记为失败已完成:失败), 我搜索了那个问题,但给出的答案对我没有帮助。 在我使用将WAR/EAR部署到容器的构建后操作中,它对我也不起作用,我得到了

  • 我有一个web应用程序部署为使用Wildfly的爆炸战争。我想要得到的是 null 目前,我所处的情况是,我可以选择其中一个或另一个,但不能同时获得这两个选项(这意味着,要么每个jsp更改都强制进行新的部署,要么.class文件不强制进行新的部署)。 wildfly的当前配置(使用版本8.1.0)为 此外,我还发现,无论我在deployment-scanner配置中设置了什么,一旦服务器启动并运行

  • 我正在尝试将jboss wildfly 8配置为将Jackson用于JSON。所以我补充说 我的耳朵工程。但在部署时,我会遇到以下错误: 原因:java。lang.LinkageError:加载程序约束冲突:解析重写的方法“org.jboss.resteasy.plugins.providers.jackson.ResteasyJacksonProvider$Proxy$\u$$WeldClien

  • 我正在努力将JSON对象插入我的postgres v9.4 DB。我已经将名为“evtjson”的列定义为类型json(而不是jsonb)。 我试图在Java(jdk1.8)中使用准备好的语句将Json对象(使用JEEjavax.json库构建)插入到列中,但我一直遇到SQLException错误。 我使用以下方法创建JSON对象: 然后,我将这个对象作为参数传递给另一个方法,以使用准备好的语句将

  • 我本想把它添加到另一个线程中,但我无法评论其他帖子。我读到的没有回答我的问题。我刚刚安装了EAP 7.2.0。GA。在控制台日志中,它说: 然而,其他人认为它是在第13版左右。当我看野蝇(http://wildfly.org/downloads/)的版本时,第6版太老了,甚至没有出现,应该是在2014年之前... 那么,它怎么可能是6.0.11呢。最终的

  • 我花了很多时间试图找出导致我的应用程序工作非常缓慢的原因,也许有人会帮助我检查问题所在。 版本: 操作系统:Debian GNU/Linux 7.9(wheezy) 关于我的应用: 带有静态登录页面、信息页面和登录的简单Web应用程序重定向到私人区域。公共页面是静态的,在登录期间首先查询数据库,然后尝试为登录用户获取内容。 问题是什么: 当我浏览这样配置的页面时: 没有问题,所有的东西都被装上了飞