And*_*rew 7 java sql escaping prepared-statement
我使用的是如下PreparedStatement的sql:
String sql = "insert into foo (a,b,c) values (?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(psIndex++, a);
ps.setString(psIndex++, b);
ps.setString(psIndex++, c);
Run Code Online (Sandbox Code Playgroud)
但是,如果任何变量是空字符串,则结果语句将获得两个单引号.如在:VALUES ('foo','','') 然后我得到一个例外,因为两个单引号是转义序列.
我不敢相信我通过搜索找不到任何东西,但我不能.这里发生了什么?
pea*_*kit -2
编辑:正如其他人指出的那样,您不应该做任何特殊的事情来将空字符串传递给参数化查询。
但是,以防万一您碰巧在查询中使用动态 SQL,例如:
Declare sqlText VARCHAR(MAX)
set sqlText = 'SELECT ....'
EXEC(sqlText)
Run Code Online (Sandbox Code Playgroud)
那么您需要转义每个单引号以''''获得与空字符串等效的值。所以,总共有 4 条报价。前 2 个单引号相当于在运行时获取单引号。另外 2 个单引号将在运行时获得收盘价。