记一次开发中遇到的问题,希望可以帮助到其他人。
错误提示如下:
org.postgresql.util.PSQLException: Unterminated string literal started at position 76 in SQL INSERT INTO "public"."demo"("id", "name", "age") VALUES ('2', '柜式离心风机S'-B-1 风量5570m3/h,全压531Pa,功率2.2Kw,转速:1100r/min', '12');
at org.postgresql.core.Parser.checkParsePosition(Parser.java:1303) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.core.Parser.parseSql(Parser.java:1210) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.core.Parser.replaceProcessing(Parser.java:1154) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.core.CachedQueryCreateAction.create(CachedQueryCreateAction.java:41) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.core.QueryExecutorBase.createQueryByKey(QueryExecutorBase.java:326) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:287) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:272) ~[postgresql-42.2.10.jar:42.2.10]
at org.postgresql.jdbc.PgStatement.executeUpdate(PgStatement.java:246) ~[postgresql-42.2.10.jar:42.2.10]
大家注意观察这个SQL
INSERT INTO "public"."demo"("id", "name", "age") VALUES ('2', '柜式离心风机S'-B-1 风量5570m3/h,全压531Pa,功率2.2Kw,转速:1100r/min', '12');
在柜式离心风机S 后面有一个单引号 ‘。这个单引号和前面的单引号形成了一组,导致后面的单引号 SQL不承认。所以要想办法把单引号转义。在MySQL中可以使用 \’ 对单引号进行转义。
但是这种SQL语法在Oracle、SqlServer、postgresql中是不认可的。
经过主动在表内添加 带有单引号的数据,在进行SQL导出发现。SQL中的 ’ 被替换成了 ‘’
对SQL进行了处理之后
INSERT INTO "public"."demo"("id", "name", "age") VALUES ('2', '柜式离心风机S''-B-1 风量5570m3/h,全压531Pa,功率2.2Kw,转速:1100r/min', '12');
单引号替换成两个单引号解决此异常问题。
经测试,MySQL,Oracle,SqlServer,postgresql 都可以用 ‘’ 两个单引号的方式解决。