多条件组合查询Sql语句巧用StringBuffer

本文介绍如何利用StringBuffer类构建动态SQL语句,包括条件判断与拼接技巧,适用于多条件组合查询场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer的使用:

线程安全的可变字符序列。一个类似于 String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而insert 方法则在指定的点添加字符。

在写sql语句时,先把各个条件加进去,然后对StringBuffer修改

先举一个简单的例子:

import java.util.Scanner;


public class TestStringBuffer {
	public static void main(String[] args) {
		StringBuffer sb=new StringBuffer("select * from tcmjkc where");
		Scanner scan=new Scanner(System.in);
		int i=scan.nextInt();
		int j=scan.nextInt();
		if(i>0){
			sb.append(" and helloii");			
		}
		else{
			sb.append(" and byebyeii");
		}
		if(j>0){
			sb.append(" and hellojj");			
		}
		else{
			sb.append(" and byebyejj");
		}		
		System.out.println(sb.toString().replaceFirst(" and", ""));
		//判定之后先把各个条件加进去,然后对StringBuffer修改
		//把第一个" and"去掉,注意and前面有一个空格
		//注意书写sql语句时,要严格注意格式,空格、单引号、双引号等	
	}
}
输出结果:

1 1
select * from tcmjkc where helloii and hellojj

在做组合查询时,可能会用到多个控件,这里以JRadioButton举例:

	//model组合查询
	//传入JRadioButton是否被选中,如果选中,就加入条件
	//先放入where,最后去掉第一个 " and"
	public ResultSet modelsearch(Connection con,Model model,JRadioButton fl_radioButton,JRadioButton hd_radioButton,JRadioButton kd_radioButton,JRadioButton kcsl_radioButton) throws Exception{
		StringBuffer sb=new StringBuffer("select * from tcmjkc where");
		PreparedStatement pstmt = null;
		if(fl_radioButton.isSelected()){
			sb.append(" and 分类 like'%"+model.getFl()+"%'");
		}
		if(hd_radioButton.isSelected()){
			sb.append(" and 厚度 like'%"+model.getHd()+"%'");
		}
		if(kd_radioButton.isSelected()){
			sb.append(" and 宽度 like'%"+model.getKd()+"%'");
		}
		if(kcsl_radioButton.isSelected()){
			sb.append(" and 库存数量 = "+model.getKcsl());
		}
		if(!fl_radioButton.isSelected()&&!hd_radioButton.isSelected()&&!kd_radioButton.isSelected()&&!kcsl_radioButton.isSelected()){
			//如果都没有选中,就去掉where
			//20.26
			sb.delete(20, 26);
		}else{	 	
			pstmt=con.prepareStatement(sb.toString().replaceFirst(" and", ""));
		}
		return pstmt.executeQuery();
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值