第四章 数据库应用开发案例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%的人还看了以下文章

  • 【深度学习】:3分钟入门Dropout层

    深度神经网(DNN)中经常会存在一个常见的问题:模型只学会在训练集上分类(过拟合现象),dropout就是为了减少过拟合而研究出的一种方法。

    2023年1月15日
    7.9K0
  • GitHub是什么?GitHube有什么用?GitHub学习入门(精)

    GitHub是什么? gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。 Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。  好吧,我相信看到这里你已经晕了,这也是我一开始看那些所谓经典教程的感受。 简单来…

    2018年8月24日
    9.1K0
  • 第三章 JSP技术2:JSP的内置对象及使用

    内置对象:为简化Web页面的开发过程,JSP提供了一些内置对象,这些对象不用声明就可以在JSP页面中直接使用,是JSP引擎自动创建的Java类实例。
    request对象
    response对象
    out对象
    session对象
    application对象

    2018年2月2日
    2.9K0
  • 单元测试环境、过程及任务,单元测试快速入门教程二

    单元测试环境及过程 单元测试环境 单元测试环境的建立是单元测试工作进行的前提和基础,在测试过程中起到的作用不言而喻。单元测试环境并不一定是系统投入使用后所需的真实环境,可采用模拟环境。 由于一个模块或一个方法(Method)不是一个独立的程序,在测试时要考虑它和外界的联系,因此要用到一些辅助模块来模拟与所测模块相联系的其它模块。辅助模块分两种: 驱动模块:相…

    2018年4月16日
    9.9K0
  • 开发软件,编程语言Java和C++选哪个?

    根据网络调查数据:编程语言排名前三的是Java、C#、C++。 其中Java使用者比例最高,为42.82%,是C#的两倍还要多。 紧跟其后的是C#,比例为17.33%。 排名第三的C++则有14.35%的比例。 JAVA和C++都是面向对象语,都能够实现面向对象思想(封装,继乘,多态)。而由于C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带…

    2021年2月16日
    6.9K0
  • oracle 计算时间差,包含年、月、日、时、分、秒

    在做系统时,如图书管理系统、车辆管理系统、事务管理系统等,经常需要我们计算两个日期相差多少天,图书是否应该归还,事情是否完成等。 今天给大家分享oracle 中如何计算时间差! oracle时间差是以天数为单位,所以换算成年月,日 select floor(to_number(sysdate-to_date(‘2018-11-02 15:55:03’,’yy…

    2018年2月13日
    4.9K0

发表回复

登录后才能评论