[SQL] 나는 물음표를 포함 PostgreSQL을 JSON (B) 연산자를 어떻게 사용합니까? "" 를 통해 JDBC
SQL나는 물음표를 포함 PostgreSQL을 JSON (B) 연산자를 어떻게 사용합니까? "" 를 통해 JDBC
PostgreSQL은 예 이러한 JSON 사업자를 들어, 이름에 물음표 문자를 사용 펑키 ASCII 예술 사업자의 몇 가지를 알고있다 :
문제는 공식 PostgreSQL의 JDBC 드라이버가 같은 연산자를 포함하는 올바르게 구문 분석 SQL 문자열에 보이지 않는다는 것입니다. 그것은 의문 부호가 보통 JDBC 바인드 변수라고 가정합니다. 다음 코드 ...
try (PreparedStatement s = c.prepareStatement("select '{}'::jsonb ?| array['a', 'b']");
ResultSet rs = s.executeQuery()) {
...
}
... 예외가 발생합니다 :
org.postgresql.util.PSQLException: Für den Parameter 1 wurde kein Wert angegeben.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:225)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:190)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114)
어떻게하면이 연산자를 사용할 수 있습니까?
해결법
-
==============================
1.가능한 해결 방법에는 두 가지가 있습니다 :
가능한 해결 방법에는 두 가지가 있습니다 :
이것은 가장 간단한 해결 방법이지만, 당신은 준비된 문 (성능, SQL 주입 보호 등)에서 모든 혜택을 잃게됩니다. 그러나이 작동합니다
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
운영자는 단지 pg_catalog에 존재하는 백업 기능을 위해 설탕을 구문된다. 다음은이 함수의 이름을 찾는 방법은 다음과 같습니다
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
위의 수율 :
oprname function ---------------------------------------------------------------------------------- ?| point_vert(point, point) ?| lseg_vertical(-, lseg) ?| line_vertical(-, line) ?| jsonb_exists_any(jsonb, text[]) <--- this is the one we're looking for ?| exists_any(hstore, text[])
그래서, 가장 간단한 해결 방법은 바로 연산자 대신 해당 기능을 사용하지 않는 것입니다 :
try (PreparedStatement s = c.prepareStatement( "select jsonb_exists_any('{}'::jsonb, array['a', 'b']"); ResultSet rs = s.executeQuery()) { ... }
from https://stackoverflow.com/questions/38370972/how-do-i-use-postgresql-jsonb-operators-containing-a-question-mark-via-jdb by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] IDENT_CURRENT 대 SCOPE_IDENTITY (0) | 2020.05.27 |
---|---|
[SQL] 오라클에 연결되어 SQL 서버에서 SQL 쿼리를 작성할 때 어떻게 날짜 리터럴을 지정합니까? (0) | 2020.05.27 |
[SQL] 문, SQL 및도록 SqlConnection을 사용하는 C #을 (0) | 2020.05.26 |
[SQL] bind_param은 무엇을 수행합니까? (0) | 2020.05.26 |
[SQL] 무엇 외래 키 불일치 오류를 일으키는? (0) | 2020.05.26 |