第四章 数据库应用开发案例2,案例示例
1、使用预处理语句实现学生信息查询功能
建立数据库连接(Connection)的目的是与数据库进行通信,执行SQL语句,需要创建Statement实例。
分为以下3种类型:
- Statement:只能用来执行静态的SQL语句;
- PreparedStatement:增加了执行动态SQL语句的功能;
- CallableStatement:增加了执行数据库存储过程的功能。
其中,Statement是最基础的,PreparedStatement继承了Statement,并做了相应的扩展,而CallableStatement继承了PreparedStatement,又做了相应的扩展,从而保证在基本功能的基础上,各自又增加了一些独特的功能。
PreparedStatement类
PreparedStatement类可以将SQL语句传给数据库做预编译处理,即在执行的SQL语句中包含一个或多个IN参数,可以通过设置IN参数值多次执行SQL语句,不必重新给出SQL 语句,这样可以大大提高执行SQL语句的速度。
所谓IN参数就是指那些在SQL语句创立时尚未指定值的参数,在SQL语句中IN参数用“?”号代替。例如:
PreparedStatement pstmt=conn.preparedStatement("SELECT * FROM student WHERE年龄>=? AND 性别=? ");
学生信息查询案例代码:
<% try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/employeeDb"; String username = "root";// 数据库用户名 String password = "root";// 数据库密码 Connection conn = DriverManager.getConnection(url,username,password); String sql = "select * from employee where age>? and salary>?"; PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setInt(1,18); pstmt.setFloat(2,3000); ResultSet rs= pstmt.executeQuery(); out.print("<table border=2>"); out.print("<tr>"); out.print("<th width=100>员工号</th>"); out.print("<th width=100>姓名</th>"); out.print("<th width=50>年龄</th>"); out.print("<th width=50>性别</th>"); out.print("<th width=50>薪水</th>"); out.print("<th width=50>部门</th>"); out.print("</tr>"); while(rs.next()) { out.print("<tr>"); out.print("<td >"+rs.getInt(1)+"</td>"); out.print("<td >"+rs.getString(2)+"</td>"); out.print("<td >"+rs.getString("age")+"</td>"); out.print("<td >"+rs.getString("sex")+"</td>"); out.print("<td >"+rs.getFloat("salary")+"</td>"); out.print("<td >"+rs.getString("department")+"</td>"); out.print("</tr>") ; } out.print("</table>"); rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { out.print(e.getMessage()); } %>
2、调用存储过程显示图书信息
MySQL存储过程的创建 格式 :CREATE PROCEDURE 过程名 ([过程参数[,…]]) [特性 …] 过程体
例子:
mysql>use db_book; mysql> DELIMITER // mysql> create procedure findAllBook() begin select * from tb_book order by id; end // mysql> DELIMITER ;
(1)DELIMITER是分割符的意思,因为MySQL默认以“;”为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符mysql> DELIMITER // ,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原mysql> DELIMITER ; 。
(2 )过程体的开始与结束使用BEGIN与END进行标识。
本章节内容已隐藏,发表评论后即可查看!
125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/1146.html