org.postgresql.util.PSQLException: Unterminated string literal 異常解決

記一次開發中遇到的問題,希望可以幫助到其他人。
錯誤提示如下:

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 都可以用 ‘’ 兩個單引號的方式解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章