教学导入:
回顾Statement作用,对比与PreparedStatement区别
回顾拼接SQL语句的用法,引入“'”、空格等易错的示例。
导入导入本节知识点PreparedStatement用法和适用场合。
知识点:
预准备语句
预准备语句就是指预先编译好的SQL语句。向数据库系统发送的是预先编译好的SQL语句
另外一个重要特点,就是可以给预编译SQL语句设置参数,这样能够在应用级别传递 SQL语句里的重要参数,无疑大大提高了应用程序的灵活性。
案例1:使用预准备语句完成“根据指定教师姓名查询职称"
视频:
包括预准备语句概述、语句Statement与预准备语句PreparedStatement的区别与案例、运行效果及小结。
案例2:JDBC完成表单查询应用(预准备语句)
实现功能:通过jsp页面表单完成查询条件的输入,点击表单按钮,能够根据查询条件获得查询结果并能在页面显示查询结果。
回顾上节课内容,将Statement换成预准备语句来处理。
Queryteacher.jsp:
<body>
<form action = "TeacherInfo.jsp" method = "post">
请输入待查询的教师姓名:<input type="text" name= "tname"></input>
<input type = "submit" value= "查询"></input>
</form>
</body>
Teacherinfo.jsp:
<body>
<%
request.setCharacterEncoding("utf-8");
String tname =request.getParameter("tname");
String psql ="select * from teacherinfo where teachername like ? ";
//System.out.println(sql);
//
try {
Connection con;
con = DriverManager.getConnection(
"jdbc:sqlserver://localhost;databaseName=salary", "sa",
"123456");
PreparedStatement pstat=con.prepareStatement(psql);
pstat.setString(1,tname+"%");
ResultSet rs2 = pstat.executeQuery();
while (rs2.next()) {
%>
<%=rs2.getString("teachername")%>
<%=rs2.getString("tno")%>
<%
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(psql);
%>
</body>
Statement/PreparedStatement区别:
SQL语句在执行前有一个编译过程,如果是发送后由SQLServer去编译,那么选择以前的编程方式(Statement)。如果希望在发送前在本地进行SQL语句的预编译,发送编译后的SQL语句到SQLServer,则使用预编译语句。
PreparedStatement stmt = con
.prepareStatement("select * from teacherinfo where teachernmae=?");
ResultSet rs = stmt.executeQuery();
如果未给预编译SQL语句设置参数如:
stmt.setString(1, "张");
则报错。
练习:
根据教师姓名进行模糊查询
String query= "SELECT * FROM teacherinfowhere teachername like ?";
String s=request.getParameter("teacherName");
PreparedStatementstmt = con.prepareStatement(query);
stmt.setString(1,"%"+s+"%");
ResultSet rs= stmt.executeQuery();
2. 按输入的年龄段条件输出年龄区间所有教师信息
参数化查询语句 "Select *from teacherinfo where age>=? and age<=?"
3.姓名或者职称进行组合查询
4.按姓名的部分信息或者性别进行组合查询
String query ="SELECT * FROM teacherinfo where teachername like ? or sex=?";
String s=request.getParameter("teacherName");
PreparedStatementstmt = con.prepareStatement(query);
stmt.setString(1,"%"+s+"%");
stmt.setString(2,"男");

