我有一个有价值的字符串
'MAX DATE QUERY: SELECT iso_timestamp(MAX(time_stamp)) AS MAXTIME FROM observation WHERE offering_id = 'HOBART''
但在插入postgresql表时我收到错误:
org.postgresql.util.PSQLException:错误:"HOBART"处或附近的语法错误.
这可能是因为我的字符串包含单引号.我不知道我的字符串值.每次它不断变化,并且可能包含特殊字符,例如\或者某些东西,因为我正在从文件中读取并保存到postgres数据库中.
请提供一般解决方案来逃避这些角色.
Boh*_*ian 11
根据SQL标准,引号通过加倍来分隔,即:
insert into table (column) values ('I''m OK')
Run Code Online (Sandbox Code Playgroud)
如果更换每一个与你的文字报价2个单引号,它会工作.
通常,反斜杠会转义后续字符,但使用两个反斜杠同样转义文字反斜杠"
insert into table (column) values ('Look in C:\\Temp')
Run Code Online (Sandbox Code Playgroud)
您似乎正在使用Java和JDBC.请阅读JDBC教程,该教程描述了如何使用参数化查询安全地插入数据而不会有SQL注入问题的风险.
请阅读JDBC教程的预备语句部分以及包括Java在内的各种语言的这些简单示例.
由于你遇到反斜杠的问题,不仅仅是'single quotes'
,我说你正在运行PostgreSQL 9.0或更早版本,默认情况下standard_conforming_strings = off
.在较新的版本中,如果您使用PostgreSQL扩展,则反斜杠只是特殊的E'escape strings'
.(这就是为什么你总是在问题中包含你的PostgreSQL版本).
您可能还想检查:
虽然可以明确地引用值,但这样做容易出错,速度慢且效率低.您应该使用参数化查询(预准备语句)来安全地插入数据.
将来,请包含您遇到问题的代码段以及您正在使用的语言的详细信息,PostgreSQL版本等.
如果你真的必须手动转义字符串,你需要确保它standard_conforming_strings
是打开和双引号,例如don''t manually escape text
; 或使用PostgreSQL特定的E'escape strings where you \'backslash escape\' quotes'
.但实际上,使用准备好的语句,它更容易.
归档时间: |
|
查看次数: |
83851 次 |
最近记录: |