java中sql语句是where 条件 in(?,?,?)时的处理方法

怀念昨天 2013-11-18 10:09:08
各位达人:

小弟在这请教一个问题:在java拼的sql语句中有"where 条件 in (?,?,?)"这种情况该怎么处理啊?这个类传入一个参数名,但参数的值有可能是多个,例如:参数名是 String key_no,但在jsp页面查询时有可能输入1个,也有可能是多个,不知道在java中该怎么处理了,还望诸位达人不吝赐教,非常感谢!
...全文
8250 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
怀念昨天 2013-11-18
  • 打赏
  • 举报
回复

public ArrayList<PowerLabelDataInfo> searchData(String key_no){
		
		Connection conn=null;
		ResultSet rs=null;
		PreparedStatement psmt=null;
		ArrayList al= new ArrayList();
		
		conn=DataSourceTest.getPowerLabelDBCon();
		String sql=" SELECT DISTINCT d.key_no,b.sp_katamei,b.kura_kjn, a.suryo,a.taping_kbn,a.gensankoku,a.suffix_katamei,"+
			" a.label_ptn,a.naiso_maisu,a.daihyo_maisu,b.sbt_lvl,d.ssn_skkr_su,e.dtcd "+
			" FROM ott0470@alpstest a,ott0070@alpstest b,ott0130@alpstest c,ost0090@alpstest d,ost0100@alpstest e "+
			" WHERE (b.sp_katamei||b.kura_kjn)=a.katamei "+
			" AND a.katamei=(c.katamei_body||c.katamei_kurakjn) "+
			" AND (c.katamei_body||c.katamei_kurakjn)= (d.katamei_body||d.katamei_kuraki) "+
			" AND (d.katamei_body||d.katamei_kuraki)=e.katamei "+
			" AND d.skkr_kotei_flow_rnbn=e.kotei_flow_rnbn "+
			" AND d.key_no=e.key_no "+
			" AND (c.ksbr_cd LIKE '7%' OR c.ksbr_cd LIKE 'J%') "+
			" AND a.pckg_cd<>'ZZZZZZ' "+
			" AND b.kura_kjn <>' ' ";
		
		if(!key_no.equals("")){
			sql=sql+" and d.key_no= '" + key_no + "'";
		}

		
		try {
			psmt=conn.prepareStatement(sql);
			rs=psmt.executeQuery();
			while (rs.next()) {
				PowerLabelDataInfo pldi = new PowerLabelDataInfo();
				pldi.setKEY_NO(rs.getString("KEY_NO"));
				pldi.setSP_KATAMEI(rs.getString("SP_KATAMEI"));
				pldi.setKURA_KJN(rs.getString("KURA_KJN"));
				pldi.setDTCD(rs.getString("DTCD"));
				pldi.setGENSANKOKU(rs.getString("GENSANKOKU"));
				pldi.setTAPING_KBN(rs.getString("TAPING_KBN"));
				pldi.setSUFFIX_KATAMEI(rs.getString("SUFFIX_KATAMEI"));
				pldi.setLABEL_PTN(rs.getString("LABEL_PTN"));
				pldi.setSBT_LVL(rs.getString("SBT_LVL"));
				pldi.setSURYO(rs.getInt(4));
				pldi.setNAISO_MAISU(rs.getInt(9));
				pldi.setDAIHYO_MAISU(rs.getInt(10));
				pldi.setSSN_SKKR_SU(rs.getInt(12));
				al.add(pldi);
										
			}
			
			return al;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		 finally {
			try {
				DataSourceTest.close(rs, psmt, conn);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
			
	}

上面是我的类方法,单个条件时可以查询,现在就是不知道where 条件 in ()多个条件时SQL怎么拼啊 这个参数拼接成字符串实在是不会啊,还请各位大侠多指教啊,不胜感激啊!
异常异长 2013-11-18
  • 打赏
  • 举报
回复
web么? 用request对象 get到后台 就行了 或者用 js 拼接成数组 放到隐藏变量里 传到后台
怀念昨天 2013-11-18
  • 打赏
  • 举报
回复


各位达人:
我不是在一个文本框中输入“1,2,3”这样的数据
是前端页面有6个输入条件的文本框,形式见上图
这种形式的输入条件在java类里如何处理不怎么清楚,还请各位达人不吝赐教
tony4geek 2013-11-18
  • 打赏
  • 举报
回复
String[] parm={"234","3445","298"};
		String sql=" coulum  in (";
		for (int i = 0; i < parm.length; i++) {
			if(i==parm.length-1){
				sql+=parm[i];
				break;
			}
			sql+=parm[i]+",";
		}
		System.out.println(sql+")");
异常异长 2013-11-18
  • 打赏
  • 举报
回复
楼主可以在调用该方法前 把参数都拼接成一个字符串(用逗号分隔)。 数组都行。 或者直接将参数 拼接成 sql语句类型。
acefr 2013-11-18
  • 打赏
  • 举报
回复
参数名是一个不是问题啊, 你输入多个参数只是页面输入,后台获取的时候把页面输入的多个参数拼起来,中间用逗号隔开,当做一个字符串去处理,然后拼sql的时候也当做字符串处理, 只要最后拼出来的sql 是ok的就行了。
不所谓先生 2013-11-18
  • 打赏
  • 举报
回复
比如输入的是 1,2,3 这样的多个以逗号隔开的参数 那么我们在代码里就这么写了


String key_no = request.getParameter("key_no")==null?"":request.getParameter("key_no");
		String [] key_no_array = key_no.split(",");
		String sql = " select * from 表明  where 1=1  ";
		if(!key_no.equals("")){
			sql+=" and  字段  in( ";
			for(int i=0;i<key_no_array.length;i++){
				sql+="'"+key_no_array[i]+"'";
				if(key_no_array.length-1!=i){
					sql+=",";
				}
			}
			sql+=" ) ";
		}
随便写的 前提是你多个参数是用逗号隔开
shayebuhui0 2013-11-18
  • 打赏
  • 举报
回复
数组形式传递。
怀念昨天 2013-11-18
  • 打赏
  • 举报
回复
小弟新学的Java,能说的具体点吗,或者给个类似的例子可以吗,拜谢了
sliwey 2013-11-18
  • 打赏
  • 举报
回复
保证跟sql中需要的参数个数相同 多了就选正确的 少了就补上没传的

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧