日期:2014-05-19  浏览次数:20647 次

JDBC中往一张表的String类型的字段中插入SQL语句的问题
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

求解决方法

------解决方案--------------------
把你这句话里面的:当成参数标识了,需要转义。

不过记得不太清楚了,你把单个冒号换成连续两个冒号试试看。

或者干脆不要用PreparedStatement,反正你也没参数。
------解决方案--------------------
可以把要插入FIELD3的SQL语句写在外面的。
String FIELD3SQL = "";
values里面用?代替

下面ps.setString(4,FIELD3SQL)
------解决方案--------------------
1 Java的字符串需要双引号
2 'abc'表示一个值为abc的字符串,想表示一个里面有单引号的字符串需要用''转义,比如想插入values(to_date('19010101','yyyymmdd')) 必须拼接成values(to_date(''19010101'',''yyyymmdd'')) 
------解决方案--------------------
把你要插入的新值用?表示。