请问一个jdbc prepareStatement的问题,关于sql中in的

问题描述

querySql = " select to_number(param_value) from award_sys_para where param_code in (?) "; pstmt = reportConn.prepareStatement(querySql); String s = "'20002','20001','20000'";pstmt.setString(1, s);上面会报错, ORA-01722: 无效数字,我不想用in(?,?,?)这种形式,因为可能有100多个?,只希望有一个?,然后直接设进去,可是报错,不知道该如何解决还有我听说程序里面in后面带的参数过唱好像有问题的,不知道是不是啊 问题补充:柴秉承 写道

解决方案

String s = "20002,20001,20000"; querySql = " select to_number(param_value) from award_sys_para where param_code in ("+s+") "; pstmt = reportConn.prepareStatement(querySql); 手工检验下s防止注入就好了
解决方案二:
exists替代in
解决方案三:
参数太长就不行了要不试试存储过程 把拼好的sql语句作为存储过程的参数传进去看看
解决方案四:
用传参,传个数组来做,首先:querySql = " select to_number(param_value) from award_sys_para where 1 = 1 ";,然后,定义一个StringBuffer,初始值为:"where param_code in (";然后一个for循环,for(int i=0;i<参数数组长度;i++){追加StringBuffer,追加为:"?,",判断一下,如果是最后一个了,那么就追加:"?)"},然后赋值可时候就好做萃取,循环数组就是了,是吧。
解决方案五:
实在不行的话 就使用循环 来拼接sql语句 这样也可以适应不定长度的参数列表 querySql = " select to_number(param_value) from award_sys_para where param_code in ("; for(i=0;i<parameters.length;i++){if(i!=parameters.length-1){querySql += parameters[i]+',';}else{querySql += parameters[i];}}querySql += ")";然后在执行sql语句
解决方案六:
String s = "2000,2000,20000"; 这样试试 你上面的写法 是往后台传的字符串 所以提示无效数字

时间: 2024-11-26 02:07:02

请问一个jdbc prepareStatement的问题,关于sql中in的的相关文章

我用vs2005+sql2000做了一个系统,现在想将所有sql中更新、删除操作都记录下来,并将改的时间和修改人姓名都保存起来,怎么做?给个思路

问题描述 我用vs2005+sql2000做了一个系统,现在想将所有sql中更新.删除操作都记录下来,并将改的时间和修改人姓名都保存起来,怎么做?给个思路.比如一个页面,由张三修改了,自动将修改的记录记录下来,软件的页面很多,不想一个一个去写,想找一个简单的方法,听说sql中触发器可以做到,请高手指点. 解决方案 解决方案二:你可以使用触发器,但是你的每个表里都能记录操作用户信息么?触发器可以记录修改前和修改后还有修改时间解决方案三:在系统中定义一个用于写记录的类同时定义一个静态类该静态类知道当

如何对oracle jdbc执行的每条sql语句进行检测?

问题描述 请问大家如何对jdbc执行的每条sql语句进行检测?例如:PrepareStatementpstmt=conn.prepareStatement(LOAD_ALLSURVEY);rs=pstmt.executeQuery();如何在执行rs=pstmt.executeQuery();时将执行的sql语句和参数打印出来?我试过的方法有:1.找到classes12.jar的源代码,并对其进行修改,然后再打包,但是没有找到对应的源代码?2.对其进行反编译,但是效果不怎么理想.请问大家有什么好

Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加

问题描述 Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加 Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加,没有的话重新加入一条新的记录,Sql语句怎么实现? 当我页面添加的是"利群"时,添加一盒,那么数据库中利群这条记录中的num字段中的4变成5,如果是页面添加的是"黄鹤楼"同理,如果添加的不是name字段中的这两个,就新插入一条数据.Sql语句怎么写??急急急. 是Mysql的数据

MySQL JDBC PrepareStatement基本的两种模式&amp;amp;客户端空间占用的源码分析

关于预编译(PrepareStatement),对于所有的JDBC驱动程序来讲,有一个共同的功能,就是"防止SQL注入",类似Oracle还有一种"软解析"的概念,它非常适合应用于OLTP类型的系统中. 在JDBC常见的操作框架中,例如ibatis.jdbcTemplate这些框架对JDBC操作时,默认会走预编译(jdbcTemplate如果没有传递参数,则会走createStatement),这貌似没有什么问题.不过在一个应用中发现了大量的预编译对象导致频繁GC,

sqlserver-尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,求大神帮忙指正

问题描述 尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,求大神帮忙指正 java新人,尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,调用 insert 指令没问题,而 select 指令出现如下报错: com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有语法错误. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFr

PrepareStatement 如何打印真实 SQL

我们知道,JDBC 的 PrepareStatement 优点多多,通常都是推荐使用 PrepareStatement 而不是其基类 Statment.PrepareStatement 支持 ? 占位符,可以将参数按照类型转自动换为真实的值.既然这一过程是自动的,封装在 JDBC 内部的,那么我们外部就不得而知目标的 SQL 最终生成怎么样--于是在调试过程中便有一个打印 SQL 的问题.我们对 PrepareStatement 传入 SQL 语句,如 SELECT * FROM table W

JSP中小型网站适用的一个JDBC数据库联接类

js|数据|数据库 这个类我本是在参加学校网页设计大赛时写的.现在稍加修改借以讨论有关JSP数据库访问优化的问题.类的内容如下,这个类在不修改任何代码的情况下适用于MSSQL/MYSQL/ACCESS数据库的联接和基本操作. package mxzc.web.dbctrl;import java.sql.*;public final class SQLDBCtrl{/*********************************************public SQLDBCtrl(Str

怪异问题!sql在pl/sql中执行结果与java jdbc执行结果不一致

问题描述 做一查询系统(struts2+myeclipse+tomcat+oracle9),一般先在pl/sql中测试sql语句,无问题后在action中使用oracle thin模式连接数据库,执行sql语句,然后将查询结果存入HashMap后输出至jsp页面.出现如下怪异问题:1.在pl/sql中测试sql语句时结果正常.结果中有6个字段,其中两个字段为count()函数统计出的数值.2.将在pl/sql中测试过的sql语句写入struts2的action中,通过jdbc thin模式执行,

在SQL中获取一个长字符串中某个字符串出现次数的实现方法

以下是对在SQL中获取一个长字符串中某个字符串出现次数的实现方法进行了详细的分析介绍,需要的朋友可以参考下   在SQL中获取一个长字符串中某个字符串出现次数的实现方法 比如有个字符串: X-BGS-2010-09-15-001 我想知道其中'-'出现的次数,可以用下面的方法实现,而不需要复杂的一个个字符分析. declare @a varchar(100) set @a='X-BGS-2010-09-15-001' select len(replace(@a,'-','--'))-len(@a