Skip to content

Commit 8987ffe

Browse files
committed
Server:解决PostgreSQL预编译模式下传JSON参数到SQL后报错类型不是jsonb
1 parent 0e227b0 commit 8987ffe

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/server/DemoSQLExecutor.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,23 @@ private PreparedStatement getStatement(@NotNull SQLConfig config) throws Excepti
105105

106106
if (valueList != null && valueList.isEmpty() == false) {
107107

108+
Object v;
108109
for (int i = 0; i < valueList.size(); i++) {
109-
110+
v = valueList.get(i); //JSON.isBooleanOrNumberOrString(v) 解决 PostgreSQL: Can't infer the SQL type to use for an instance of com.alibaba.fastjson.JSONArray
111+
110112
if (DemoSQLConfig.DATABASE_POSTGRESQL.equalsIgnoreCase(config.getDatabase())) {
111-
statement.setObject(i + 1, valueList.get(i)); //PostgreSQL JDBC 不支持隐式类型转换 tinyint = varchar 报错
113+
if (JSON.isBooleanOrNumberOrString(v)) {
114+
statement.setObject(i + 1, v); //PostgreSQL JDBC 不支持隐式类型转换 tinyint = varchar 报错
115+
}
116+
else {
117+
PGobject o = new PGobject();
118+
o.setType("jsonb");
119+
o.setValue(v.toString());
120+
statement.setObject(i + 1, o); //PostgreSQL JDBC 不支持隐式类型转换 tinyint = varchar 报错
121+
}
112122
}
113123
else {
114-
statement.setString(i + 1, "" + valueList.get(i)); //MySQL setObject 不支持 JSON 类型
124+
statement.setString(i + 1, v.toString()); //MySQL setObject 不支持 JSON 类型
115125
}
116126
}
117127
}

0 commit comments

Comments
 (0)