Skip to content

Commit 44a2b6e

Browse files
committed
Server:解决包含选项 key<>:value 不兼容 PostgreSQL;Number或Boolean类型不用单引号包裹;完善默认数据库类型改为 PostgreSQL 的代码及注释
1 parent 94b15eb commit 44a2b6e

File tree

3 files changed

+8
-9
lines changed

3 files changed

+8
-9
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ public class DemoSQLConfig extends AbstractSQLConfig {
4040
TABLE_KEY_MAP.put(Privacy.class.getSimpleName(), "apijson_privacy");
4141
}
4242

43+
//取消注释后,默认的数据库类型会由 MySQL 改为 PostgreSQL
4344
// @Override
4445
// public String getDatabase() {
45-
// return DATABASE_POSTGRESQL;
46+
// String db = super.getDatabase();
47+
// return db == null ? DATABASE_POSTGRESQL : db;
4648
// }
4749

4850
@Override

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,12 @@ private PreparedStatement getStatement(@NotNull SQLConfig config) throws Excepti
116116
else {
117117
PGobject o = new PGobject();
118118
o.setType("jsonb");
119-
o.setValue(v.toString());
120-
statement.setObject(i + 1, o); //PostgreSQL JDBC 不支持隐式类型转换 tinyint = varchar 报错
119+
o.setValue(v == null ? null : v.toString());
120+
statement.setObject(i + 1, o); //PostgreSQL 除了基本类型,其它的必须通过 PGobject 设置进去,否则 jsonb = varchar 等报错
121121
}
122122
}
123123
else {
124-
statement.setString(i + 1, v.toString()); //MySQL setObject 不支持 JSON 类型
124+
statement.setString(i + 1, v == null ? null : v.toString()); //MySQL setObject 不支持 JSON 类型
125125
}
126126
}
127127
}

APIJSON-Java-Server/APIJSONORM/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,7 +1227,7 @@ private Object getValue(@NotNull Object value) {
12271227
preparedValueList.add(value);
12281228
return "?";
12291229
}
1230-
return "'" + value + "'";
1230+
return value instanceof Number || value instanceof Boolean ? value : "'" + value + "'";
12311231
}
12321232
@Override
12331233
public List<Object> getPreparedValueList() {
@@ -1588,13 +1588,10 @@ public String getContainString(String key, Object[] childs, int type) throws Ill
15881588
if (childs[i] instanceof JSON) {
15891589
throw new IllegalArgumentException(key + "<>:value 中value类型不能为JSON!");
15901590
}
1591-
if (childs[i] instanceof String) {
1592-
childs[i] = "\"" + childs[i] + "\"";
1593-
}
15941591

15951592
if (DATABASE_POSTGRESQL.equalsIgnoreCase(getDatabase())) {
15961593
condition += (i <= 0 ? "" : (Logic.isAnd(type) ? AND : OR))
1597-
+ getKey(key) + " @> " + getValue(childs[i]);
1594+
+ getKey(key) + " @> " + getValue(newJSONArray(childs[i])); //operator does not exist: jsonb @> character varying "[" + childs[i] + "]");
15981595
} else {
15991596
condition += (i <= 0 ? "" : (Logic.isAnd(type) ? AND : OR))
16001597
+ "json_contains(" + getKey(key) + ", " + getValue(childs[i]) + ")";

0 commit comments

Comments
 (0)