1 / 40

JDBC 概述

JDBC 概述. JDBC 是一种用于执行 SQL 语句的 Java API , 它由一组用 Java 语言编写的类和接口组成。通过这些类和接口, JDBC 把 SQL 语句发送给不同类型的数据库进行处理并接收处理结果。. JDBC 产品包括三个组件. JDBC 驱动程序管理器 JDBC 驱动程序管理器是 JDBC 体系结构的支柱,主要作用是把 Java 应用程序连接到 JDBC 驱动程序上,然后退出 JDBC 驱动程序测试工具包 用于测试 JDBC 驱动程序,只有通过测试的驱动程序才被认为是 “ 符合 JDBC 标准 ” 的 JDBC-ODBC 桥

azizi
Download Presentation

JDBC 概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JDBC概述

  2. JDBC是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过这些类和接口,JDBC把SQL语句发送给不同类型的数据库进行处理并接收处理结果。

  3. JDBC产品包括三个组件 • JDBC驱动程序管理器 JDBC驱动程序管理器是JDBC体系结构的支柱,主要作用是把Java应用程序连接到JDBC驱动程序上,然后退出 • JDBC驱动程序测试工具包 用于测试JDBC驱动程序,只有通过测试的驱动程序才被认为是“符合JDBC标准”的 • JDBC-ODBC桥 使ODBC驱动程序可被用作JDBC驱动程序,它的实现为JDBC的快速发展提供了一条途径

  4. 1)类和接口 • 支持JDBC API的类和主要接口封装在Java.sql包和Javax.sql包中

  5. 接口 java.sql.DriverManager java.sql.Connection java.sql.SQLException java.sql.DatabaseMetaData java.sql.SQLWarning java.sql.Statement java.sql.BatchUpdateException java.sql.Resultset java.sql.DriverPeopertyInfo java.sql.Array java.sql.Time java.sql.Blob java.sql.Timestamp java.sql.Driver java.sql.Types java.sql.ParameterMetaData java.sql.PrepareStatement java.sql.Ref java.sql.ResultSetMetaData java.sql.Savepoint java.sql.SQLData java.sql.SQLInput java.sql.SQLOutput java.sql.Permission java.sql.Struct java.sql.CallableStatement java.sql.Colb

  6. 接口 javax.sql.ConnectionEvent javax.sql.ConnectionEventListener javax.sql.RowSetEvent javax.sql. ConnectionPoolDataSource Javax.sql.DataSource Javax.sql.PooledConnection Javax.sql.RowSet Javax.sql.RowSetInternal Javax.sql.RowSetListener Javax.sql.RowSetMetaData Javax.sql.RowSetReader Javax.sql.RowSetWriter Javax.sql.XAConnection Javax.sql.XADataSource Javax.sql的类和接口

  7. Java.sql.DriverManager • Java.sql.DriverManager是唯一的一个服务类,用于管理JDBC驱动程序,提供getconnection方法建立应用程序与数据库连接。当JDBC驱动程序加载到内存时,会自动向JDBC驱动程序进行注册,接着如果有连接数据库的请求,DriverManager类就会用注册的JDBC驱动程序来创建到数据库的连接。一般通过调用Class.forName()加载驱动程序。

  8. Java.sql.Connection接口 Java.sql.Connection接口定义到数据库的连接,用于制造Statement对象,提供数据库的信息。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。

  9. Java.sql.Statement • Java.sql.Statement代表SQL语句的接口,通过executeQuery或executeUpdate方法执行一个静态的SQL语句。

  10. Java.sql.ResultSet接口 • Java.sql.ResultSet接口维护查询得到的一张视图表,它提供了许多维护表记录的方法对数据库进行操作

  11. Java.sql.SQLException类 • Java.sql.SQLException类用于检查并报告用JDBC操作数据库时的错误。Java是一种安全性很好的语言,如果在类方法中声明了有例外处理,当在程序中创建对象实例,通过对象实例调用这些方法时都应该提供例外处理。

  12. JSP使用JDBC的过程 • (1)创建一个JDBC Driver连接实例或DataSource连接实例. • (2)使用连接实例创建一个连接 • (3)使用JDBC连接创建声明语句 • (4)调用声明语句的executeQuery方法获得结果集 • (5)操作结果集的记录 • (6)如果还需要这个连接创建其它结果集,从第3步开始重复 • (7)释放结果集. • (8)释放声明语句. • (9)断开与数据库的连接

  13. JDBC驱动程序的类型 • (1)驱动程序类型一 • 驱动程序类型一是将JDBC调用映射到其它类型的数据访问API上,最常用的是JDBC-ODBC桥接驱动程序,它利用ODBC驱动程序提供JDBC的访问。要注意的是,使用这种类型的驱动程序必须在每个客户机上加载ODBC驱动程序,因此此类型适用于企业内部网或者是用Java编写的三层结构的应用程序服务器代码。

  14. (2)驱动程序类型二 • 驱动程序类型二是基于本地API,部分用Java来编写的的驱动程序。这种类型的驱动程序将客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其他DBMS的调用。

  15. 驱动程序类型三 • 驱动程序类型三是JDBC网络纯Java驱动程序,这种驱动程序将JDBC转换为与DBMS无关的网络协议,这后这种协议将被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java 客户机连接到多种不同的数据库上,因为它们仅仅依赖驱动程序和中间件之间的网络协议,而中间件提供发数据库到应用程序之间的抽象。

  16. 驱动程序类型四 • 驱动程序类型四是本地协议纯Java驱动程序,这类驱动程序将JDBC调用转换为DBMS所使用的网络协议,这将允许从客户机上直接调用DBMS服务器,获得最大的网络传输速度。

  17. 通过Driver接口建立连接 • 加载驱动程序 加载驱动程序非常简单,只需要一句代码:Class.forName(类名),就可以将相应有的核心类加载到驱动程序管理器中。 (A)加载JDBC-ODBC桥驱动程序: Class.forName(“sun.jdbc.odbc.JdbcOdbcDrive”) (B)加载JDBC驱动程序: Class.forName(“jdbc.drive_class_name”) (C)加载mySQL驱动程序: Class.forName(“org.gjt.mm.mysql.Drive”) (D)加载Oracle驱动程序: Class.forName(“oracle.jdbc.driver.OracleDriver”)

  18. 通过Driver接口建立连接 • 建立连接 当驱动程序加载成功,就可以操作DriverManager类的getConeection方法一个同数据库的连接,格式如下: Connection con=DriverManager.getConection(Url,login,password) 对于不同的数据库驱动程序,其URL有所不同,但必须遵从下面两个格式中的一个:

  19. Jdbc:driver-id:database-id Jdbc:driver-id://host/database-id 例如: JDBC-ODBC桥驱动程序的格式 jdbc:odbc:数据源名 mySQL jdbc驱动程序的格式 jdbc:mysql:///test Oracle jdbc驱动程序的格式 jdbc:oracle:thin:@myhost:1521:ORCL

  20. 通过DataSource接口建立连接 • 它使用Java命名和目录接口JNDI作为数据的存储和查询机制 首先使用JNDI的命名类指定一个驱动程序的名称和位置并装入该驱动程序。完成这一操作,需要建立一个目录形式的视图,创建一个InitialContext类(该类属于javax.naming包)表示的顶级域名,相当于一个目录形式的根目录,例如: InitialContextctx=newInitalContent();

  21. DataSource ds=(DataSource)ctx.lookup(“jdbc/oracle”); 获得了一个数据源后,就可以通过这个数据源的getConnection方法创建一个连接了: Connection conn=ds.getConnection(“username”,”pwd”);

  22. 声明语句 • 1)声明语句的创建 • 2)声明语句的执行 • 3)声明语句的释放

  23. 声明语句的创建 • JDBC提供了三个接口用于向数据库发送SQL语句,它们分别是:Statement、PreparedStatement、CallableStatement。Connection接口中的三个方法对应用于创建上述三个接口实例,分别为:CreateStatemet、preparedStatement、prepareCall。Statement对象用于发送简单的SQL语句。PreparedStatement对象用于发送带有一个或多个输入参数的SQL语句,并且它经过预编译,效率要比使用Statement对象高。CallableStatement对象用于执行SQL存储程序,SQL存储程序是一组可通过名称来调用的SQL语句

  24. 声明语句的创建 (1)普通语句的创建 Statement stmt=conn.createStatemnt(); (2)预编译语句的创建 String cmd=”select * from BaseInfo where major=?” PreparedStatement stmt=conn.preparedStatement(cmd); stmt.setString(1,”CS”);

  25. (3)调用存储过程语句的创建 String cmd=”CALL LIST_ON_MAJOR(‘CS’)”; CallableStatement stmt=conn.prepareCall(cmd);

  26. 声明语句的执行 • 使用SQL语句对数据库执行的操作通常分为两类:一是查询数据库信息;二是操纵数据库数据。查询数据库信息操作需要返回查询结果集,操纵数据库操作需要返回操纵成功的记录数,所以Statement接口提供两种不同的执行方法完成两类操作。

  27. 查询数据库信息―executeQuery ResultSet rs=stmt.executeQuery(“select * from BaseInfo”);

  28. 操纵数据库数据-executeUpdate • ResultSet rs=stmt.executeUpdate(“INSERT INTO BaseInfo VALUES(‘02010534’”+ “,’xiaoming’,‘CS’)”);

  29. 声明语句的释放 • 语句使用完毕,释放语句对象是良好的编程风格: stmt.close()

  30. 结果集 数据库创建结果集类型 (1)read-only:只允许读取查询结果,读取顺序从头到尾值只能读一次。 (2)scroable:允许反复随机读取查询结果的任意记录。 (3)updateable允许对结果集作插入、修改和删除操作,并直接反应到后台数据库。 结果集类提供了方法getType()检查结果集的类型,方法getConcurrency()检查当前记录的可操作类型。

  31. 结果集 2 结果集类型 (1)TYPE_FORWORD_ONLY: 结果集为只读类型,并且读取顺序从头到尾值读取记录,只能读一次 (2)TYPE_SCROLL_SENSITIVE: 在他人同时对数据库操作时,会影响结果集中的纪录。 (3)TYPE_SCROLL_INSENSITIVE: 在他人同时对数据库操作时,不会影响结果集中的纪录。

  32. 结果集 当前记录操作类型 (1)CONCUR_READ_ONLY:结果集是只读的,不能改变当前记录。 (2)CONCUR_UPDATEABLE:结果集可以修改的,可以修改记录的值,插入记录,删除记录。 在进行记录的修改操作时,通常要先检查可操作类型,:if(rs.getCurrency()!=ResultSet.CONCUR_UPDATEABLE) system.err.println(“Error,cannot change rs”);

  33. 在结果集上移动 • 结果集接口提供了next()方法,使游标向后移动一条记录,previous()方法使游标向前移动一条记录,组合使用这两个方法就可以实现访问结果集任意记录。 • 遍历一个记录集的方法为: • ResultSet rs=... • while(rs.next()){ • ... ... • }

  34. 访问记录字段 • 结果集接口提供了一系列的getXXX方法访问字段的值,XXX表示返回值的类型,调用格式为: rs.getXXX((index/fieldname)

  35. 获得结果集信息 • 在操作结果集时,经常需要获得一些额外的信息,如记录数、列名称等等,ResultSetMetaData接口通过元数据(Metadata)提供一个特定结果集的相关信息。例如:下面代码显示数据库的所有列信息: • ResultSetMetsData MetaData=rs.getMetaData(); • int num_columnes=MetaData.getColumnCount(); • for (int i=1;i<=numColumns;i++){ • Sytem.out.print(“column”); • Sytem.out.print(i); /*列位置*/ • Sytem.out.print(“name:”); • Sytem.out.print(MataData.getColumnName(i));/*列名称*/ • }

  36. 定位记录 • 使用absolute()方法可以定位到确定的一条记录上,例如:定位到第10条记录的语句为: rs.absolute(10)

  37. 删除记录 • 使用deleteRow()方法可以删除到当前的一条记录上,例如:删除第5条记录的语句为: rs.absolute(5); rs.deleteRow()

  38. 修改记录 rs.updateXXX(Index, value); 例如:修改所有记录的major字段为”IT”的语句为: ResultSet rs=... ResultSetMetaData MetaData=rs.getMetaData(); int index_major=rs.findColumn(“major”);//返回字段major的序号 if(rs.getCurrency()!==Result.CONCUR_UPDATEABLE) { system.err.println(“Error,can not change rs ”); return; } while(rs.next()) { rs.updateString(index_major,”IT”); }

  39. 插入一条新记录 • 为插入一条新记录,ResultSet专门创建了一条特殊的记录行,插入一条新纪录的步骤为: • (1)调用movetoInsertRow()方法将游标指向插入行; • (2)使用UpdateXXX()方法修改插入行字段值; • (3)调用insertRow()方法将新记录加入到数据库; • (4)调用movetoCurrentRow()返回当前修改行;

  40. 例如增加一条学生记录的语句为: ResultSet rs=... if(rs.getCurrency()!==Result.CONCUR_UPDATEABLE) { system.err.println(“Error,can not change rs ”); return; }  rs.movetoInsertRow(); rs.UpdateString(1,”02010625”); rs.UpdateString(2,”yulei”); rs.UpdateString(3,”IT”); rs.insertRow(); rs.movetoCurrentRow();

More Related