StringBuffer的使用:
线程安全的可变字符序列。一个类似于 String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer上的主要操作是 append
和 insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。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();
}