【问题标题】:Escaping two single quotes in JDBC PreparedStatement parameter在 JDBC PreparedStatement 参数中转义两个单引号
【发布时间】:2017-11-21 13:05:08
【问题描述】:

我正在尝试将值插入到 Oracle 10g 数据库表中。我想为列 FirstName 插入值,并且值有两个单引号,如下所示: O'Rielly 版

我正在使用 JDBC 的预处理语句来传递参数 FirstName 的值。它与一个单引号(O'Rielly)一起工作正常。

但是当我使用两个单引号时,它给出的 SQL 错误为ORA-00907: missing right parenthesis。有关如何处理 PreparedStatement 中的两个单引号的任何建议? 我的查询如下:

StringBuffer strUpdateUserQuery = new StringBuffer("UPDATE USERS set FNAME = ? , LNAME = ?, USER_TIMEZONE = ?, CREATED_DATE = CURRENT_DATE, ACTIVE_STATUS = ?, APPROVAL_STATUS = ?,USER_GROUP_ID = ? where USER_ID = ?");

pstmt = conn.prepareStatement(strUpdateUserQuery.toString());
pstmt.setString(1, userVO.getFirstName());
pstmt.setString(2, userVO.getLastName());
pstmt.setString(3, userVO.getStrTimeZone());
pstmt.setString(4, userVO.getStatus());
pstmt.setString(5, userVO.getStrAppStatus());
pstmt.setInt(6, Integer.parseInt(userVO.getUserGroupId()));
pstmt.setString(7, userVO.getUserId());

int iCount = pstmt.executeUpdate(strUpdateUserQuery.toString());

我得到的错误如下:

ORA-00907: 缺少右括号\n

使用上面的代码,我遇到了问题。

【问题讨论】:

  • 显示您尝试使用preparedStatement 插入的内容的示例。
  • 您不需要在绑定值中转义单引号。请编辑您的问题以显示您正在使用的实际准备好的语句。 (我想,这个值完全符合它的约束)。你得到的完整错误是什么?
  • PreparedStatement 的一个重要优点是您无需担心转义。听起来好像您没有正确使用 PreparedStatement。 edit 您的问题并添加您正在使用的代码。不要不要在 cmets 中发布代码。
  • 我看不出这个错误的原因。你真的确定它来自这里吗?

标签: java database oracle jdbc prepared-statement


【解决方案1】:

尝试改变

int iCount = pstmt.executeUpdate(strUpdateUserQuery.toString());

int iCount = pstmt.executeUpdate();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2016-04-29
    • 1970-01-01
    • 2017-04-15
    • 2012-05-07
    • 2012-02-03
    • 2021-11-12
    相关资源
    最近更新 更多