89第七讲 数据库连接(JDBC基础)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

JAVA数据库连接(JDBC)2010-2-4第七讲2/13本讲知识点什么是JDBC(掌握)与数据库的连接对象(掌握)DriverManager类(重点)Statement接口(重点)ResultSet接口(重点)PreparedStatement接口(重点)CallableStatement接口(重点)如何使用JDBC进行事务处理(重点)2010-2-4Inspurgroup3/131、概述(什么是JDBC)JDBC是一种用于执行SQL语句的JavaAPI,由一组用Java编程语言编写的类和接口组成。JDBC为数据库开发人员提供了一组标准的API,使他们能够用纯JavaAPI来编写数据库应用程序。2010-2-4Inspurgroup4/131.1JDBC的用途是什么?简单地说,JDBC可做三件事:A.数据库建立连接。B.发送SQL语句。C.处理结果。下列代码段给出了以上三步的基本示例:2010-2-4Inspurgroup//数据库建立连接Connectioncon=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:teacher,login,password);//发送SQL语句Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable1);//处理结果while(rs.next())System.out.println(rs.getString(a)++rs.getString(b)++rs.getString(c));5/132、与数据库的连接对象Connection对象代表与数据库的连接。连接过程包括所执行的SQL语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。2.1打开连接与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。2010-2-4Inspurgroup6/13Connectioncon=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:teacher,login,password);2010-2-4Inspurgroup7/132.1.1.什么是JDBCURLJDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序能识别该数据库并与之建立连接。实际上,驱动程序编程人员将决定用什么JDBCURL来标识特定的驱动程序。用户不必关心如何来形成JDBCURL;他们只须使用与所用的驱动程序一起提供的URL即可。JDBC的作用是提供某些约定,驱动程序编程人员在构造他们的JDBCURL时应该遵循这些约定。JDBCURL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:jdbc:子协议:子名称如jdbc:oracle:thin2010-2-4Inspurgroup8/133、发送SQLSQL语句连接一旦建立,就可用来向它所涉及的数据库传送SQL语句。JDBC对可被发送的SQL语句类型不加任何限制。这就提供了很大的灵活性,即允许使用特定的数据库语句或甚至于非SQL语句。然而,它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL语句,否则将自食其果。例如,如果某个应用程序试图向不支持储存程序的DBMS发送储存程序调用,就会失败并将抛出异常。JDBC提供了三个类,用于向数据库发送SQL语句。Connection接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法:2010-2-4Inspurgroup9/131)Statement─由方法createStatement所创建。Statement对象用于发送简单的SQL语句。2)PreparedStatement─由方法prepareStatement所创建。PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL语句。PreparedStatement拥有一组方法,用于设置IN参数的值。执行语句时,这些IN参数将被送到数据库中。PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法。PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。2010-2-4Inspurgroup10/133)CallableStatement─由方法prepareCall所创建。CallableStatement对象用于执行SQL储存程序─一组可通过名称来调用(就象函数的调用那样)的SQL语句。CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法。以下所列提供的方法可以快速决定应用哪个Connection方法来创建不同类型的SQL语句:createStatement方法用于:简单的SQL语句(不带参数)prepareStatement方法用于:带一个或多个IN参数的SQL语句经常被执行的简单SQL语句prepareCall方法用于:调用已储存过程2010-2-4Inspurgroup11/134、事务(Transaction)事务由一个或多个这样的语句组成:这些语句已被执行、完成并被提交或还原。当调用方法commit或rollback时,当前事务结束,另一个事务随即开始。缺省情况下,新连接将处于自动提交模式。也就是说,当执行完语句后,将自动对那个语句调用commit方法。这种情况下,由于每个语句都是被单独提交的,因此一个事务只由一个语句组成。如果禁用自动提交模式,事务将要等到commit或rollback方法被显式调用时才结束,因此它将包括上一次调用commit或rollback方法以来所有执行过的语句。对于第二种情况,事务中的所有语句将作为组来提交或还原。2010-2-4Inspurgroup12/13方法commit使SQL语句对数据库所做的任何更改成为永久性的,它还将释放事务持有的全部锁。而方法rollback将弃去那些更改。有时用户在另一个更改生效前不想让此更改生效。这可通过禁用自动提交并将两个更新组合在一个事务中来达到。如果两个更新都是成功,则调用commit方法,从而使两个更新结果成为永久性的;如果其中之一或两个更新都失败了,则调用rollback方法,以将值恢复为进行更新之前的值。大多数JDBC驱动程序都支持事务。事实上,符合JDBC的驱动程序必须支持事务。2010-2-4Inspurgroup13/135、DriverManager类DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法是DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。2010-2-4Inspurgroup14/13通过调用方法Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。以下代码加载类com.microsoft.jdbc.oracle.OracleDriverClass.forName(com.microsoft.jdbc.oracle.OracleDriver”);2010-2-4Inspurgroup15/131.创建Statement对象建立了到特定数据库的连接之后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建,如下列代码段中所示:2010-2-4InspurgroupConnectioncon=DriverManager.getConnection(url,“sa,“123456a?);Statementstmt=con.createStatement();为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法:ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable2);16/132.使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。方法executeQuery用于产生单个结果集的语句,例如SELECT语句。方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零。方法execute用于执行返回多个结果集、多个更新计数或二者组合的语句。2010-2-4Inspurgroup17/133.关闭Statement对象Statement对象将由Java垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们。这将立即释放DBMS资源,有助于避免潜在的内存问题。2010-2-4Inspurgroup18/13ResultSet对象ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值。例如,如果查询为SELECTname,age,jobsFROMTable1,则结果集将具有如下形式:nameagejobsJerry80teacher2010-2-4Inspurgroup下面的代码段是执行SQL语句的示例。该SQL语句将返回行集合,其中列name和jobs为varchar,列age为intStatementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(“SELECTname,age,jobsFROMTable1”);while(rs.next()){//输出当前行的值Stringname=rs.getString(“name”);Stringjobs=rs.getString(“jobs”);intage=rs.getInt(“age”);}19/13有些情况下,需要使用列索引来确保检索了正确的列值。这时,使用列号效率要稍微高一些。关于ResultSet中列的信息,可通过调用方法ResultSet.getMetaData得到。返回的ResultSetMetaData对象将给出其ResultSet对象各列的编号、类型和属性。2010-2-4Inspurgroup20/13数据类型和转换对于getXXX方法

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功