Re: Inserting JSON via Java PreparedStatment

Поиск
Список
Период
Сортировка
От Curt Huffman
Тема Re: Inserting JSON via Java PreparedStatment
Дата
Msg-id CACaG-nHaAEsksm8DfyirSJx4VF0arrEsiJ-SgNN2DZuRaEMEaA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Inserting JSON via Java PreparedStatment  (rob stone <floriparob@gmail.com>)
Ответы Re: Inserting JSON via Java PreparedStatment  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
Thanks Rob & David!

I got it to work using the following:


String qry = "INSERT INTO event "
+ "(spotid, qid, userid, persid, ...., "
+ "evtvalue, evtdt, evtjson) "
+ "VALUES(?,?,?,?,?,?,?,?,?,?,to_json(?::json));";

and
pStmt.setString (11,dtlRec.toString());

(another suggestion was to use: cast(? as json  which I haven't tried yet.)

This worked with an ultra-simple, 1-pair json object. {"New MbrID":34}  I'll try it with more complex structures next.

Any opinions on using the postgres function, to_json, over the cast?

However, from my (limited) understanding, I think I am now just incurring additional processing overhead from all of this.
I think that I am stuffing text into a JSON object, then converting it into a string for the preparedStatment, which then passes it to the JDBC driver to re-convert it into a JSON object, and gets ultimately stored as a text string in the column?  Is that correct?
I suspect I'll have to reverse the process to read it back out, yes?

Follow-up questions:
1) Since I'm not (yet) using JSONB, but just regular JSON column, is there much point to even using a JSON column?
2) Will this method also work for JSONB column types?

Finally, I humbly request a small addition to the postgres doco that illustrates this and the 'best' way to insert, manipulate, and retrieve JSON in postgres.  Maybe even a small tutorial?

Thanks again!
-Curt









On Tue, Mar 8, 2016 at 4:18 AM, rob stone <floriparob@gmail.com> wrote:
On Mon, 2016-03-07 at 09:32 -0700, David G. Johnston wrote:
>
> > 
> > Hint: You will need to rewrite or cast the expression.
> >
> Take the hint, literally.  You never did show the SQL but usually the
> least complex way to solve this is to indeed transfer the data as a
> string/text and then instruction PostgreSQL to convert (i.e., cast)
> it to json.
>
> SELECT (?)::json;  <-- that ? parameter is seen as text; then you
> convert it.  The parentheses should be optional but I use them to
> emphasize the point.
>
> then
>
> pStmt.setString(1, dtlRec.toString());
>
> David J.
>

For some reason there is no java.sql.Type = JSON. There is ARRAY
though.

I would have written this:-

JsonObject mbrLogRec = Json.createObjectBuilder().build();
mbrLogRec = Json.createObjectBuilder()
                .add("New MbrID", newId)
                .build();

as

JsonObject mbrLogRec = Json.createObjectBuilder().add("New MbrID",
newId);

pStmt.setObject(11, mbrLogRec);

If you pass a string to your prepared statement and want to cast it in
your INSERT/UPDATE statement, you will probably have to include the
double quotes, colons and commas. Never tried it, just a guess.
Could become complicated when you have multiple pairs of JSON
attributes.

E.g.

JsonObject mbrLogRec = Json.createObjectBuilder().add("New MbrID",
newId).add("Old MbrID","fred");


I'm sorry but I don't have time at the moment to knock up a test
program and verify any of this. I'm not an expert on JSON objects in
Java.

Just my two bob's worth.

HTH,
Rob


В списке pgsql-general по дате отправления:

Предыдущее
От: Andreas Joseph Krogh
Дата:
Сообщение: Re: Exclude pg_largeobject form pg_dump
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Inserting JSON via Java PreparedStatment