5

我们正在使用JdbcTemplate来修改我们的底层 Oracle 数据库。我们通过方法来做到这一点update(String sql)

代码看起来像下面这样:

String name = "My name's yellow";
String sql = "update FIELD set NAME = '" + name "' where ID = 10
jdbcTemplate.update(sql);

这会导致错误:

java.sql.SQLException: ORA-00933: SQL command not properly ended

问题是变量'中的未转义。name

逃避这个角色最方便和正确的方法是什么?

4

2 回答 2

5

使用PreparedStatement。这样,您指定一个占位符,JDBC 驱动程序将通过向数据库发送语句以及作为参数的参数来正确执行此操作。

    String updateStatement =
    "update " + dbName + ".COFFEES " +
    "set TOTAL = TOTAL + ? " +
    "where COF_NAME = ?";

    PreparedStatement updateTotal = con.prepareStatement(updateStatement);
    updateTotal.setInt(1, e.getValue().intValue());
    updateTotal.setString(2, e.getKey());

上面的问号代表占位符。

因为这些值是作为参数传递的,所以引用不会有问题,它也可以保护您免受SQL 注入

于 2012-08-14T16:12:05.450 回答
0

尝试名称:

if ( name.contains("'") ){
    name.replaceAll("'", "''");
}
于 2015-05-12T12:27:26.290 回答