小编May*_*ots的帖子

如何使用Java preparedStatement将JSON对象插入Postgres?

我正在努力将JSON对象插入到postgres v9.4 DB中.我已将名为"evtjson"的列定义为类型json (不是jsonb).

我试图在Java(jdk1.8)中使用预准备语句将Json对象(使用JEE javax.json库构建)插入到列中,但是我一直遇到SQLException错误.

我使用以下方法创建JSON对象:

JsonObject mbrLogRec = Json.createObjectBuilder().build();
…
mbrLogRec = Json.createObjectBuilder()
                .add("New MbrID", newId)
                .build();
Run Code Online (Sandbox Code Playgroud)

然后我将此对象作为参数传递给另一个方法,以使用预准备语句将其写入DB.(以及其他几个领域)作为:

pStmt.setObject(11, dtlRec);
Run Code Online (Sandbox Code Playgroud)

使用此方法,我收到以下错误:

org.postgresql.util.PSQLException:未安装hstore扩展.at org.postgresql.jdbc.PgPreparedStatement.setMap(PgPreparedStatement.java:553)at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1036)

我也尝试过:

pStmt.setString(11, dtlRec.toString());
pStmt.setObject(11, dtlRec.toString());
Run Code Online (Sandbox Code Playgroud)

哪会产生不同的错误:

事件JSON:{"New MbrID":29}

SQLException:错误:列"evtjson"的类型为json,但表达式的类型为字符变化

提示:您需要重写或转换表达式.

但是,至少这告诉我DB正在将列识别为JSON类型.我确实尝试安装hstore扩展,但它告诉我它不是一个hstore对象.

OracleDocs显示了许多用于在preparedStatement中设置参数值的方法,但如果有人知道答案,我宁愿不尝试所有方法.(http://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html)这些还引用了一个额外的参数,SQLTYPE,但我不能找到这些任何引用.

我应该试试setAsciiStream吗?CharacterStream?CLOB?

java postgresql json prepared-statement

39
推荐指数
5
解决办法
4万
查看次数

你能告诉我为什么我会得到"不能使用在PreparedStatement上接受查询字符串的查询方法."?

我一直遇到错误"无法使用在PreparedStatement上接受查询字符串的查询方法." 在尝试调试以下代码和SQL Select查询时.(Postgres 9.4,jdk 1.8)也许我是盲人,这是一个简单的类型,但我可以使用一些帮助.

我的控制台输出:

SELECT rowid,firstname,lastname,prefname,email1,email2,email3,type,status,preflang,mbrappid,deviceid,mbrstatus,mbrtype,mbrcat,pr_phonevoice FROM qbirt.person WHERE pr_sms = 47 ORDER BY lastupdt DESC

ERROR JDBC在主电话FKey上准备了Stmt错误...电话FKey:47

SQLException:无法使用在PreparedStatement上获取查询字符串的查询方法.SQLState:42809 VendorError:0 org.postgresql.util.PSQLException:无法使用在PreparedStatement上获取查询字符串的查询方法.at theg.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:102)at solutions.demand.qbirt.Person.findMember(Person.java:762)

部分代码:

            if (!foundMbr && foundPhoneID > 0) {
                if (QbirtUtils.verbose) {
                    System.out.println("Querying Person by FK ID for phones: " + foundPhoneID + "\n");
                }

                if (mode.equals(pMode.SMS)) {
                    qry = "SELECT rowid, firstname, lastname, prefname, email1, email2, email3, type, "
                            + "status, preflang, mbrappid, deviceid, mbrstatus, mbrtype, mbrcat, pr_phonevoice "
                            + "FROM qbirt.person "
                            + "WHERE …
Run Code Online (Sandbox Code Playgroud)

java postgresql prepared-statement

10
推荐指数
1
解决办法
5954
查看次数

哪里有json.org java库消失了?

所以,我正在尝试学习JSON,用于Java,但它似乎是一个移动目标 - 有许多库可用,但我更喜欢坚持使用JSON.ORG版本或Oracle Java javax版本.但是,似乎JSON.ORG不再提供文档或"官方"库.除了登陆页面之外,我找到的.org链接都没有.例如 http://www.json.org/java

最终的结果是我发现和学习的很多东西都无法应用,因为它们引用了JSON.ORG库,它似乎不再可用.

登录页面确实提供了可以使用的其他库的列表.其中一个通常命名为:sourceforge上的JSON-lib.这是以前在JSON.ORG上的吗?没有参考说明这一点.

我错过了什么吗?JSON.ORG库是否可以在其他地方使用,或者我只是坚持使用Oracle的javax.json?或者,Google的版本是更好的选择吗?

java json

7
推荐指数
1
解决办法
2704
查看次数

标签 统计

java ×3

json ×2

postgresql ×2

prepared-statement ×2