java程序设计教程第11章.ppt
,第11章 数据库编程,11.1 JDBC技术简介 11.2 JDBC的结构 11.3 JDBC驱动程序的类型 11.4 JDBC在数据库访问中的应用 11.5 JDBC综合应用示例 本章小结 习题,11.1 JDBC技术简介JDBC(Java DataBase Connectivity)是Java语言为了支持SQL功能而提供的与数据库相连的用户接口。JDBC中包括了一组由Java语言编写的接口和类,都独立于特定的DBMS,或者说它们可以和各种数据相关联,即独立于数据库管理系统DBMS的应用提供了能与多个不同数据库连接的通用接口。这对于数据库程序来说,想要访问多种数据库,只需要一个统一的接口就可以实现。,在Java中JDBC提供了Java访问数据库平台统一的API。JDBC实际上就是由Java实现的数据库访问中间件。程序员可以通过JDBC向各种关系型数据库发送SQL语句,只需要使用JDBC提供的几个类(对象)或接口即可,而不必为不同的数据库编写不同的程序。有了JDBC以后,对于数据库编程,程序员只需要在Java语言中使用SQL语言,使Java应用程序或Java Applet实现对分布在网络上的各种数据库的访问,而不用考虑底层具体DBMS的连接和访问过程。,JDBC由一组Java语言编写的接口和类组成,使用内嵌式的SQL,主要实现三大功能:(1)建立与数据库的连接;(2)执行SQL声明,向数据库发送SQL语句;(3)处理数据库返回的SQL执行结果。,JDBC支持基本的SQL功能,使用它可以方便地与不同的关系数据库建立连接,进行相关操作,无须再为不同的DBMS分别编写程序。JDBC是一种底层API,意味着它将直接调用SQL命令,同时也是构造高层API和数据库开发工具的基础。高层API和数据库开发工具应该使用户界面更加友好,使用更加方便和易于理解。不过所有这样的API最终将被翻译为像JDBC这样的底层API。两种基于JDBC的高层API,一种是SQL语言嵌入Java的预处理器,另一种是实现从关系数据库到Java类的直接映射,目前都正处于开发阶段。,由于JDBC带来的便捷,越来越多的程序员已经开始利用JDBC为基础的工具进行开发,使开发工作更加容易。而程序员同时也正在开发让最终用户更加容易访问数据库的应用程序,Java程序通过JDBC访问数据库的关系如图11-1所示。,图11-1 Java程序通过JDBC访问数据库,11.2 JDBC的结构11.2.1 JDBC APIJDBC API是面向程序员的,Java程序员通过调用此API可以实现连接数据库,执行SQL语句并返回结果集。JDBC API主要由一系列的接口定义所构成,主要的接口如表11-1所示。,11.2.2 JDBC Driver API面向底层的JDBC Driver API 主要是针对数据库厂商开发数据库底层驱动程序使用的,一般情况下用于开发应用程序的程序员用不到这些类库。Java的应用程序员通过SQL包中定义的一系列抽象类对数据库进行操作,而实现这些抽象类并完成实际操作,则是由数据库驱动器Driver运行的,最终保证Java程序员通过JDBC实现对不同数据库的操作。其结构如图11-2所示。,图11-2 JDBC Driver API结构图,11.3 JDBC驱动程序的类型目前比较常见的JDBC驱动程序可分为以下四种。1JDBC-ODBC和ODBC驱动程序这种驱动器通过ODBC驱动器提供数据库连接。JDBC在设计上和ODBC很类似,JDBC和数据库的连接方法之一是先建立起一个JDBC-ODBC桥接器。由于微软产品ODBC驱动程序已经被广泛应用,因此建立这种桥接器后,JDBC就有能力访问各种类型的数据库。使用这种驱动器,要求每一台客户机都要装入ODBC的驱动器。,2Native-API partly-Java Driver/本地API这种驱动方式将数据库厂商的特殊协议转化成Java代码以及二进制类码,使Java数据库客户与数据库服务器通信。各客户机使用的数据库可能各不相同,需要在客户机上装有相应DBMS的驱动程序。,3JDBC网络纯Java驱动程序这种驱动程序将JDBC指令转化成独立于DBMS的网络协议形式,再由服务器转化为特定DBMS的协议形式。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。有关DBMS的协议由各数据库厂商决定。这种驱动器可以连接到不同的数据库上,是最为灵活的JDBC驱动程序。将来也许所有这种解决方案的提供者都能提供适合于Intranet用的产品。为了使这些产品也支持广域网存取,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的要求。目前一些厂商已经开始将JDBC驱动程序加到他们现有的数据库中间件产品中。,4本地协议纯Java驱动程序这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这相当于客户机直接与服务器联系,是Intranet访问的一个很实用的解决方法。以上四种驱动程序中,后两种都是纯Java driver,相对效率更高,更具有通用性;但前两种比较容易获得,使用比较普遍一些。,11.4 JDBC在数据库访问中的应用JDBC与Acess、SQL Server、Oracle等各种数据库的连接,首先需要准备相应的运行环境,本例采用JDK1.5.0作为开发工具,使用Eclipse 3.2集成开发环境,可以提供一些演示功能。操作系统最好是Windows 2000或者Windows XP,并装好至少一种数据库。一个基本的JDBC程序开发编程步骤主要包含以下7步:,(1)引入相应的类和包(import java.sql.*)。(2)加载合适的JDBC驱动程序(Load the Driver)。(3)连接数据库(Connect to the DataBase)。(4)执行SQL语句(Execute the SQL):Connection.CreateStatement();.executeQuery();.executeUpdate()。,(5)从取得的ResultSet对象中获取结果(Retrieve the result data)。(6)将数据库中各种类型转换为Java中的类型,通过getXXX 方法(Show the result data)。(7)关闭(Close):close the resultset对象;close the statement对象;close the connection对象。下面按照JDBC编程步骤详细介绍JDBC在数据库访问中的应用。,11.4.1 建立与数据库的连接1设置数据源在数据库连接之前需要加载相应的数据源(采用JDBC-ODBC和ODBC驱动程序)。下面以SQL Server数据库为例简要说明如何设置数据源。一般是在控制面板的管理工具中打开ODBC项,出现ODBC数据源管理器对话框,然后选择User DSN选项卡,单击Add按钮,选择想为其安装数据源的驱动程序,并点击完成,接着会出现创建到SQL Server的新数据源,如图11-3所示。按照此向导一步步往下操作,直到数据源配置成功,具体步骤将在11.5节里详细介绍。,图11-3 设置数据源,2引入相应的类和包任何使用JDBC的源程序都需要输入java.sql包,即import java.sql.*,必要的时候还需要装载相应的JDBC-ODBC驱动程序的包,如import sun.jdbc.odbc.JdbcOdbcDriver。然后声明如下的对象:ResultSet rs=null;Connection conn=null;Connection代表和数据库的连接,连接过程包括所执行的SQL语句和该连接上返回的结果,3装载驱动程序与数据库连接之前还需要装载驱动程序。一般常用的是Class.forName()方法显示装载驱动,如果采用JDBC-ODBC和ODBC驱动程序,用下列代码装载:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class是java.lang包中的一个类,该类通过调用它的静态方法forName就可以建立JDBC-ODBC桥接器。执行该代码将装载驱动,并且在装载时,驱动将自动向JDBC注册自己。使用Class.forName()方法可能抛出异常,因此在驱动程序类有可能不存在时,需要捕获这个异常,标准是:,try/注册数据库Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/捕获异常catch(Java.lang.ClassNotFoundException e)System.err.println(e.getMessage();,4连接到数据库与数据库建立连接的标准方法是调用DriverManager.getConnection,该方法接受含有某个url的字符串。DriverManager类是JDBC管理层,尝试找到可与指定url所代表的数据库进行连接的驱动程序如下:String url=“jdbc:odbc:数据源名字”;Connection conn=DriverManager.getConnection(url,数据源登录名,数据源登录密码);,第一条语句定义了一个字符串变量,变量内容是一种JDBC连接所特定的URL。JDBC URL的标准语法是:jdbc:子协议:子名称,其中JDBCURL中协议总是jdbc。如果采用JDBC-ODBC桥驱动,JDBC URL以jdbc:odbc开始,余下URL通常是数据源名字或数据库系统。例如使用ODBC存取名为library的ODBC数据源,JDBCURL是jdbc:odbc:library。第二条语句通过调用getConnection方法创建与数据库的连接,并返回一个Connection对象。,11.4.2 执行查询语句与数据库建立连接成功后,就可以向所建立连接的数据库传送SQL语句,其中JDBC对能够被发送的SQL语句类型不加任何限制。在和数据库建立连接后,使用三种对象Statement、PreparedStatement和CallableStatement查询数据库。在建立了SQL对象后,这个对象就可以调用相应的方法实现对数据库的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中,也就是说,SQL语句对数据库的查询操作将返回一个ResultSet对象。,1StatementStatement对象实现对数据库的一般查询功能,在JDBC里面可采用Statement对象来实现发送SQL语句到数据库。Statement对象可把简单查询语句发送到数据库,允许执行简单的查询。,(1)创建对象。首先创建一个Statement对象,它封装代表要执行的SQL语句,并执行SQL语句以返回一个ResultSet对象,通过Connection类中的createStatement()方法来实现。对象执行后得到正确的结果:Statement stmt=con.createStatement();,(2)执行SQL查询语句,查询数据库中的数据。Statement接口有三个查询方法:executeQuery()、executeUpdate()和execute()。executeQuery()方法执行简单的选择查询,例如SELECT语句。executeQuery的参数是String对象,返回的是一个ResultSet类的对象。executeUpdate()方法执行SQL的UPDATE、INSERT或DELETE语句,返回整数值,并给出受查询影响的行数。,execute()方法中execute 用于执行返回多个结果集、多个更新计数或二者组合的语句,一般不需要此功能,如:ResultSet rs=stmt.executeQuery(“Select*from Student_info”);stmt.executeUpdate(update Student_info set age=20 where name=张杰);,2PreparedStatementPreparedStatement对象实现预编译方式执行SQL语句,由于Statement对象在每次执行SQL语句时都将该语句传给数据库,如果需要多次执行同一条SQL语句,就将导致执行效率特别低,此时可以采用PreparedStatement对象来封装SQL语句。Prepared对象可以将SQL语句传给数据库作预编译,以提高执行速度。另外,PreparedStatement对象允许执行参数化的查询,可以用不同的输入参数来多次执行编译过的语句。,(1)创建PreparedStatement对象:PreparedStatment pstmt=con.prepareStatement(“Select*from 学生信息表”);(2)执行查询语句:ResultSet rs=pstmt.exectueQuery();该条语句可以多次被执行,3CallableStatementCallableStatement对象主要用于执行数据库中的存储过程。存储过程是数据库已经存在的SQL查询语句,执行存储过程的结果同执行相应的SQL语句是一样的。,(1)创建CallableStatement对象,一般格式为“call procedurename()”,是不带输入参数的存储过程,其中procedurename是存储过程的名称。带输入参数的存储过程为“call procedurename(?,?)”。而带输入参数并有返回结果参数的存储过程为“?=call procedurename(?,?,.)”。例如:CallableStatement cstmt=con.prepareCall(call Query1();,(2)执行存储过程。CallableStatement类是PreparedStatement类的子类,可以使用在PreparedStatement类及Statement类中的方法。因此执行存储过程可调用executeQuery()方法来实现,如:ResultSet rs=cstmt.executeQuery();,4ResultSet执行完毕SQL语句后,将返回一个ResultSet类的对象,它包含所有的查询结果,也就是将查询结果封装在ResultSet对象中。ResultSet实际上是一张表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。,ResultSet类的对象方式依赖于光标(Cursor)的类型,对Resultset对象的处理必须逐步进行,而对每一行中的各个列可以按任何顺序进行处理。ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next()方法将光标移动到下一行,因为该方法在 ResultSet对象没有下一行时返回 false,所以可以在while循环中使用它来迭代结果集。ResultSet对象通过getXXX()方法来获得某一列的数据,这里XXX代表列的数据类型,如getInt()、getString()、getDate()等。其中getXXX(int cn)中cn指结果集中的列号,getXXX(String colName)中colName代表列名。,例如:Statement stmt=con.creatStatement();ResultSet rs=stmt.executeQuery(Select*from 学生信息表);while(rs.next()String name=rs.getString(student_name);,5查询数据库示例以下是通过JDBC连接SQL Server 2000数据库进行数据库查询的示例。首先创建Statement对象,接着执行SQL语句,查询表dept_info中的信息,然后返回一个ResultSet类的对象,包含查询到dept_info表中deptno和deptname的数据。其中数据库library中dept_info表的数据如图11-4所示。,图11-4 dept_info表,查询数据库中的数据首先要建立和数据库的连接。本例采用本地协议纯Java驱动程序,不需要数据源的设置。建立和数据库的连接步骤如下:(1)下载SQL Sever 2000的驱动程序包,这个可以从微软的网站上下载(http:/FilesMicrosoft SQL Server 2000 Driver for JDBC。其中lib目录下的三个.jar文件即是JDBC驱动核心,即msbase.jar、mssqlserver.jar、msutil.jar。,(2)设置环境变量。将三个.jar文件加入到环境变量中。此处安装驱动程序后将lib路径设为:D:SQL Server 2000lib,环境变量设置如下:classpath:D:SQL Server 2000libmssqlserver.jar;D:SQL Server 2000libmsbase.jar;D:SQL Server 2000libmsutil.jar;,(3)装载驱动程序并建立连接:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);声明数据库驱动String driver=“jdbc:microsoft:sqlserver:/localhost:1433”;Connection conn=DriverManager.getConnection(driver,“”,“”);建立数据库连接查询数据库具体代码如下所述。,【示例11-1】TestJDBC.java。import java.sql.*;public class TestJDBC public static void main(String args)ResultSet rs=null;Statement stmt=null;Connection conn=null;try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);String driver=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=library;,conn=DriverManager.getConnection(driver,“sa”,“123”);stmt=conn.createStatement();rs=stmt.executeQuery(“select*from dept_info”);while(rs.next()System.out.print(rs.getInt(“deptno”);System.out.println(rs.getString(“deptname”);catch(ClassNotFoundException e)e.printStackTrace();,catch(SQLException e)e.printStackTrace();finally try if(rs!=null)rs.close();rs=null;if(stmt!=null)stmt.close();stmt=null;,if(conn!=null)conn.close();conn=null;catch(SQLException e)e.printStackTrace();,程序运行结果:1 光电工程学院2 材料化工学院3 电子工程学院4 经济管理学院5 计算机科学工程学院6 人文社科学院,11.4.3 更新数据库操作和数据库建立连接后,除了要实现对数据库的查询操作外,在很多实际应用中,经常要实现对数据库的更新操作,主要包括对数据库表中的记录进行修改、插入和删除操作,以及数据库中表的创建和删除等操作,并通过Statement对象调用方法。以下是通过JDBC连接SQL Server 2000数据库的更新操作。,1对数据库进行修改、插入和删除操作通过SQL语句对数据库中表的记录进行修改、插入和删除操作,其中executeUpdate()方法的输入参数仍然为一个String对象(即所要执行的SQL语句),但输出参数不是ResultSet对象,而是一个整数(它代表操作所影响的记录行数)。,(1)修改操作。下列语句将学生信息表中张甜的年龄字段值修改为22:Statement stmt=conn.createStatement();String sql=“update Student_info set age=22 where name=张甜”;stmt.executeUpdate(sql);,(2)插入操作。下列语句将给学生信息表中增加一条新记录王红,20,陕西:Statement stmt=conn.createStatement();String sql=“insert into Student_info values(王红,20,陕西)”;stmt.executeUpdate(sql);,(3)删除操作。下列语句删除了学生信息表中李明的记录:Statement stmt=conn.createStatement();String sql=“delete from Student_info where name=李明”;stmt.executeUpdate(sql);,2创建和删除表通过SQL的Create Table和Drop Table语句可实现对表的创建和删除。(1)创建表的语句如下:Statement stmt=con.createStatement();stmt.executeUpdate(“create table TableName(ID INTEGER,Name VARCHAR(20)”);(2)删除表的语句如下:Statement stmt=con.createStatement();stmt.executeUpdate(Drop TableName);,3增加和删除表中的列对一个表的列进行更新操作主要是使用SQL的Alter Table语句,需要注意的是对列所进行的更新操作会影响到表中的所有行。(1)增加表中的一列。在TableName表中增加一列Address,数据类型为字符串。Statement stmt=con.createStatement();stmt.executeUpdate(Alter Table TableName add Column Address Varchar(50);,(2)删除表中的一列。在TableName表中删除一列Address。Statement stmt=con.createStatement();stmt.executeUpdate(Alter Table TableName Drop Column Address);,11.4.4 事务通过Statement对象除了对数据库进行SQL的操作之外,事务控制也是一种主要的应用。事务控制在建立数据库驱动应用程序的时候是一个很重要的问题。在数据库中,事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。在JDBC的数据库操作中,一项事务是由一条或是多条表达式组成的一个不可分隔的工作单元。通过提交commit()或是回退rollback()来结束事务的操作,也就是当调用方法commit或rollback时,当前事务即结束,而另一个事务随即开始。关于事务操作的方法都位于接口java.sql.Connection中。,在JDBC中,事务操作默认是自动提交的。一条对数据库的更新表达式代表一项事务操作,成功后,系统将自动调用commit()来提交;否则,将调用rollback()来回退。其中,方法commit使SQL语句对数据库所做的任何更改成为永久性的,它还将释放事务持有的全部锁。而方法rollback将弃去那些更改。有时用户在另一个更改生效前不想让此更改生效,这可通过调用setAutoCommit(false)禁用自动提交并将两个更新组合在一个事务中来达到。,如果两个更新都是成功的,则调用commit()方法,从而使两个更新结果成为永久性的;如果其中之一或两个更新都失败了,就不会执行到commit(),并将产生一些异常,整个事务就要全部视为错误,这时则可以在捕获异常时调用rollback()进行回退,而全部从起始点后开始的操作应全部回到开始状态。大多数JDBC驱动程序都支持事务。事实上,符合JDBC的驱动程序必须支持事务。其中DatabaseMetaData给出的信息描述了DBMS所提供的事务支持水平。,11.5 JDBC综合应用示例本节以一个简单的图书借阅系统中对图书信息的操作为例,讲解JDBC在数据库连接中的应用,包括详细的数据源设置以及实现对图书信息的增加、删除、修改和查询的操作。本例的数据库采用SQL Server 2000,对数据库的访问采用便于理解的JDBC-ODBC方式。,11.5.1 建立数据库首先在SQL Server 2000数据库中建立数据库library,并在数据库library中创建book_info表。也可以在与数据库library建立连接后通过SQL语句创建book_info表,如下:,Statement stmt=con.createStatement();String query=“create table book_info”+“(BookId VARCHAR(50),”+“BookName VARCHAR(50),”+“Author,VARCHAR(50),”+“Amount INT(4)”;stmt.executeUpdate(query);其中数据库表book_info的数据库结构如表11-2所示。初始的book_info数据表如图11-5所示,表中已有两条图书信息。,图11-5 初始的book_info数据表,11.5.2 建立数据源为了同上一节中建立的数据库建立连接,需要配置一个ODBC数据源try,步骤如下。步骤一:在开始-设置-控制面版(Win98、NT4.0)中选取“数据源(ODBC)”;在Windows XP中“数据源(ODBC)”位于“开始-设置-控制面版-管理工具”或“开始-程序-管理工具”下。步骤二:启动“数据源(ODBC)”配置程序,界面如图11-6所示。,图11-6 ODBC数据源管理界面,步骤三:在图11-6中“用户DSN”选项下单击“添加”按钮,添加一个系统的数据源(DSN),则出现如图11-7所示创建新数据源界面。步骤四:在图11-7中选择“SQL Server”,单击“完成”则出现如图11-8图11-10所示创建到SQL Server的新数据源的对话框,并按此向导填写内容。点击“下一步”,选择使用网络登录ID的Windows NT验证,接着点击“下一步”,并更改默认的数据库为library。,图11-7 创建新数据源界面,图11-8 创建到SQL Server的新数据源(一),图11-9 创建到SQL Server的新数据源(二),图11-10 创建到SQL Server的新数据源(三),步骤五:再点击“下一步”,默认当前设置,点击“完成”,出现ODBC Microsoft对话框,点击“测试数据源”,出现测试结果界面,如图11-11所示。以上步骤就完成了对数据源的设置。,图11-11 SQL Server ODBC数据源测试界面,11.5.3 数据库操作程序本书采用JDK 1.5.0作为开发工具,使用Eclipse 3.2集成开发环境。首先在Eclipse中File菜单中新建一个Project工程,选择Java文件夹下的Java Project选项,并点击下一步,出现如图11-12所示的对话框。新建jdbc工程名,最后点击完成。这样,jdbc,这个工程就建立好了。接着按照图11-13把SQL Server驱动程序添加到工程中,找到驱动程序存放的路径就可以完成这个操作。,图11-12 创建Java Project,图11-13 添加驱动程序,其次就是代码的编写,右键点击工程名jdbc,新建一个 dbconnect类。【示例11-2】dbconnect.java。import java.sql.*;public class dbconnect public static void main(String args)String dbDriver=sun.jdbc.odbc.JdbcOdbcDriver;/声明数据库驱动String driver=jdbc:odbc:library;/声明数据源Connection con=null;String query=select*from book_info;,ResultSet rs=null;Statement stmt=null;try/加载SQLServer的jdbc驱动Class.forName(dbDriver);catch(java.lang.ClassNotFoundException e)System.err.println(ClassNotFoundException:+e.getMessage();try,/建立数据库连接con=DriverManager.getConnection(driver,sa,123);/将数据库连接设置为自动提交模式con.setAutoCommit(true);stmt=con.createStatement();/执行insert into语句,增加两条图书信息stmt.executeUpdate(insert into book_info(BookId,BookName)values200803,英语口语技能);stmt.executeUpdate(insert into book_info(BookId,BookName)values(200804,JSP入门);,queryBooks(con,stmt,query);/执行一个update语句,更新数据库,修改200803图书编号的书名stmt.executeUpdate(update book_info set BookName=基础英语口语技能 where BookId=003);queryBooks(con,stmt,query);/执行一个delete语句,删除一条图书信息stmt.executeUpdate(delete from book_info where BookId=200804);queryBooks(con,stmt,query);,stmt.close();con.close();/上面的语句关闭声明和连接 catch(SQLException ex)System.err.println(SQLException:+ex.getMessage();,private static void queryBooks(Connection con,Statement stmt,String query)try/返回一个结果集ResultSet rs=stmt.executeQuery(query);/下面的语句使用了一个while循环,打印出了book_info表中的所有数据System.out.println(book_info表中的数据如下);System.out.println(图书编号+书名);while(rs.next(),/取得数据库中的数据String s=rs.getString(“BookId”);String f=rs.getString(“BookName”);System.out.println(s+“”+f);rs.close();catch(SQLException ex)System.err.println(SQLException:+ex.getMessage();,代码编写完成后,点击Run菜单栏,在Console中显示结果,如图11-14所示。在图书借阅系统中,dbconnect.java程序通过JDBC实现了对图书信息进行增加、修改、删除的操作,同时SQL Server数据库library中的book_info表的数据同步改变,如图11-15图11-17所示。,图11-14 Eclipse操作界面,图11-15 数据库Library中book_info表(一),图11-16 数据库Library中book_info表(二),图11-17 数据库library中book_info表(三),本 章 小 结JDBC是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口。有了JDBC,Java程序员可以用Java语言来编写完整的数据库方面的应用程序,另外也可以操作保存在多种不同的数据库管理系统中的数据,而与数据库管理系统中数据存储的格式无关。,本章简单介绍了Java与数据库连接的JDBC技术。首先对JDBC的功能和结构进行了概述,其次介绍了四种类型的JDBC驱动程序以及按照JDBC编程步骤实现JDBC在数据库访问中的应用,最后通过一个具体实例讲解了JDBC在数据库连接中的实际应用。,习 题1.简述JDBC驱动程序的四种类型。2.有哪些方法可以发送访问、操作数据库的SQL语句?如何处理对数据库访问操作的结果?如何获得关于数据库的信息?3.编写一个数据库程序,实现对学生成绩的查询、修改、删除功能。4.建立一个Book.mdb数据库,该数据库包含4个表:Authors、Publishers、AuthorISBN 和Title,各表描述如表11-3表11-6所示。,(1)编写程序建立数据库,并录入相关数据。(2)编写程序将Title表的全部数据输出。(3)编写程序,查询姓张的作者出版的所有书籍的详细信息。(4)编写程序,在表 AuthorISBN中插入2条新记录。(5)编写程序,删除1997年出版的所有书籍。,