JDBC中往一张表的String类型的字段中插入SQL语句的问题:
如下面的语句:
sql=insert into RT_RQ_DATARULE (TESTNO,STEPNO,TYPE,FIELD3,SQLDBTYPE) values 
('lejcs_004',9,'EXESQL',q'Xinsert into IB_CBA_EboxUnitDET values(7554013229291,1,-1,50000,to_date('2010-06-11 00:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2099-07-12 00:00:00','yyyy-mm-dd hh24:mi:ss'),-1,0,2000,-1,to_date('2010-07-11 22:48:24','yyyy-mm-dd hh24:mi:ss'));X',1)
就是把一个insert语句插入到FIELD3字段中,直接在ORACLE命令行是可以执行成功,但用jdbc会如下错误:
java.sql.SQLException: 索引中丢失  IN 或 OUT 参数:: 1用的是
      PreparedStatement ps = null
      ps = updateCon.prepareStatement(sql);
     ps.executeUpdate()
这里的updateCon是Connection的连接如果把FIELD3对应的insert语句中的to_date里的":"去掉用JDBC是执行成功的环境:Tomcat6.0,ojdbc14.jar求解决方法

解决方案 »

  1.   

    把你这句话里面的:当成参数标识了,需要转义。不过记得不太清楚了,你把单个冒号换成连续两个冒号试试看。或者干脆不要用PreparedStatement,反正你也没参数。
      

  2.   

    可以把要插入FIELD3的SQL语句写在外面的。
    String FIELD3SQL = "";
    values里面用?代替下面ps.setString(4,FIELD3SQL)
      

  3.   

    1 Java的字符串需要双引号
    2 'abc'表示一个值为abc的字符串,想表示一个里面有单引号的字符串需要用''转义,比如想插入values(to_date('19010101','yyyymmdd')) 必须拼接成values(to_date(''19010101'',''yyyymmdd'')) 
      

  4.   

    可以把要插入FIELD3的SQL语句写在外面的。
     String FIELD3SQL = "";
     values里面用?代替
     
    下面ps.setString(4,FIELD3SQL) 用这个方法可以解决这个问题,谢谢