From ea5169b5c5ea7412fd762331c0c497165832e901 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Sat, 27 Apr 2019 11:17:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9mysql=E4=B8=AD=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E5=B8=A6\=E4=BC=9A=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/source/DataSqlSource.java | 21 ++++++++++++++++++--- src/org/redkale/source/EntityInfo.java | 9 +++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/org/redkale/source/DataSqlSource.java b/src/org/redkale/source/DataSqlSource.java index c3cd3dffa..2735ecc62 100644 --- a/src/org/redkale/source/DataSqlSource.java +++ b/src/org/redkale/source/DataSqlSource.java @@ -284,6 +284,21 @@ public abstract class DataSqlSource extends AbstractService implement return null; } + protected String formatValueToString(final EntityInfo info, Object value) { + final String dbtype = this.readPool.getDbtype(); + if ("mysql".equals(dbtype)) { + if (value == null) return null; + if (value instanceof CharSequence) { + return new StringBuilder().append('\'').append(value.toString().replace("\\", "\\\\").replace("'", "\\'")).append('\'').toString(); + } else if (!(value instanceof Number) && !(value instanceof java.util.Date) + && !value.getClass().getName().startsWith("java.sql.") && !value.getClass().getName().startsWith("java.time.")) { + return new StringBuilder().append('\'').append(info.getJsonConvert().convertTo(value).replace("\\", "\\\\").replace("'", "\\'")).append('\'').toString(); + } + return String.valueOf(value); + } + return info.formatToString(value); + } + //----------------------------- insert ----------------------------- /** * 新增对象, 必须是Entity对象 @@ -784,7 +799,7 @@ public abstract class DataSqlSource extends AbstractService implement return updateDB(info, null, sql, true, colval); } else { String sql = "UPDATE " + info.getTable(pk) + " SET " + info.getSQLColumn(null, column) + " = " - + info.formatToString(info.getSQLValue(column, colval)) + " WHERE " + info.getPrimarySQLColumn() + " = " + FilterNode.formatToString(info.getSQLValue(info.getPrimarySQLColumn(), pk)); + + formatValueToString(info, info.getSQLValue(column, colval)) + " WHERE " + info.getPrimarySQLColumn() + " = " + FilterNode.formatToString(info.getSQLValue(info.getPrimarySQLColumn(), pk)); return updateDB(info, null, sql, false); } } @@ -856,7 +871,7 @@ public abstract class DataSqlSource extends AbstractService implement return updateDB(info, null, sql, true, colval); } else { String sql = "UPDATE " + info.getTable(node) + " a " + (join1 == null ? "" : (", " + join1)) - + " SET " + info.getSQLColumn(alias, column) + " = " + info.formatToString(colval) + + " SET " + info.getSQLColumn(alias, column) + " = " + formatValueToString(info, colval) + ((where == null || where.length() == 0) ? (join2 == null ? "" : (" WHERE " + join2)) : (" WHERE " + where + (join2 == null ? "" : (" AND " + join2)))); return updateDB(info, null, sql, false); @@ -1142,7 +1157,7 @@ public abstract class DataSqlSource extends AbstractService implement blobs.add((byte[]) val); setsql.append(" = ").append(prepareParamSign(++index)); } else { - setsql.append(" = ").append(info.formatToString(val)); + setsql.append(" = ").append(formatValueToString(info, val)); } } if (neednode) { diff --git a/src/org/redkale/source/EntityInfo.java b/src/org/redkale/source/EntityInfo.java index bc3606ac0..0efa6ba74 100644 --- a/src/org/redkale/source/EntityInfo.java +++ b/src/org/redkale/source/EntityInfo.java @@ -473,6 +473,15 @@ public final class EntityInfo { this.tablecopySQL = conf.getProperty(DataSources.JDBC_TABLECOPY_SQLTEMPLATE, "CREATE TABLE ${newtable} LIKE ${oldtable}"); } + /** + * 获取JsonConvert + * + * @return JsonConvert + */ + public JsonConvert getJsonConvert() { + return jsonConvert; + } + /** * 创建主键值,目前只支持UUID赋值 *