Java与数据库的连接.ppt

上传人:豆**** 文档编号:24548772 上传时间:2022-07-05 格式:PPT 页数:81 大小:786KB
返回 下载 相关 举报
Java与数据库的连接.ppt_第1页
第1页 / 共81页
Java与数据库的连接.ppt_第2页
第2页 / 共81页
点击查看更多>>
资源描述

《Java与数据库的连接.ppt》由会员分享,可在线阅读,更多相关《Java与数据库的连接.ppt(81页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、JDBC 简介简介v数据库的应用目前已经非常普遍,在应用数据库的应用目前已经非常普遍,在应用程序的开发过程中,经常会涉及到访问数程序的开发过程中,经常会涉及到访问数据库。据库。Java语言为访问数据库提供了方便语言为访问数据库提供了方便的技术。的技术。vJ a v a 使 用使 用 J D B C ( J a v a D a t a b a s e Connectivity)技术进行数据库的访问。技术进行数据库的访问。Java应用程序通过应用程序通过JDBC API和和JDBC驱动驱动程序管理器程序管理器进行通信。进行通信。JDBC的诞生的诞生v从从ODBC到到JDBCuODBC(Open D

2、ataBase Connectivity),是一种用来在,是一种用来在关系数据库以及非关系数据库管理系统中存取数据,关系数据库以及非关系数据库管理系统中存取数据,用用C语言语言实现的标准应用程序接口。实现的标准应用程序接口。u其主要结构:其主要结构:应用程序接口应用程序接口、驱动程序管理器驱动程序管理器、数据数据库驱动程序库驱动程序和和数据源数据源。v JDBC的诞生的诞生u 以前由于没有一个以前由于没有一个Java语言的数据库语言的数据库API,编,编程人员不得不在程人员不得不在Java程序中加入程序中加入C语言的语言的ODBC函数调用,从而使函数调用,从而使Java的很多优秀特性的很多优秀

3、特性无法充分发挥无法充分发挥u ODBC具有不易使用,非面向对象等缺点具有不易使用,非面向对象等缺点u为了充分发挥为了充分发挥java语言的特性,迎合数据库开语言的特性,迎合数据库开发的需求,发的需求,sun开发了一套开发了一套java语言的数据库语言的数据库应用程序开发接口和类,即应用程序开发接口和类,即JDBC。它在。它在Java程序中实现数据库操作功能并简化操作过程。程序中实现数据库操作功能并简化操作过程。 u JDBC为数据库及其工具的开发人员提供了为数据库及其工具的开发人员提供了一个标准的一个标准的API,使他们能够用纯,使他们能够用纯Java API编编写数据库应用程序写数据库应用

4、程序u JDBC支持基本支持基本SQL语句,提供多样化的数语句,提供多样化的数据库连接方式,为各种不同的数据库提供统据库连接方式,为各种不同的数据库提供统一的操作界面一的操作界面 JDBC连接数据库的方法连接数据库的方法n 通过通过专用网络协议专用网络协议创建的驱动程序与数据创建的驱动程序与数据库直接通信。库直接通信。u 直接使用数据库厂商提供的、用专用网络协直接使用数据库厂商提供的、用专用网络协议创建的驱动程序议创建的驱动程序u各大厂商都为数据库提供了这种各大厂商都为数据库提供了这种JDBC驱动,驱动,这种方式最简单实用。这种方式最简单实用。应用程序应用程序JDBC API驱动程序驱动程序数

5、据源数据源 n 通过通过JDBC-ODBC桥与桥与ODBC数据库通信数据库通信uSun公司发行了一个用于访问公司发行了一个用于访问ODBC数据源的驱数据源的驱动程序,称为动程序,称为JDBC-ODBC桥接器。该桥接器桥接器。该桥接器用用jdbcodbc.class和一个用于访问和一个用于访问ODBC驱动程驱动程序的序的本地库本地库来实现的。来实现的。u 对于对于Windows平台,该本地库是一个平台,该本地库是一个DLL动态动态链接库链接库JDBCODBC.DLLu其优点是使其优点是使JDBC目前有能力访问几乎所有的数目前有能力访问几乎所有的数据库。据库。应用程序应用程序数据源数据源JDBC

6、APIJDBC -ODBCODBC APIODBC层层 n 通过部分专用的驱动程序与数据库通信通过部分专用的驱动程序与数据库通信u将将JDBC数据库调用直接翻译为厂商专用的数据库调用直接翻译为厂商专用的API,执行更有效,更快捷。,执行更有效,更快捷。应用程序应用程序JDBC API驱动程序驱动程序数据源数据源专用专用APIJDBC APIv JDBC API所有的类和接口都集中在所有的类和接口都集中在java.sql和和javax.sql这两个包中这两个包中驱动管理器驱动管理器连接连接语句语句结果集结果集(1) 登记并加载登记并加载JDBC驱动程序驱动程序(2) 建立与建立与SQL数据库的连

7、接数据库的连接(3) 传送一个传送一个SQL查询查询(4) 获得结果获得结果JDBC API的使用方法的使用方法v 注册数据库的驱动程序注册数据库的驱动程序v 隐式加载隐式加载u 作为初始化的一部分,作为初始化的一部分,DriverManager 类会尝试类会尝试加载在加载在 “jdbc.drivers” 系统属性中引用的驱动程系统属性中引用的驱动程序类。这允许用户自定义由他们的应用程序使用序类。这允许用户自定义由他们的应用程序使用的的 JDBC Driver。例如。例如jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDri

8、ver u public static void registerDriver(Driver driver) throws SQLException 向向 DriverManager 注册给定驱动程序注册给定驱动程序 u 一旦一旦DriverManager类被初始化,将不再检查类被初始化,将不再检查jdbc.drivers属性表属性表u 需要持久的预设环境需要持久的预设环境public interface Driver l 每个驱动程序类必须实现的接口每个驱动程序类必须实现的接口l Java SQL 框架允许多个数据库驱动程序框架允许多个数据库驱动程序l 每个驱动程序都应该提供一个实现每个驱动

9、程序都应该提供一个实现 Driver 接口的类接口的类l DriverManager 会试着加载尽可能多的它可以找到会试着加载尽可能多的它可以找到 的驱动程序,然后,对于任何给定连接请求,它会的驱动程序,然后,对于任何给定连接请求,它会 让每个驱动程序让每个驱动程序依次试着连接到目标依次试着连接到目标 URL DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver( ) );v DriverManageru DriverManager 类是类是 JDBC 的管理层,作用于用户和的管理层,作用于用

10、户和驱动程序之间。它跟踪可用的驱动程序,并在数据库驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。和相应驱动程序之间建立连接。u public static Driver getDriver(String url) throws SQLException 试图查找能理解给定试图查找能理解给定 URL 的驱动程序。的驱动程序。u public static Enumeration getDrivers() 检索带有当前调用方可以访问的所有当前已加载检索带有当前调用方可以访问的所有当前已加载 JDBC 驱动程序的驱动程序的 Enumeration u public sta

11、tic void registerDriver(Driver driver) throws SQLException 向向 DriverManager 注册给定驱动程序。在加载驱动程注册给定驱动程序。在加载驱动程序时由驱动程序自动调用序时由驱动程序自动调用 v 显式加载显式加载u public static Class forName(String className) throws ClassNotFoundException java.lang.Class u使用与当前使用与当前 applet 或应用程序相同的类加载器或应用程序相同的类加载器显式加载驱动程序显式加载驱动程序 Class.f

12、orName(“com.mysql.jdbc.Driver”);Class.forName(“acme.db.Driver”);如果将如果将acme.db.Driver编写为加载时创建实例,并调用以该实例编写为加载时创建实例,并调用以该实例为参数的为参数的DriverManager.registerDriver,则它在,则它在DriverManager的驱动程序列表中,并可用于创建连接的驱动程序列表中,并可用于创建连接 v将驱动程序添加到将驱动程序添加到Java.lang.System的属性的属性jdbc.drivers中中 u是一个由是一个由DriverManager类加载的驱动程序类名类加

13、载的驱动程序类名的列表,由冒号分隔的列表,由冒号分隔 jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver; u初始化初始化DriverManager类时,它搜索系统属性类时,它搜索系统属性jdbc.drivers,如果用户已输入了一个或多个驱,如果用户已输入了一个或多个驱动程序,则动程序,则DriverManager类将试图加载它们。类将试图加载它们。u一旦一旦DriverManager类被初始化,将不再检查类被初始化,将不再检查jdbc.drivers属性表属性表v 建立数据库连接建立数据库连接u public s

14、tatic Connection getConnection(String url) throws SQLException 试图建立到给定数据库试图建立到给定数据库 URL 的连接。的连接。 DriverManager 试图从已注册的驱动程序集中试图从已注册的驱动程序集中选择一个适当的驱动程序。选择一个适当的驱动程序。 假定构造数据库连接时不需要用户名、口令或假定构造数据库连接时不需要用户名、口令或其他数据库属性其他数据库属性u DriverManager将检查每个驱动程序,轮流在将检查每个驱动程序,轮流在每个驱动程序上调用方法每个驱动程序上调用方法Driver.connect, 查看它查看

15、它是否可以建立连接。是否可以建立连接。u DriverManager将使用它所找到的第一个可以将使用它所找到的第一个可以成功连接到给定成功连接到给定URL的驱动程序的驱动程序 u public static Connection getConnection(String url, Properties info) throws SQLException info包含连接数据库所需的所有属性项;通常至包含连接数据库所需的所有属性项;通常至少应该包括少应该包括 user 和和 password 属性属性u public static Connection getConnection(String

16、url, String user, String password) throws SQLException 指定了连接的用户名和密码指定了连接的用户名和密码Connection con=DriverManager.getConnection(“jdbc:mysql:/localhost/UpdateDB”,”root”,”);v Connection对象对象u 用于连接数据库和用于连接数据库和Java应用程序应用程序u 打开连接的方法打开连接的方法u Connection connect(String url, Properties info) throws SQLException jav

17、a.sql.Driver 试图创建一个到给定试图创建一个到给定 URL 的数据库连接。的数据库连接。u DriverManager.getConnectionu 提供应用程序与数据库的提供应用程序与数据库的静态连接静态连接u 单一应用程序可以:单一应用程序可以:u 拥有与单个数据库的一个或多个连接拥有与单个数据库的一个或多个连接u 拥有与许多不同数据库的连接拥有与许多不同数据库的连接public interface ConnectionJDBC URLvJDBC URL提供了一种提供了一种标识数据库标识数据库的方法,的方法,可以使用相应的驱动程序识别该数据库,可以使用相应的驱动程序识别该数据库

18、,并与之建立连接。并与之建立连接。 v标准语法:标准语法:jdbc:ujdbc协议:协议:JDBC URL中的协议总是中的协议总是jdbc。u子协议:驱动程序名或连接机制的名称。子协议:驱动程序名或连接机制的名称。u如果要用网络命名服务,则命名服务可以作为子协议。如果要用网络命名服务,则命名服务可以作为子协议。 Jdbc:dcenaming:accounts u驱动程序编程员可保留某个名称以将之用作驱动程序编程员可保留某个名称以将之用作JDBC URL的子协议名的子协议名 u子名称:数据库的唯一标识符。子名称:数据库的唯一标识符。u如果数据库是通过如果数据库是通过Internet来访问的来访问

19、的 ,则遵循命名规,则遵循命名规定定 /主机名主机名:端口端口/数据库名数据库名 例例 jdbc:odbc:goodsjdbc:dcenaming:accountsjdbc:dbnet:/wombat:356/fredjdbc:mysql:/localhost/UpdateDBodbc子协议子协议vodbc子协议用于指定子协议用于指定ODBC风格的数据资源风格的数据资源名称的名称的URL,允许指定任意多的属性值。,允许指定任意多的属性值。v语法:语法:Jdbc:odbc:;=例:例:Jdbc:odbc:students;UID=tech;PWD=123Jdbc:odbc:wombat;Cach

20、eSize=20;ExtensionCase=LOWER 如何与数据库建立连接如何与数据库建立连接? ?获取和安装获取和安装JDBCv以以mysq为例:为例:v首先,下载首先,下载mysql,并安装。,并安装。uhttp:/ 下载下载mysql-connector-java-5.1.5.tar.zipu解压,并进行相应的配置。解压,并进行相应的配置。 v配置方法:配置方法:u进入进入Javajre1.6.0_02lib目录将目录将mysql-connector-java-5.1.5-bin.jar拷贝到该目录下。拷贝到该目录下。u配置配置classpath,追加,追加%JAVA_HOME% j

21、re1.6.0_02lib mysql-connector-java-5.1.5-bin.jar;v配置的目的是让配置的目的是让java应用程序找到连接应用程序找到连接mysql的驱动的驱动 如何向数据库递交查询和更新请求如何向数据库递交查询和更新请求并获得返回的结果并获得返回的结果? ?v Statement对象对象u 用于执行用于执行SQL语句并获取数据库的返回结果语句并获取数据库的返回结果u Statement createStatement( ) throws SQLException java.sql.Connectionu 常用方法常用方法u boolean execute(Str

22、ing sql) throws SQLException 执行给定的执行给定的 SQL 语句,该语句可能返回多个结果。语句,该语句可能返回多个结果。如果结果是如果结果是ResultSet对象则返回对象则返回true;结果是更新计数或;结果是更新计数或执行的语句是执行的语句是DL命令则返回命令则返回false u ResultSet executeQuery(String sql) throws SQLException执行给定的执行给定的 SQL 语句,该语句返回单个语句,该语句返回单个 ResultSet 对象。对象。 public interface Statementu int exec

23、uteUpdate(String sql) throws SQLException 执行给定执行给定 SQL 语句,该语句可能为语句,该语句可能为 INSERT、UPDATE 或或 DELETE 语句,或者不返回任何内容的语句,或者不返回任何内容的 SQL 语句(如语句(如 SQL DDL 语句)。语句)。 返回返回INSERT、UPDATE 或或 DELETE 语句的行计数;或者语句的行计数;或者 0,表示不返回任何内容的,表示不返回任何内容的 SQL 语语句句 u执行语句的所有方法都将关闭所调用的执行语句的所有方法都将关闭所调用的Statement对对象的当前打开结果集(如果存在)。这意味

24、着在重象的当前打开结果集(如果存在)。这意味着在重新执行新执行Statement对象之前,需要完成对当前对象之前,需要完成对当前ResultSet对象的处理。对象的处理。u 使用方法使用方法execute( )u仅在语句能返回多个仅在语句能返回多个ResultSet对象、多个更新计数或对象、多个更新计数或ResultSet对象与更新计数的组合时使用对象与更新计数的组合时使用 u ResultSet getResultSet( ) throws SQLException 以以 ResultSet 对象的形式检索当前结果。每个结果对象的形式检索当前结果。每个结果只应调用一次此方法。当只应调用一次此

25、方法。当SQL语句的结果不是结语句的结果不是结果集时,将返回果集时,将返回null。 u boolean getMoreResults() throws SQLException 移动到此移动到此 Statement 对象的下一个结果,如果其为对象的下一个结果,如果其为 ResultSet 对象,则返回对象,则返回 true,并隐式关闭利用方,并隐式关闭利用方法法 getResultSet 获取的所有当前获取的所有当前 ResultSet 对象。对象。u int getUpdateCount() throws SQLException 以更新计数的形式检索当前结果;如果结果为以更新计数的形式检

26、索当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回对象或没有更多结果,则返回 -1。每个。每个结果只应调用一次此方法。结果只应调用一次此方法。 u int getMaxFieldSize() throws SQLException 检索可以为此检索可以为此 Statement 对象所生成对象所生成 ResultSet 对象中的对象中的字符和二进制列值返回的最大字节数字符和二进制列值返回的最大字节数。如果超过了该限制,则安静地丢弃多出的数据。如果超过了该限制,则安静地丢弃多出的数据。 u int getMaxRows() throws SQLException 检索由此检索由

27、此 Statement 对象生成的对象生成的 ResultSet 对象对象可以包含的最大行数。如果超过了此限制,则安可以包含的最大行数。如果超过了此限制,则安静地撤消多出的行。静地撤消多出的行。u int getQueryTimeout() throws SQLException 检索驱动程序等待检索驱动程序等待 Statement 对象执行的秒数。对象执行的秒数。如果超过该限制,则抛出如果超过该限制,则抛出 SQLException。 v 关闭关闭Statement对象对象u Statement对象将由对象将由Java垃圾收集程序自动关闭垃圾收集程序自动关闭u显式关闭将立即释放显式关闭将立即

28、释放DBMS资源,有助于避免潜资源,有助于避免潜在的内存问题。在的内存问题。 如何处理查询结果如何处理查询结果? ?v ResultSetu表示数据库结果集的数据表,通常通过执行查表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。询数据库的语句生成。u ResultSet 对象具有指向其当前数据行的指针。对象具有指向其当前数据行的指针。最初,最初,指针被置于第一行之前指针被置于第一行之前。next 方法将指方法将指针移动到下一行。针移动到下一行。u ResultSet 接口提供用于从当前行检索列值的接口提供用于从当前行检索列值的获取方法获取方法(getBoolean、getLong

29、等)等)u 可以使用列的索引编号或列的名称检索值可以使用列的索引编号或列的名称检索值u String getString(int columnIndex) throws SQLException u String getString(String columnName) throws SQLException 列名不区分大小写列名不区分大小写public interface ResultSetu对于获取方法对于获取方法getXXX( ),JDBC 驱动程序尝试将驱动程序尝试将基础数据转换为在获取方法中指定的基础数据转换为在获取方法中指定的 Java 类型,类型,并返回适当的并返回适当的 Jav

30、a 值。值。u用户不必关闭用户不必关闭ResultSet;当产生它的;当产生它的Statement关关闭、重新执行或用于从多结果序列中获取下一个闭、重新执行或用于从多结果序列中获取下一个结果时,该结果时,该ResultSet将被将被Statement自动关闭。自动关闭。 Statementstmt=conn.createStatement( ); ResultSet r=stmt.executeQuery(SELECT a,b,c FROM Table1“); while (r.next( ) /打印当前行的值。打印当前行的值。 Int i=r.getInt(a“); String s=r.g

31、etString(b“); Float f=r.getFloat(c“); System.out.println(ROW=+i+ +s+ +f ); 如何获取结果集中任意位置处的记录如何获取结果集中任意位置处的记录? ?u 游标控制游标控制u boolean next() throws SQLException 将指针从当前位置下移一行。将指针从当前位置下移一行。ResultSet 指针最初指针最初位于第一行之前位于第一行之前 u boolean previous() throws SQLException 将指针移动到此将指针移动到此 ResultSet 对象的上一行对象的上一行u bool

32、ean first() throws SQLException 将指针移动到此将指针移动到此 ResultSet 对象的第一行。对象的第一行。u boolean last() throws SQLException 将指针移动到此将指针移动到此 ResultSet 对象的最后一行。对象的最后一行。u void beforeFirst() throws SQLException 将指针移动到此将指针移动到此 ResultSet 对象的开头,正好位于对象的开头,正好位于第一行之前。第一行之前。 u void afterLast() throws SQLException 将指针移动到此将指针移动到

33、此 ResultSet 对象的末尾,正好位于最后对象的末尾,正好位于最后一行之后。一行之后。u boolean absolute(int row) throws SQLException 将指针移动到此将指针移动到此 ResultSet 对象的给定行编号。对象的给定行编号。 u boolean relative(int rows) throws SQLExceptionu按相对行数(或正或负)移动指针按相对行数(或正或负)移动指针u在在ResultSet对象或其父辈对象或其父辈Statement对象关闭之前,对象关闭之前,光标一直保持有效。光标一直保持有效。 如何向结果集及数据库中插入、删除、

34、如何向结果集及数据库中插入、删除、更改记录更改记录? ?可更新的可更新的ResultSetv创建可更新的结果集:创建可更新的结果集:ucreateStatement方法第二参数需要是方法第二参数需要是CONCUR_UPDATABLEu UpdatableResultSet不能保证获得可更新的结不能保证获得可更新的结果集,需要驱动程序的支持。果集,需要驱动程序的支持。u int getConcurrency() throws SQLException 检索此检索此 ResultSet 对象的并发模式。对象的并发模式。 并发类型并发类型ResultSet.CONCUR_READ_ONLY 或或 R

35、esultSet.CONCUR_UPDATABLE v 插入新行插入新行u可更新的可更新的 ResultSet 对象具有一个与其关联的对象具有一个与其关联的特殊行特殊行,该,该行用作构建要插入的行的行用作构建要插入的行的暂存区域暂存区域 (staging area)。u void insertRow() throws SQLException 将插入行的内容插入到此将插入行的内容插入到此 ResultSet 对象和数据库中。对象和数据库中。rs.moveToInsertRow(); / moves cursor to the insert rowrs.updateString(1, AINSW

36、ORTH); / updates the first column of the insert row to be AINSWORTH rs.updateInt(2,35); / updates the second column to be 35rs.updateBoolean(3, true); / updates the third column to true rs.insertRow(); rs.moveToCurrentRow(); v更新当前行中的列值更新当前行中的列值u void updateRow() throws SQLException 用此用此 ResultSet 对象

37、的当前行的新内容更新底层数据库。对象的当前行的新内容更新底层数据库。 v删除行删除行u将游标移动到想删除的行,调用方法将游标移动到想删除的行,调用方法deleteRow().u注:不同的注:不同的JDBC以不同的方式处理删除操作(将以不同的方式处理删除操作(将删除行移走,使其在结果集中不可见;或者在被删除行移走,使其在结果集中不可见;或者在被删除行的原来位置插入一个空行)。删除行的原来位置插入一个空行)。rs.absolute(5); / moves the cursor to the fifth row of rs rs.updateString(NAME, AINSWORTH); / up

38、dates the NAME column of row 5 to be AINSWORTH rs.updateRow(); / updates the row in the data source 可滚动的可滚动的ResultSetvScrollableResultSet,支持将结果集中的游标按任意,支持将结果集中的游标按任意方向移动。方向移动。v创建可滚动的创建可滚动的ResultSet:public Statement createStatement(int rsType, int rsConcurrenty) throws SQLException其中,其中,rsType必须是一下三种

39、变量之一,添加到必须是一下三种变量之一,添加到ResultSet接口中指示其对象类型:接口中指示其对象类型:uTYPE_FORWARD_ONLY:创建不可滚动的结果集:创建不可滚动的结果集,默认默认uTYPE_SCROLL_INSENSITIVE:创建可滚动的:创建可滚动的ResultSet对象,结果集打开时不反映变化对象,结果集打开时不反映变化uTYPE_SCROLL_SENSITIVE:创建可滚动的:创建可滚动的ResultSet对对象,结果集打开时反映变化象,结果集打开时反映变化 ursConcurrenty必须是必须是ResultSet常量中的一个,用常量中的一个,用于指定结果集时只读

40、的还是可更新的:于指定结果集时只读的还是可更新的:CONCUR_READ_ONLY 默认默认CONCUR_UPDATABLEu检查检查ResultSet对象是否可滚动:对象是否可滚动:ResultSet.getType()例如:例如:if(rs.getType()=ResultSet.TYPE_FORWARS_ONLY) System.out.println(“FORWARD_ONLY”):else System.out.println(“SCROLLABLE”);如果多次重复执行同一条如果多次重复执行同一条SQLSQL语句,只语句,只是语句中参数的取值不同,如何避免对是语句中参数的取值不同,

41、如何避免对该该SQLSQL语句进行重复编译语句进行重复编译? ?v PreparedStatement u SQL 语句被预编译并且存储在语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对对象中。然后可以使用此对象高效地多次执行该语句。象高效地多次执行该语句。u用来设置用来设置 IN 参数值的参数值的 setter 方法(方法(setShort、setString 等等)必须指定与输入参数的已定义等等)必须指定与输入参数的已定义 SQL 类型类型兼容兼容的类型。的类型。u 获取获取PreparedStatement 对象的方法对象的方法 PreparedSta

42、tement prepareStatement(String sql) throws SQLException 创建一个创建一个 PreparedStatement 对象来将参数化的对象来将参数化的 SQL 语语句发送到数据库。句发送到数据库。 SQL 语句可能包含一个或多个语句可能包含一个或多个 ? IN 参数占位符参数占位符的的 SQL 语句语句 public interface PreparedStatementextends Statementu PreparedStatement可以作为可以作为IN参数的变量包含参数的变量包含占位符,初始化的方法是调用该类的一系列占位符,初始化的方法

43、是调用该类的一系列setXXX()方法。方法。 usetXXX()方法一般有两个参数:第一个参数都是方法一般有两个参数:第一个参数都是int型,指示型,指示JDBC PreparedStatement对象的第对象的第几个参数将要被初始化。第二个参数的值就是几个参数将要被初始化。第二个参数的值就是PreparedStatemetn将要被初始化的参数取值将要被初始化的参数取值 u PreparedStatement接口有自己的接口有自己的executeQuery、executeUpdate和和execute方法,但并不需要方法,但并不需要SQL语句作为参数提供给这些方法,因为它们已经包语句作为参数

44、提供给这些方法,因为它们已经包含预编译含预编译SQL语句语句 如何执行带输入和输出参数的存储过程如何执行带输入和输出参数的存储过程? ?v CallableStatementu 用于执行用于执行 SQL 存储过程的接口存储过程的接口u 该对象包含了对存储过程的调用,但不包含该对象包含了对存储过程的调用,但不包含存储过程本身(存储过程是存储在数据库中的)存储过程本身(存储过程是存储在数据库中的)u 获取获取CallableStatement对象对象u CallableStatement prepareCall(String sql) throws SQLExceptionsql可能包含一个或多个

45、可能包含一个或多个 ? 参数占位符的参数占位符的 SQL 语句。语句。 public interface CallableStatementextends PreparedStatementu IN 参数值是使用从参数值是使用从 PreparedStatement 中继承的中继承的 set 方法方法设置的。设置的。u在执行存储过程之前,必须在执行存储过程之前,必须注册所有注册所有 OUT 参数参数的类型的类型;它们的值是在执行后通过此类提供的;它们的值是在执行后通过此类提供的 get 方法方法检索的。检索的。 u void registerOutParameter(int parameterI

46、ndex, int sqlType) throws SQLException 按顺序位置按顺序位置 parameterIndex 将将 OUT 参数注册为参数注册为 JDBC 类型类型 sqlType。 sqlType是由是由 java.sql.Types 定义的定义的 SQL 类型代码。类型代码。 u void registerOutParameter(String parameterName, int sqlType) throws SQLException 将名为将名为 parameterName 的的 OUT 参数注册为参数注册为 JDBC 类型类型 sqlType。v 对非常大的行值

47、使用流对非常大的行值使用流 u ResultSet可以获取任意大的可以获取任意大的LONGVARBINARY或或LONGVARCHAR数据。数据。u方法方法getBytes和和getString将数据返回为大的块(最将数据返回为大的块(最大为大为Statement.getMaxFieldSize的返回值)。的返回值)。u但是,以但是,以较小的固定块较小的固定块获取非常大的数据可能会获取非常大的数据可能会更方便更方便u InputStream getBinaryStream(int columnIndex) throws SQLException 以以未解释字节未解释字节的流的形式获取此的流的形

48、式获取此 ResultSet 对象的对象的当前行中指定列的值。当前行中指定列的值。 u InputStream getAsciiStream(int columnIndex) throws SQLException u以以 单字节单字节ASCII 字符流字符流的形式获取此的形式获取此 ResultSet 对象的当前行中指定列的值。对象的当前行中指定列的值。u InputStream getUnicodeStream(int columnIndex) throws SQLException u以以双字节双字节Unicode字符流字符流的形式获取此的形式获取此 ResultSet 对象的当前行中指

49、定列的值。对象的当前行中指定列的值。 JDBC/ODBC桥连接桥连接Access的硬件设置的硬件设置v 打开控制面板打开控制面板,选中管理工具。选中管理工具。v 打开管理工具,选中打开管理工具,选中(ODBC)数据源数据源v 打开数据源管理器,选择系统打开数据源管理器,选择系统DNS,并单击,并单击添加添加按按钮。钮。 v选中选中Driver do Microsoft Access (*mdb) v在在ODBC Microsoft Access安装界面中,安装界面中,填写数据源填写数据源(如如Book),并选择数据库,选,并选择数据库,选好后如图。单击确定,完成了设置。好后如图。单击确定,完成

50、了设置。u DatabaseMetaData getMetaData( ) throws SQLException 获取获取 DatabaseMetaData 对象,该对象包含关于对象,该对象包含关于 Connection 对象连接到的数据库的元数据。对象连接到的数据库的元数据。 元数据包括关于数据库的表、受支持的元数据包括关于数据库的表、受支持的 SQL 语语法、存储过程、此连接的功能等信息。法、存储过程、此连接的功能等信息。如何获取所连接数据库的属性如何获取所连接数据库的属性? ?DatabaseMetaDatav由由Connection.getMetaData()方法创建,可以用于获取方

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com