第四章 数据库应用开发案例2

本章重点讲述以下内容:
4.4 应用JDBC调用存储过程
4.5 数据源与连接池技术
4.6 数据库程序开发案例

第四章 数据库应用开发案例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

(2)
江山如画的头像江山如画管理团队
第四章 数据库应用开发案例1
上一篇 2018年2月7日 上午10:04
消除img图片与div下边界之间空白的三种方法
下一篇 2018年2月7日 下午8:27

99%的人还看了以下文章

  • 单元测试经验总结,单元测试快速入门教程六

    测试人员在进行测试的工作过程中,应该注意积累测试工作经验,这样可以缩短单元测试的时间,提高测试效果和效率。 如: 1.在做单元测试的过程中,要灵活选用测试用例设计技术,可以首先使用黑盒测试用例设计技术,然后根据相应的覆盖率统计再补充白盒测试用例。这样既减少了测试工作的重复,又保证了单元测试的完整性。 2.设计驱动程序时,要保证测试逻辑的正确性。否则,即使代码…

    2018年4月18日
    4.2K0
  • MySQL存储过程快速入门

    什么是存储过程 创建一个简单的存储过程 存储过程中的参数 存储过程的优势和不足 一、什么是存储过程 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。 存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能 MySQL…

    2018年12月20日
    3.6K0
  • 上机实战五 JavaBean的开发       

      建议学时:2 get方法 set方法 getProperty:获取bean的属性值 setProperty:设置bean的属性值 一、通过表单指定JavaBean的属性。 编写Goods.java(javaBean),定义商品名称、代号、价格,并提供相应的get\set方法。 编写Goods.jsp,页面效果如下,点击提交按钮,会调用javabean,将…

    2018年11月13日
    9.3K0
  • python pywifi库破解wifi密码提示“No module named ‘comtypes’”的解决方法

    在免费蹭网!破解WiFi密码的Python程序源码分享一文中,125建站网提供了详细的程序代码。 python中的pywifi库,利用它可以暴力破解一些简单的wifi密码,有些同学运行程序时提示错误:“No module named ‘comtypes’”! python中的No module named ‘comtypes’ 解释是…

    2023年1月29日
    4.2K0
  • 各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)

    java连接mysql数据库,数据库程序开发步骤首先就要加载JDBC驱动程序,不同版本的mysql数据库需要的MySQL数据库驱动程序jar包版本也不同。 不少同学问怎么下载java连接mysql的驱动jar包? 今天给大家分享:各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包) mysql-connector-java-5.1…

    2019年9月28日
    25.7K1
  • js中var a=b=1和var a=1,b=1的区别

    js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1。 那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下面的范例: 1、用var a=b=1的方式 由上图可以明显看出来,变量b的作用域已经是全局的了,因为在函数外可以调用到(可以正常的输出变量)。 2、用var …

    2022年3月19日
    6.2K0

发表回复

登录后才能评论