910 likes | 1.09k Views
JSP 程序设计. 第 5 章 JSP 中使用数据库. 主要内容. SQL Server 简介 SQL 语句简介 JDBC 概述、 JDBC 驱动程序类型、 JDBC 接口及其应用。 实例介绍 使用 JDBC 访问 SQL Server 、 DB2 、 ACESS 等数据库的方法和步骤 。. SQL Server 简介. 1.Microsoft SQL Server 2000 的几个版本 企业版:支持 Microsoft SQL Server 2000 的所有功能。最多支持 32 个 CPU 和 64GB 内存。用于企业。
E N D
JSP程序设计 第5章JSP中使用数据库
主要内容 • SQL Server简介 • SQL语句简介 • JDBC概述、JDBC驱动程序类型、JDBC接口及其应用。 • 实例介绍 使用JDBC 访问SQL Server、DB2、ACESS等数据库的方法和步骤 。 2
SQL Server简介 1.Microsoft SQL Server 2000的几个版本 • 企业版:支持Microsoft SQL Server 2000的所有功能。最多支持32个CPU和64GB内存。用于企业。 • 标准版:最多支持4个CPU和2GB内存。用于中小组织。 • 个人版:支持双CPU系统。用于移动用户。 • 开发人员版:用于开发人员。 3
SQL Server简介 2.产品的平台要求 ①硬件环境(典型要求) • 计算机 Pentium 166MHz及以上 • 内存 企业版64MB 标准版 32MB • 硬盘空间 完全安装180MB 典型安装170MB 最小安装65MB 客户端工具90MB 4
SQL Server简介 ②软件环境 版本 最低要求 企业版 Windows NT Server 4.0 标准版 Windows 2000 Server Windows NT Server Enterprise Edition 4.0 Windows 2000 Advanced Server Windows 2000 Data Center Server 个人版 MS Windows 98 MS Windows NT Workstation 4.0 MS Windows 2000 Professional MS Windows NT Server 4.0 MS Windows 2000 Server 所有版本 IE5.0 5
SQL Server简介 作为一个完善的数据库管理系统,SQL Server 2000提供了功能强大而又使用方便的数据库管理工具。其中,企业管理器是最主要的管理工具,绝大部分的数据库管理工作都可以在企业管理器中完成。企业管理器以树型结构的形式来管理SQL Server数据库服务器、数据库以及数据库中的对象。 7
SQL Server简介 在企业管理器的左边的树型结构中,根节点是“控制台目录”,表示它是所有服务器控制台的根。在第一层节点上有一个默认的节点是SQL Server,所有的服务器组都是它的子节点。 用户可以在Microsoft SQL Server节点下面,自己定义新的服务器组。服务器一般按照不同的用途和功能对服务器进行父类。比如可以把所有执行Web数据库应用的服务器全都放在名为WEBSERVERS的服务器组下面。 8
SQL Server简介 在每个服务器下面是该服务器的所有管理对象和可以执行的管理任务,分为“数据库”、“数据转换服务”、“管理”、“安全性”、“复制”和“支持服务”6大类。每一类下面还可以进一步细分。 9
SQL Server 2000 系统有四种系统数据库: master:它记录所有的登录帐户和系统配置设置等信息。 model:用作在系统上创建的所有数据库的模板。 msdb:供 SQL Server 代理程序调度警报和作业以及记录操作员时使用。 tempdb:保存所有的临时表和临时存储过程。 SQL Server 2000 系统有两个样本数据库: pubs :存储某个出版社的图书、作者等信息。 Northwind :存储某个贸易公司的产品、定单等信息。 10
SQL Server简介 • 新建数据库 2.输入新建数据库的名称,按“确定”按钮即可。 1.选中“数据库”,单击右键,在快捷菜单中选择“新建数据库” 11
SQL Server简介 • 新建数据库表 2.按照设计要求建立表结构。最后给新建的表命名并保存即可。 1.选中某个数据库中的“表”对象,单击右键,在快捷菜单中选择“新建表” 12
SQL Server简介 • 向表中插入数据 1.选中数据库中某个需要录入数据的“表”,单击右键,在快捷菜单中选择“打开表”,再选择其中的返回虽有的行,即可手工录入数据。也可用Insert语句插入数据。 13
SQL简介 • 查询 SELECT … — 查询内容 FROM … — 表名 [WHERE …] — 查询条件(可选择满足条件 的特定的记录) [GROUP BY …] — 分组内容 [HAVING …] — 组内条件 [ORDER BY …] — 排序内容 • 插入 INSERT INTO tableName(column1,column2,….) VALUES (values1,values2,….) 14
SQL简介 • 更新 UPDATE tableName SET column1=values1, cloumn2=values2, … [WHERE…] • 删除 DELETE FROM tableName [WHERE…] 15
JDBC概述 JDBC (Java Data Base Connectivity) 是Java数据库连接技术的简称。JDBC 是一种用于执行SQL语句的Java API,它由一组用Java 编写的类和接口组成。为各种常用数据库提供无缝连接技术。也就是说,可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。只需一个数据库访问程序,就可以实现对各种不同数据库的访问,这充分体现了Java语言的平台无关性。 16
JDBC概述 JDBC API不仅支持数据库访问的两层模型,同时也支持三层模型。 所谓两层模型,就是JDBC API中有两层接口:应用程序层(开发人员用API通过SQL调用数据库和取得结果);驱动程序层(处理与具体驱动程序版本的所有通信)。 而在三层模型中,命令先是被发送到服务的“中间层”,SQL语句由中间层否则发送给数据库,数据库将处理结果通过中间层送回给用户。三层模型的优点在于用户可以使用易用的高级API,相应的低级调用的转换由中间层完成。 17
JDBC概述 用JDBC访问数据库要经过一项几个步骤: • 与数据库建立连接 注册JDBC驱动程序、连接到数据库以及从数据库断开. • 发送SQL 语句 支持基本的数据库调用:数据库操纵语言(DML)、数据库定义语言(DDL)。 • 处理结果 JDBC支持使用java.sql.ResultSet对象的结果处理。ResultSet对象基本功能包括遍历查询结果、在结果集的行中向前和向后滚动、检索或更新每行中的列值。 18
JDBC驱动程序 JDBC的数据库访问要通过JDBC驱动程序来完成,JDBC驱动程序在Java应用程序与物理数据库之间架起了一座桥梁。 • JDBC-ODBC Bridge • JDBC Native Bridge • JDBC-Network Bridge • Pure Java JDBC Drive 19
JDBC驱动类型 Java 数据源 应用程序 JDBC-ODBC ODBC JDBC ODBC层 API 桥 API JDBC-ODBC Bridge(类型1) 通过JDBC-ODBC桥,可以使用JDBC访问ODBC数据源JDBC-ODBC桥驱动程序为Java应用程序提供了一种把JDBC调用映射为ODBC调用的方法来存取数据库。客户端机器上需要安装一个ODBC驱动。JDBC-ODBC桥的驱动器,通常只运行在Microsoft Windows系统,体现不出JDBC平台无关行的好处。 20
JDBC Native Bridge(类型2) Java 应用程序 数据源 厂商专 JDBC JDBC驱动 用API API 程序 JDBC驱动类型 JDBC本地桥提供了一个建立在本地数据库驱动上的JDBC接口。JDBC驱动将标准的JDBC调用转变为对特定数据库API的调用,进而存取数据库,因此必须先在客户机上安装好特定数据库的数据访问API才能使用。这些驱动程序大多数都提供比使用JDBC-ODBC桥驱动程序更好的性能。 21
JDBC-Network Bridge(类型3) Java 数据源 应用程序 JDBC JDBC JDBC驱动 本机 驱动程序 驱动程序 API 程序 服务器 JDBC驱动类型 这种驱动程序将JDBC调用转换为与DBMS无关的网络协议,然后将数据库访问请求传输给JDBC驱动程序服务器组件,最后该服务器组件将访问请求转换为某种特定DBMS的协议。这种网络服务器中间件安装在服务器端,能够将它的Java客户机连接到多种不同的数据库上。 22
Pure Java JDBC Drive(类型4) Java 数据源 应用程序 JDBC驱动 JDBC API 程序 JDBC驱动类型 这种类型的驱动程序是最成熟的JDBC驱动程序。不需要在客户机上安装任何额外的驱动程序,也不需要在服务器端安装任何中间件。客户端的JDBC请求可以直接转换成特定数据库所使用的网络协议,所有存取数据库的操作,都直接由驱动程序来完成。 23
JDBC API及其应用 • DriverManager • Connection • Statement • ResultSet 24
DriverManager类 DriverManager类用于管理JDBC驱动程序。在使用JDBC驱动程序之前,必须先将驱动程序加载并向 DriverManager (驱动程序管理器)注册后才可以使用。DriverManager类不仅提供了注册JDBC驱动的方法,同时也提供与数据建立连接的方法。 25
DriverManager类 DriverManager类提供的主要方法如下: • Class.forName(String driver) 用于加载注册驱动程序。 driver给出要用到的Class的name(数据库驱动的名称)。Class是包java.lang中的一个类,该类提供静态方法forName建立与数据库驱动间的连接。在使用Class.forName之前,应先导入import 语句: import java.sql.*; 26
示例 • 连接JDBC-ODBC桥驱动 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); • 连接SQL Server JDBC驱动 Class.forName(“com.microsoft.jdbc.sqlserver. SQLServerDriver”); • 连接DB2 JDBC驱动 Class.forName(“com.ibm.db2.jdbc.app.DB2Driver"); • 连接mySQL JDBC驱动 Class.forName(“org.gjt.mm.mysql.Driver”); • 连接Oracle JDBC驱动 Class.forName(“oracle.jdbc.driver.OracleDriver”); 27
DriverManager类 • Static Connection getConnection(String url, String user, String password) 创建和指定数据库的连接。也就是在已经向DriverManager注册的驱动程序中寻找一个能够打开url所指定的数据库的驱动程序。 Connection是java.sql包中的一个类。该方法返回的是一个Connection对象(连接对象)。 Connection conn = DriverManager.getConnection (URL,user,password); 28
DriverManager类 • getConnection()方法的执行过程如下: ① 首先解析JDBC URL,然后搜寻系统内所有已注册的JDBC驱动程序,直到找到符合JDBC URL设定的通讯协议为止。 ② 如果寻找到符合的JDBC驱动程序,则DriverManager就建立新的数据库连接;否则就返回一个null,然后继续查询其他驱动程序。 ③ 如果最后无法找到适当的JDBC驱动程序,以至于无法顺利建立数据库连接,Java应用程序将抛出一个SQLException异常。 29
JDBC URL语法格式 URL是一个字符串,代表了将要连接的数据源,即具体的数据库位置。语法格式如下: jdbc : <sub-protocol> : <sub-name> • jdbc是URL中所用的数据库驱动程序类型关键字; • sub-protocol是驱动程序名或用户要连接的数据库的类型; • sub-name:标识数据库。为定位数据库提供足够的信息。如果数据库是通过Internet访问的,则应将网络地址作为子名称的一部分包括进去,且必须遵循标准的URL命名约定: //主机名: 端口: 数据库名 30
示例 • 通过ODBC连接数据库的例子如下: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection Conn = DriverManager.getConnection(“jdbc:odbc:manage”,“sa”,“111000”); 31
Connection类 Connetion类用于维护Java数据库应用程序与数据库之间的连接。就是在已经加载的Driver和数据库之间建立连接。必须创建一个Connection类的实例,其中包括数据库的信息。 连接过程包括所执行的SQL语句和在该连接上所返回的结果。一个应用程序可以与单个数据库有一个或多个连接,也可以与多个数据库建立连接。 32
Connection类 Connection类的方法比较多,主要方法如下: • Statement createStatement() 用于创建Statement类对象 • DatabaseMetaData getMetaData() 用于创建DatabaseMetaData类对象 • PreparedStatement prepareStatement(String sql) 用于创建PreparedStatement类对象 • boolean getAutoCommit() 用于返回Connection类对象的AutoCommit状态。 33
Connection类 Connection类的方法比较多,主要方法如下: • void setAutoCommit(boolean autoCommit) 用于设定Connection类对象的AutoCommit状态 • void commit() 确定执行对数据库新增、删除或修改记录的操作。 • void rollback() 取消执行对数据库增、删、改的操作。 • void close() 关闭Connection对象与数据库的连接 • boolean isClosed() 用于测试是否已经关闭了和数据库的连接。 34
Statement类 建立起与数据库的连接,就可以执行标准的SQL语句,用来完成对数据库插入、删除或修改等操作。Statement类或者它的子类PreparedStatement类、CallableStatement类,可以处理这种交互作用。 Statement类的对象用于给数据库发送SQL语句。通过使用Connection对象的createStatement( )方法,可得到Statement对象。 35
说 明 Statement类的方法executeQuery( )采用字符型变量,返回ResultSet对象。传入的变量应该是有效的SQL查询。 String sql = "select * from user where code='7102'"; ResultSet rs = Statement.executeQuery(sql); while(rs.next( )) { // process the row } 37
示例 • 下面的代码片段说明了如何执行一个数据表查询操作: String sql = "select * from userinfo"; ResultSet rs = statement.executeQuery(sql); • 下面的代码片段说明了如何执行数据插入操作: String sql = "insert into userinfo values('7107 ','宋晓一', 'xiaoyi@yahoo.com')"; int rowCount = statement.executeUpdate(sql); 38
PreparedStatement类 • PreparedStatement类是Statement类的子类,代表了一条预编译的SQL语句。 • 预编译语句的含义是:SQL语句传送给RDBMS,被编译、优化与缓存。因为语句不需要在每次执行时由数据库编译与优化,所以语句重复执行的整体性能被大大提高了。 39
示例 • 例如,对于下面的查询字符串: String sql = "SELECT * FROM userinfo WHERE name = ? "; • 查询字符串中的“?”用于每个输入参数的占位符。这些占位符对应于数据库中的变量,称为绑定变量。 • 使用绑定变量的查询将被编译一次,随后把查询计划存储在共享池中,可以从中检索和重用它。 40
创建一个PreparedStatement对象可以使用Connection对象的prepareStatement( )方法,如果Connection对象为conn,则创建PreparedStatement对象prepare的语句为: String sql = "SELECT * FROM userinfo WHERE name = ? "; PreparedStatement prepare = conn.prepareStatement(sql); 这样在PreparedStatement对象创建的同时,就将带有参数的SQL语句作为参数传递给了它。 41
CallableStatement类 • CallableStatement类是PreparedStatement的子类,它同时拥有PreparedStatement及其超类Statement的所有功能。 • 它允许在数据库上调用匿名块或存储过程和函数。 42
DatabaseMetaDate类 DatabaseMetaDate类保存了数据库的所有属性,并且提供了获取这些属性信息的方法 • String getDatabaseProductName() • String getDatabaseProductVersion() • String getDriverName() • String getDriverVersion() • String getURL() • String getUserName() 43
ResultSet类 ResultSet类负责存储数据查询的结果。同时,它还提供一些方法对数据库进行随机插入、删除和修改操作,这种随机性是通过它维护的一个记录指针(Cursor)的适当移动来实现的。 44
可被更新和滚动的结果集 Statement st=connection.createStatement (int 指针类型参数,int 数据一致性参数); • 将这两个参数有机地组合起来,就可以实现ResultSet对象的滚动和更新操作。 45
指针类型参数 46
数据一致性参数 47
示例 • 下面的语句将从Statement对象创建的ResultSet对象设定为将既可以滚动,又可以更新: Statement st=connection.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 48
ResultSet的方法 49
ResultSet的方法 50