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

时间:2014-03-14 10:26:02

标签: java sql jdbc prepared-statement

我正在尝试根据从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 个答案:

答案 0 :(得分:2)

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

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