PreparedStatement 更新显示错误 ORA-00927 缺少等号

Posted

技术标签:

【中文标题】PreparedStatement 更新显示错误 ORA-00927 缺少等号【英文标题】:PreparedStatement Update showing error ORA-00927 missing equal sign 【发布时间】:2014-03-14 10:26:02 【问题描述】:

我正在尝试根据从 Excel 工作表中读取的数据更新数据库中的记录。我在 db 中有 50 多个列,其列名存储在数组 columnNames[] 中。 我使用以下代码来创建 Sql 查询。

 String sqlUpdate= "Update "+tableName+
             " set "+columnNames[0]+"=?";
     for (int i=1;i<columnCount;i++)
     
         sqlUpdate= sqlUpdate+","+columnNames[i]+"=?";
     
     sqlUpdate= sqlUpdate+
             " where demand_id=?";

在控制台上打印的等效查询是:

Update fulfillment_plan set DEMAND_ID=?,SBU=?,PROJ_DOMAIN=?,JOBCODE=?,INDENT_STATUS=?,JC_CREATED_ON=?,PROJECT_NAME=?,CUSTOMER_NAME=?,GROUP_CUSTOMER=?,US_DEMANDS=?,SUITE_NAME=?,ROLE_NAME=?,LOCATION=?,COUNTRY=?,GEO=?,AREA=?,OPEN_POS=?,PRODUCT=?,DEMAND_TYPE=?,POSITIONS_TO_FULFILL_Q4=?,FULFILLMENT_PLAN_Q4=?,TA_STATUS_Q4=?,POSITIONS_TO_FULFILL_Q3=?,FULFILLMENT_PLAN_Q3=?,TA_STATUS_Q3=?,POSITIONS_TO_FULFILL_Q2=?,FULFILLMENT_PLAN_Q2=?,TA_STATUS_Q2=?,POSITIONS_TO_FULFILL_Q1=?,FULFILLMENT_PLAN_Q1=?,TA_STATUS_Q1=?,NET_ADD_TYPE=?,ESSENTIAL_SKILL=?,SUITE_SKILLS=?,ADDITIONAL_SKILLS=?,POSITIONS_WITH_PROPOSALS=?,POSITIONS_WITHOUT_PROPOSALS=?,DEM_ST_DATE=?,OVER_DUE_STATUS=?,OVERDUE_DAYS=?,LEAD_TIME_DAYS=?,LEAD TIME BUCKET=?,DEM_END_DATE=?,CREATED_ON=?,INDENT_CREATED_ON=?,EBD=?,OPPORTUNITYID=?,LOAD_DATE=?,PROJECT_NUMBER=?,CUSTOMER_NO=?,CUSTOMER_SUB_GEO=?,DEMAND_STATUS=?,ENGAGEMENT_TYPE=?,INVOICE_TYPE=?,INDENT_CLASSIFICATIONS=?,PROJ_STAT=?,EFD_SLA=?,RM_EMP_NAME=?,MONTH=?,QUARTER=?,YEAR=?,ACCOUNT_ID=?,ACCOUNT_TEXT=?,STATUS=? where demand_id=?

然后我将值设置为“?”并在执行上述准备好的语句时出现“缺少等号”错误。我已经研究了大约 3 个小时,但无法解决它。请帮忙。

【问题讨论】:

【参考方案1】:

我怀疑这是由于 LEAD TIME BUCKET 列名造成的,它应该有下划线(与其他列名一样)或以某种方式转义 - 列名中的空格会导致错误。最好有下划线,以便与您的其他列保持一致,并使 SQL 更简单。

(我还建议在您的 SQL 中添加空格 - 例如,在每个逗号后加一个空格 - 以便可以在文本编辑器中通过对空格进行换行来重新格式化 SQL,使其更易于阅读。我会有更多Java 代码中也有空格,但这显然是个人/团队偏好的问题。)

【讨论】:

@Zubair,你应该考虑接受这个答案,因为这对你有用。

以上是关于PreparedStatement 更新显示错误 ORA-00927 缺少等号的主要内容,如果未能解决你的问题,请参考以下文章

在 Try with Resources 中使用 PreparedStatement 显示“未知类”错误

PreparedStatement:查询还是更新?

无效的列索引,使用 PreparedStatement 更新

Statement和PreparedStatement批量更新

使用 PreparedStatement 将日期插入 MySQL 数据库

JDBC PreparedStatement、批量更新和生成的Keys