以上错误的原因是:sysdate 位置没有占位符号“?”但是你在用PreparedStatement SET 参数的时候把这个位置算进去了,那么就会抛出:
SQL 错误: 索引中丢失 IN 或 OUT 参数:: 1
PreparedStatement.setXXX(INDEX,VALUE),中的INDEX是连续的123......,假如你SQL中有sysdate
这样的值或者表达式,那么在PreparedStatement设置值时它的位置是不能算的。
String addMeltSnowMaterialSQL = "insert into SNOW_MATERIAL_WAREHOUSE_IN" + "(ID," + "INPUT_INSTITUTION," + "SALT," + "SOLID_MELT_SNOW," + "LIQUID_MELT_SNOW," + "ORGNAME," + "INPUT_PEOPLE," + "INPUT_DATE," + "IS_ADD," + "IS_STOCK," + "STATUS) " + "values(?,?,?,?,?,?,?,sysdate,?,?,'1')"; pst = DBCommon.getPsm(conn, addMeltSnowMaterialSQL); pst.setInt(1, id); pst.setString(2, meltSnowMaterial.getInstitution()); pst.setString(3, meltSnowMaterial.getSalt()); pst.setString(4, meltSnowMaterial.getSolidMeltSnow()); pst.setString(5, meltSnowMaterial.getLiquidMeltSnow()); pst.setString(6, meltSnowMaterial.getOrgName()); pst.setString(7, meltSnowMaterial.getPeople()); pst.setString(8, meltSnowMaterial.getIsAdd()); pst.setString(9, meltSnowMaterial.getIsStock()); pst.executeUpdate();