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

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();
	}


你可能感兴趣的:(数据库)