模糊查询一般是通过一个输入框输入关键词,然后点击搜索进行检索,执行的是数据的模糊查询;
语句示例:
select * from student where stuName like '%
关键词
%';
模糊查询的基础版代码如下:
因为
sql
语句是
select * from student where stuName like ?
;
所以传参的时候需要对关键词进行前后
%
的拼接:
String keyword="a"; //
后期是通过页面获取用户输入的关键词
pstm.setObject(1,"%"+keyword+"%"); //
对关键词进行前后
%
的拼接
/**
* 模糊查询
*/
@Test
public void testSeach() throws Exception {
//1.导入jar包
//2.加载驱动
Class.forName(driver);
//3.获取数据库连接
Connection con = DriverManager.getConnection(url, username, password);
//4.获取预处理对象
String sql="select * from student where stuName like ?";
PreparedStatement pstm = con.prepareStatement(sql);
//5.传参并执行sql
String keyword="a"; //后期是通过页面获取用户输入的关键词
pstm.setObject(1,"%"+keyword+"%"); //对关键词进行前后%的拼接
ResultSet rs = pstm.executeQuery();
//6.解析结果集,模糊查询有可能查到很多条数据,所以定义集合存储
List<Student> studentList=new ArrayList<>();
while (rs.next()){
Student student=new Student();
//通过rs根据字段名获取数据库表中的数据,然后把数据封装到Student对象中
student.setStuId(rs.getInt("stuId"));
student.setStuName(rs.getString("stuName"));
student.setStuSex(rs.getString("stuSex"));
student.setStuAge(rs.getInt("stuAge"));
student.setStuAddr(rs.getString("stuAddr"));
//把当前的student对象存储到list集合中
studentList.add(student);
}
//打印输出
System.out.println(studentList);
//7.资源的释放
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}
模糊查询的进阶版代码如下:
在
mysql
中
concat()
函数使用来做字符串的拼接;
select * from student where stuName like concat('%',?,'%')
的意思就是自动给
?
拼接前后的 %;
那么在传参的时候直接把关键词传参给
?
即可,不在需要在传参的时候进行拼接。
String keyword="a"; //
后期是通过页面获取用户输入的关键词
pstm.setObject(1,keyword); //
直接把关键词传参给预处理对象的
?
/**
* 模糊查询
*/
@Test
public void testSeach() throws Exception {
//1.导入jar包
//2.加载驱动
Class.forName(driver);
//3.获取数据库连接
Connection con = DriverManager.getConnection(url, username, password);
//4.获取预处理对象
String sql="select * from student where stuName like concat('%',?,'%')";
PreparedStatement pstm = con.prepareStatement(sql);
//5.传参并执行sql
String keyword="a"; //后期是通过页面获取用户输入的关键词
pstm.setObject(1,keyword);
ResultSet rs = pstm.executeQuery(); //直接把关键词传参给预处理对象的 ?
//6.解析结果集,模糊查询有可能查到很多条数据,所以定义集合存储
List<Student> studentList=new ArrayList<>();
while (rs.next()){
Student student=new Student();
//通过rs根据字段名获取数据库表中的数据,然后把数据封装到Student对象中
student.setStuId(rs.getInt("stuId"));
student.setStuName(rs.getString("stuName"));
student.setStuSex(rs.getString("stuSex"));
student.setStuAge(rs.getInt("stuAge"));
student.setStuAddr(rs.getString("stuAddr"));
//把当前的student对象存储到list集合中
studentList.add(student);
}
//打印输出
System.out.println(studentList);
//7.资源的释放
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}
必须在一行内输入完,而不能用回车符分段,因为vbs多行被认为是多个语句,这是许多初写者常犯的错误。如果你想分多段写,可以用上面的方法在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内实现。在封闭引号之前或者在打开引号之后你需要增加空格,这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。