西南科技大学网络教育系列课程 动态网页设计(JSP) 第七章 JSP中数据库的使用
数据库应用开发简介 作为有效的数据存储和组织管理工具,数据库的应用日益广泛 目前主流的数据库产品有Oracle、SQL Server、DB2和SyBase等多种。 在数据库开发领域中,有三个方面需要掌握:SQL语言、ODBC数据访问接口和JDBC数据库访问接口。
SQL语言概述 SQL(Structured Query Language)是关系型数据库的标准语言,是由国际标准组织提出的,各种关系型数据库都支持SQL指令,Oracle在基本的SQL基础上进行了扩充。 SQL语句有如下的两大特点 (1)SQL是一种类似于英语的语言,很容易理解和书写。 (2)SQL语言是非过程化的语言(第四代语言)。 SQL集DDL(Data Definition Language:数据定义语言),DML(Data Manipulation Language:数据操作语言)和DCL(Data Control Language:数据控制语言)于一体。用SQL语言可以实现数据库生命周期的全部活动。
ODBC数据访问接口 开放式数据库互连ODBC(Open DataBase Connectivity)是微软公司开发的一套开发数据库系统应用程序接口规范,它支持应用程序以标准的ODBC函数和SQL语句操作各种不同的数据库。
JDBC数据访问接口 为支持Java程序的数据库操作功能,Java语言采用了专门Java数据库编程接口(JDBC,Java DataBase Connectivity),用于在Java程序中实现数据库操作功能并简化操作过程。JDBC支持基本SQL语句,提供多样化的数据库连接方式,为各种不同的数据库提供统一的操作界面
SQL语句分类 SQL分类 描述 数据定义语言 (DDL) 数据定义语言(DDL)用于定义、修改或者删除数据库对象,如Create Table等 数据查询语言 (DQL) 数据查询语句(Data Query Language,DQL)用于对数据进行检索。如最常用的Select语句 数据操纵语言 (DML) 数据操纵语言(DML)用于访问、建立或者操纵在数据库中已经存在数据,如Select、Insert、Update和Delete等等。 事务控制语言 (TCL) 事务控制语言(Transact Control Language)管理DML语句所做的修改,是否保存修改或者放弃修改。如:Commit、Rollback、Savepoint、Set Transaction等命令。 数据控制语言 (DCL) 数据控制语言(DCL)管理对数据库内对象的访问权限和授予和回收,如Grant、Revoke等等。
基本SQL语句 基本的SQL语句包括DQL和DML。也就是对数据库最常用的四大基本操作:查询(Select)、插入(Insert)、更新(Update)和删除(Delete)
查询语句 SELECT 字段名 FROM 数据表 WHERE 筛选条件 SELECT * FROM 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的基本格式 基本语法:DELETE FROM 数据表 WHERE 条件 例:DELETE from grade WHERE 数学=0 (2)UPDATE指令:更新数据记录。 基本语法:UPDATE 数据表 SET 字段值=新值 WHERE条件 例1:UPDATE grade SET 数学=数学+10 说明:将grade表中所有人的成绩加10分 例2:UPDATE grade SET 数学=100 WHERE 姓名 like '%敏%' 功能说明:将姓名中含有敏的人的数学成绩更新为100分
INSERT INTO指令 (3)INSERT INTO指令:添加数据记录。 基本格式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) 功能说明:该语句等价于: INSERT INTO grade(学号, 姓名, 语文, 数学, 英语) VALUES (5678, '周润发',70,80,90)
JDBC的四种类型 目前,比较常见的JDBC驱动程序可分为以下4种类型: (1)JDBC-ODBC桥加ODBC驱动程序:JDBC-ODBC桥产品利用ODBC驱动程序提供JDBC访问。在服务器上必须可以安装ODBC驱动程序。 (2)本地API:这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。 (3)JDBC网络纯Java驱动程序:这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。 (4)本地协议纯Java驱动程序:这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。 第3类和第4类驱动程序将成为JDBC访问数据库的首选方法。第1类和第2类驱动程序在直接的纯Java驱动程序还没有上市前会作为过渡方案来使用。
ODBC数据源 ODBC配置
数据驱动程序 使用JDBC的第一步是安装驱动程序。大多数数据库都有JDBC驱动程序,常用的JDBC驱动程序如图所示。
Driver 连接数据库前先要加载驱动程序 import java.sql.* Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Class.forName(“jdbc.driver_class_name”); com.microsoft.jdbc.sqlserver.SQLServerDriver org.gjt.mm.mysql.Driver Oracle.jdbc.driver.OracleDriver
Connection对象 建立是建立与数据库之间的连接,也就是创建一个Connection的实例。DriverManager类的getConnection()方法将建立数据库的连接: public static Connection getConnection(String url, String user, String password) throws SQLException 在程序的最后,应该关闭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 Statement createStatement() throws SQLException public boolean getAutoCommit() throws SQLException 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 executeQuery(String sql) throws SQLException 用于产生单个ResultSet的语句,例如SELECT语句。 public int executeUpdate(String sql) throws SQLException 用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,例如CREATE TABLE和DROP TABLE。该方法返回一个整数,指示受影响的行数。
ResultSet对象 int getInt(int columnIndex),取得当前行中第columnIndex列的整数的值。 ResultSet包含符合SQL语句执行结果所有行,并且它通过一套get方法提供了对这些行中数据的访问,常用的get方法有: int getInt(int 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循环获取数据表中所有记录 利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。 语法结构: while(rs.next()) { rs.getXXX(“字段名称”); …… }
结果集类型 结果集类型有3种: ResultSet.TYPE_FORWORD_ONLY:指定ResultSet对象是不可滚动,这是默认值。 ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet对象是可滚动的,但是对数据库中修改不敏感。 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语句");//如果是数据操作