1、第七章 JSP中数据库的使用,西南科技大学网络教育系列课程 动态网页设计(JSP),数据库应用开发简介,作为有效的数据存储和组织管理工具,数据库的应用日益广泛,目前主流的数据库产品有Oracle、SQL Server、DB2和SyBase等多种。在数据库开发领域中,有三个方面需要掌握:SQL语言、ODBC数据访问接口和JDBC数据库访问接口。,SQL语言概述,SQL(Structured Query Language)是关系型数据库的标准语言,是由国际标准组织提出的,各种关系型数据库都支持SQL指令,Oracle在基本的SQL基础上进行了扩充。,SQL集DDL(Data Definition
2、Language:数据定义语言),DML(Data Manipulation Language:数据操作语言)和DCL(Data Control Language:数据控制语言)于一体。用SQL语言可以实现数据库生命周期的全部活动。,SQL语句有如下的两大特点,(1)SQL是一种类似于英语的语言,很容易理解和书写。,(2)SQL语言是非过程化的语言(第四代语言)。,ODBC数据访问接口,开放式数据库互连ODBC(Open DataBase Connectivity)是微软公司开发的一套开发数据库系统应用程序接口规范,它支持应用程序以标准的ODBC函数和SQL语句操作各种不同的数据库。,JDBC
3、数据访问接口,为支持Java程序的数据库操作功能,Java语言采用了专门Java数据库编程接口(JDBC,Java DataBase Connectivity),用于在Java程序中实现数据库操作功能并简化操作过程。JDBC支持基本SQL语句,提供多样化的数据库连接方式,为各种不同的数据库提供统一的操作界面,SQL语句分类,基本SQL语句,基本的SQL语句包括DQL和DML。也就是对数据库最常用的四大基本操作:查询(Select)、插入(Insert)、更新(Update)和删除(Delete),查询语句,SELECT 字段名 FROM 数据表 WHERE 筛选条件,SELECT * FROM
4、 grade WHERE数学=80 or 语文=90,SELECT * from userTable where user_age in 20,22,25,SELECT * from userTable where user_name like 王%,SELECT * from userTable where user_name is null,DML的基本格式,(1)DELETE指令:删除数据记录。 基本语法:DELETE FROM 数据表 WHERE 条件 例:DELETE from grade WHERE 数学=0 功能说明:删除所有数学成绩为零的记录,如果没有WHERE子句,则删除所有
5、记录。,(2)UPDATE指令:更新数据记录。 基本语法:UPDATE 数据表 SET 字段值=新值 WHERE条件 例1:UPDATE grade SET 数学=数学+10 说明:将grade表中所有人的成绩加10分 例2:UPDATE grade SET 数学=100 WHERE 姓名 like %敏%,功能说明:将姓名中含有敏的人的数学成绩更新为100分,INSERT INTO指令,功能说明:该语句等价于: INSERT INTO grade(学号, 姓名, 语文, 数学, 英语) VALUES (5678, 周润发,70,80,90),(3)INSERT INTO指令:添加数据记录。,
6、基本格式1:INSERT INTO 数据表 VALUES (字段新值) 基本格式2:INSERT INTO 数据表(字段一,字段二,) VALUES (字段新值),其中关键字两种格式的区别是:当values含有数据库表所有字段的值,并且顺序和数据库字段一致时,就可以省略数据库表后面的字段名称。,例1:INSERT INTO grade(学号, 姓名, 数学) VALUES (1234, 周润发,70) 例2:INSERT INTO grade VALUES (5678, 周润发,70,80,90),JDBC的四种类型,目前,比较常见的JDBC驱动程序可分为以下4种类型:,(1)JDBC-ODB
7、C桥加ODBC驱动程序:JDBC-ODBC桥产品利用ODBC驱动程序提供JDBC访问。在服务器上必须可以安装ODBC驱动程序。,(2)本地API:这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。,(3)JDBC网络纯Java驱动程序:这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。,第3类和第4类驱动程序将成为JDBC访问数据库的首选方法。第1类和第2类驱动程序在直接的纯Java驱动程序还
8、没有上市前会作为过渡方案来使用。,(4)本地协议纯Java驱动程序:这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。,ODBC数据源,ODBC配置,数据驱动程序,使用JDBC的第一步是安装驱动程序。大多数数据库都有JDBC驱动程序,常用的JDBC驱动程序如图所示。,Driver,连接数据库前先要加载驱动程序,import java.sql.*,Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);,Class.forName(“jdbc.driv
9、er_class_name”);,com.microsoft.jdbc.sqlserver.SQLServerDriver,org.gjt.mm.mysql.Driver,Oracle.jdbc.driver.OracleDriver,Connection对象,public static Connection getConnection(String url, String user, String password) throws SQLException,建立是建立与数据库之间的连接,也就是创建一个Connection的实例。DriverManager类的getConnection()方法
10、将建立数据库的连接:,在程序的最后,应该关闭Connection对象:public void close() throws SQLException,SQL Server下的URL: jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=xx,Connection接口的方法,public Statement createStatement() throws SQLException,public void commit() throws SQLException,public boolean getAutoCommit() throws S
11、QLException,public CallableStatement prepareCall(String sql) throws SQLException,Statement对象,Statement对象用于将SQL语句发送到数据库中。 存在3种Statement对象:,(1)Statement;,(2)PreparedStatement(从Statement继承而来);,(3)CallableStatement(从PreparedStatement继承而来)。,Statement接口,Statement接口提供了两种执行SQL语句的常用方法:,public ResultSet execu
12、teQuery(String sql) throws SQLException用于产生单个ResultSet的语句,例如SELECT语句。,public int executeUpdate(String sql) throws SQLException用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,例如CREATE TABLE和DROP TABLE。该方法返回一个整数,指示受影响的行数。,ResultSet对象,ResultSet包含符合SQL语句执行结果所有行,并且它通过一套get方法提供了对这些行中数据的访问,常用的get方法有:,int getInt(int
13、columnIndex),取得当前行中第columnIndex列的整数的值。 int getInt(String columnName),取得当前行中列名为columnName的整数的值。 其他方法: getDate(int columnIndex) getDate(String columnName) getString(int columnIndex) ,getString(String columnName),ResultSet维护指向其当前数据行的光标,让光标向下移动一行的方法是: public boolean next() throws SQLException,利用While循环获
14、取数据表中所有记录,利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。语法结构:while(rs.next() rs.getXXX(“字段名称”); ,结果集类型,结果集类型有3种:,ResultSet.TYPE_FORWORD_ONLY:指定ResultSet对象是不可滚动,这是默认值。,ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet对象是可滚动的,但是对数据
15、库中修改不敏感。,ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet对象是可滚动的,而且对数据库的修改敏感。,修改对结果集的影响,结果集的并发性,结果集的并发性(Concurrency)决定ResultSet对象是否可以修改数据库中的行。可以使用ResultSet类中定义的int常量来指定结果集的并发性。,ResultSet.CONCUR_READ_ONLY,指定ResultSet对象不能修改数据库,默认值。,ResultSet.CONCUR_UPDATABLE,指定ResultSet对象可以修改数据库,总结:JDBC访问数据库基本方法,数据访问基本格式,Class.forName(“JDBC驱动程序“);,Connection conn=DriverManager.getConnection(“相应JDBC驱动程序的连接串);,Statement stmt=conn.createStatement();,ResultSet rs=stmt.executeQuery(“DQL语句“);/如果是数据查询,stmt.executeUpdate(“DML语句“);/如果是数据操作,