Java与数据库的连接1

上传人:仙*** 文档编号:241944701 上传时间:2024-08-07 格式:PPT 页数:79 大小:1.97MB
返回 下载 相关 举报
Java与数据库的连接1_第1页
第1页 / 共79页
Java与数据库的连接1_第2页
第2页 / 共79页
Java与数据库的连接1_第3页
第3页 / 共79页
点击查看更多>>
资源描述
JDBC 简介简介v数数据据库的的应用用目目前前已已经非非常常普普遍遍,在在应用用程程序序的的开开发过程程中中,经常常会会涉涉及及到到访问数数据据库。Java语言言为访问数数据据库提提供供了了方方便便的技的技术。vJava使使用用JDBC(Java Database Connectivity)技技 术 进 行行 数数 据据 库 的的 访 问。Java应用用程程序序通通过JDBC API和和JDBC驱动程序管理器程序管理器进行通信。行通信。第1页/共79页JDBC的诞生的诞生v从从ODBC到到JDBCuODBC(Open DataBase Connectivity),是一种用来在,是一种用来在关系数据关系数据库以及非关系数据以及非关系数据库管理系管理系统中存取数据,中存取数据,用用C语言言实现的的标准准应用程序接口。用程序接口。u其主要其主要结构:构:应用程序接口用程序接口、驱动程序管理器程序管理器、数据数据库驱动程序程序和和数据源数据源。第2页/共79页v JDBC的的诞生生u 以前由于没有一个以前由于没有一个Java语言的数据言的数据库API,编程人程人员不得不在不得不在Java程序中加入程序中加入C语言的言的ODBC函数函数调用,从而使用,从而使Java的很多的很多优秀特性秀特性无法充分无法充分发挥u ODBC具有不易使用,非面向具有不易使用,非面向对象等缺点象等缺点u为了充分了充分发挥java语言的特性,迎合数据言的特性,迎合数据库开开发的需求,的需求,sun开开发了一套了一套java语言的数据言的数据库应用程序开用程序开发接口和接口和类,即,即JDBC。它在。它在Java程序中程序中实现数据数据库操作功能并操作功能并简化操作化操作过程。程。第3页/共79页 u JDBC为数据数据库及其工具的开及其工具的开发人人员提供了一提供了一个个标准的准的API,使他,使他们能能够用用纯Java API编写写数据数据库应用程序用程序u JDBC支持基本支持基本SQL语句,提供多句,提供多样化的数化的数据据库连接方式,接方式,为各种不同的数据各种不同的数据库提供提供统一的操作界面一的操作界面 第4页/共79页JDBC连接数据库的方法连接数据库的方法1.通通过专用网用网络协议创建的建的驱动程序与数据程序与数据库直接通信。直接通信。u 直接使用数据直接使用数据库厂商提供的、用厂商提供的、用专用网用网络协议创建的建的驱动程序程序u各大厂商都各大厂商都为数据数据库提供了提供了这种种JDBC驱动,这种方式最种方式最简单实用。用。应用程序应用程序JDBC API驱动程序驱动程序数据源数据源第5页/共79页 2.通通过JDBC-ODBC桥与与ODBC数据数据库通信通信uSun公司公司发行了一个用于行了一个用于访问ODBC数据源的数据源的驱动程序,称程序,称为JDBC-ODBC桥接器。接器。该桥接器接器用用jdbcodbc.class和一个用于和一个用于访问ODBC驱动程程序的序的本地本地库来来实现的。的。u 对于于Windows平台,平台,该本地本地库是一个是一个DLL动态链接接库JDBCODBC.DLLu其其优点是使点是使JDBC目前有能力目前有能力访问几乎所有的数几乎所有的数据据库。应用程序应用程序数据源数据源JDBC APIJDBC-ODBCODBC APIODBC层层第6页/共79页 3.通通过部分部分专用的用的驱动程序与数据程序与数据库通信通信u将将JDBC数据数据库调用直接翻用直接翻译为厂商厂商专用的用的API,执行更有效,更快捷。行更有效,更快捷。应用程序应用程序JDBC API驱动程序驱动程序数据源数据源专用专用API第7页/共79页JDBC APIv JDBC API所有的所有的类和接口都集中在和接口都集中在java.sql和和javax.sql这两个包中两个包中驱动管理器驱动管理器连接连接语句语句结果集结果集(1)登记并加载登记并加载JDBC驱动程序驱动程序(2)建立与建立与SQL数据库的连接数据库的连接(3)传送一个传送一个SQL查询查询(4)获得结果获得结果第8页/共79页JDBC API的使用方法的使用方法v 注册数据注册数据库的的驱动程序程序v 隐式加式加载u 作作为初始化的一部分,初始化的一部分,DriverManager 类会会尝试加加载在在“jdbc.drivers”系系统属性中引用的属性中引用的驱动程序程序类。这允允许用用户自定自定义由他由他们的的应用程序使用程序使用的用的 JDBC Driver。例如。例如jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriverupublicstaticvoidregisterDriver(Driverdriver)throwsSQLException 向向 DriverManager 注册注册给定定驱动程序程序 第9页/共79页u 一旦一旦DriverManager类被初始化,将不再被初始化,将不再检查jdbc.drivers属性表属性表u 需要持久的需要持久的预设环境境public interface Driver l 每个驱动程序类必须实现的接口每个驱动程序类必须实现的接口l Java SQL 框架允许多个数据库驱动程序框架允许多个数据库驱动程序l 每个驱动程序都应该提供一个实现每个驱动程序都应该提供一个实现 Driver 接口的类接口的类l DriverManager 会试着加载尽可能多的它可以找到会试着加载尽可能多的它可以找到 的驱动程序,然后,对于任何给定连接请求,它会的驱动程序,然后,对于任何给定连接请求,它会 让每个驱动程序让每个驱动程序依次试着连接到目标依次试着连接到目标 URL DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver();第10页/共79页v DriverManageru DriverManager 类是是 JDBC 的管理的管理层,作用于用,作用于用户和和驱动程序之程序之间。它跟踪可用的。它跟踪可用的驱动程序,并在数据程序,并在数据库和相和相应驱动程序之程序之间建立建立连接。接。u publicstaticDrivergetDriver(Stringurl)throwsSQLException 试图查找能理解找能理解给定定 URL 的的驱动程序。程序。u publicstaticEnumerationgetDrivers()检索索带有当前有当前调用方可以用方可以访问的所有当前已加的所有当前已加载 JDBC 驱动程序的程序的 Enumeration u publicstaticvoidregisterDriver(Driverdriver)throwsSQLException 向向 DriverManager 注册注册给定定驱动程序。在加程序。在加载驱动程程序序时由由驱动程序自程序自动调用用 第11页/共79页v 显式加式加载u publicstaticClassforName(StringclassName)throwsClassNotFoundExceptionjava.lang.Class u使用与当前使用与当前 applet 或或应用程序相同的用程序相同的类加加载器器显式加式加载驱动程序程序 Class.forName(“com.mysql.jdbc.Driver”);Class.forName(“acme.db.Driver”);如果将如果将acme.db.Driver编写为加载时创建实例,并调用以该实例编写为加载时创建实例,并调用以该实例为参数的为参数的DriverManager.registerDriver,则它在,则它在DriverManager的驱动程序列表中,并可用于创建连接的驱动程序列表中,并可用于创建连接 第12页/共79页v将将驱动程序添加到程序添加到Java.lang.System的属性的属性jdbc.drivers中中 u是一个由是一个由DriverManager类加加载的的驱动程序程序类名名的列表,由冒号分隔的列表,由冒号分隔jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;u初始化初始化DriverManager类时,它搜索系,它搜索系统属性属性jdbc.drivers,如果用,如果用户已已输入了一个或多个入了一个或多个驱动程序,程序,则DriverManager类将将试图加加载它它们。u一旦一旦DriverManager类被初始化,将不再被初始化,将不再检查jdbc.drivers属性表属性表第13页/共79页v 建立数据建立数据库连接接u publicstaticConnectiongetConnection(Stringurl)throwsSQLException 试图建立到建立到给定数据定数据库 URL 的的连接。接。DriverManager 试图从已注册的从已注册的驱动程序集中程序集中选择一个适当的一个适当的驱动程序。程序。假定构造数据假定构造数据库连接接时不需要用不需要用户名、口令或名、口令或其他数据其他数据库属性属性u DriverManager将将检查每个每个驱动程序,程序,轮流在流在每个每个驱动程序上程序上调用方法用方法Driver.connect,查看它看它是否可以建立是否可以建立连接。接。u DriverManager将使用它所找到的第一个可以将使用它所找到的第一个可以成功成功连接到接到给定定URL的的驱动程序程序 第14页/共79页u publicstaticConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLExceptioninfo包含包含连接数据接数据库所需的所有属性所需的所有属性项;通常至;通常至少少应该包括包括 user 和和 password 属性属性u publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException指定了指定了连接的用接的用户名和密名和密码Connection con=DriverManager.getConnection(“jdbc:mysql:/localhost/UpdateDB”,”root”,”);第15页/共79页v Connection对象象u 用于用于连接数据接数据库和和Java应用程序用程序u 打开打开连接的方法接的方法u Connectionconnect(Stringurl,Propertiesinfo)throwsSQLExceptionjava.sql.Driver 试图创建一个到建一个到给定定 URL 的数据的数据库连接。接。u DriverManager.getConnectionu提供提供应用程序与数据用程序与数据库的的静静态连接接u 单一一应用程序可以:用程序可以:u 拥有与有与单个数据个数据库的一个或多个的一个或多个连接接u 拥有与有与许多不同数据多不同数据库的的连接接publicinterfaceConnection第16页/共79页JDBC URLvJDBC URL提供了一种提供了一种标识数据数据库的方法,的方法,可以使用相可以使用相应的的驱动程序程序识别该数据数据库,并与之建立并与之建立连接。接。第17页/共79页 v标准准语法:法:jdbc:ujdbc协议:JDBC URL中的中的协议总是是jdbc。u子子协议:驱动程序名或程序名或连接机制的名称。接机制的名称。u如果要用网如果要用网络命名服命名服务,则命名服命名服务可以作可以作为子子协议。Jdbc:dcenaming:accountsu驱动程序程序编程程员可保留某个名称以将之用作可保留某个名称以将之用作JDBC URL的子的子协议名名 u子名称:数据子名称:数据库的唯一的唯一标识符。符。u如果数据如果数据库是通是通过Internet来来访问的的,则遵循命名遵循命名规定定 /主机名主机名:端口端口/数据数据库名名 例例 jdbc:odbc:goodsjdbc:dcenaming:accountsjdbc:dbnet:/wombat:356/fredjdbc:mysql:/localhost/UpdateDB第18页/共79页odbc子协议子协议vodbc子子协议用于指定用于指定ODBC风格的数据格的数据资源源名称的名称的URL,允,允许指定任意多的属性指定任意多的属性值。v语法:法:Jdbc:odbc:;=例:例:Jdbc:odbc:students;UID=tech;PWD=123Jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER 第19页/共79页如何与数据库建立连接如何与数据库建立连接?第20页/共79页获取和安装获取和安装JDBCv以以mysql为例:例:v首先,下首先,下载mysql,并安装。,并安装。uhttp:/ 下下载mysql-connector-java-5.1.5.tar.zipu解解压,并,并进行相行相应的配置。的配置。第21页/共79页 v配置方法:配置方法:u进入入Javajre1.6.0_02lib目目录将将mysql-connector-java-5.1.5-bin.jar拷拷贝到到该目目录下。下。u配置配置classpath,追加,追加%JAVA_HOME%jre1.6.0_02lib mysql-connector-java-5.1.5-bin.jar;v配置的目的是配置的目的是让java应用程序找到用程序找到连接接mysql的的驱动 第22页/共79页第23页/共79页如何向数据库递交查询和更新请求如何向数据库递交查询和更新请求并获得返回的结果并获得返回的结果?第24页/共79页v Statement对象象u 用于用于执行行SQL语句并句并获取数据取数据库的返回的返回结果果u StatementcreateStatement()throwsSQLExceptionjava.sql.Connectionu常用方法常用方法u booleanexecute(Stringsql)throwsSQLException 执行行给定的定的 SQL 语句,句,该语句可能返回多个句可能返回多个结果。果。如果如果结果是果是ResultSet对象象则返回返回true;结果是更新果是更新计数或数或执行的行的语句是句是DDL命令命令则返回返回false u ResultSetexecuteQuery(Stringsql)throwsSQLException执行行给定的定的 SQL 语句,句,该语句返回句返回单个个 ResultSet 对象。象。publicinterfaceStatement第25页/共79页u intexecuteUpdate(Stringsql)throwsSQLException 执行行给定定 SQL 语句,句,该语句可能句可能为 INSERT、UPDATE 或或 DELETE 语句,或者不返回任何内容的句,或者不返回任何内容的 SQL 语句(如句(如 SQL DDL 语句)。句)。返回返回INSERT、UPDATE 或或 DELETE 语句的行句的行计数;或者数;或者 0,表示不返回任何内容的,表示不返回任何内容的 SQL 语句句 u执行行语句的所有方法都将关句的所有方法都将关闭所所调用的用的Statement对象的当前打开象的当前打开结果集(如果存在)。果集(如果存在)。这意味着在重意味着在重新新执行行Statement对象之前,需要完成象之前,需要完成对当前当前ResultSet对象的象的处理。理。u 使用方法使用方法execute()u仅在在语句能返回多个句能返回多个ResultSet对象、多个更新象、多个更新计数或数或ResultSet对象与更新象与更新计数的数的组合合时使用使用 第26页/共79页u ResultSetgetResultSet()throwsSQLException 以以 ResultSet 对象的形式象的形式检索当前索当前结果。每个果。每个结果果只只应调用一次此方法。当用一次此方法。当SQL语句的句的结果不是果不是结果果集集时,将返回,将返回null。u booleangetMoreResults()throwsSQLException 移移动到此到此 Statement 对象的下一个象的下一个结果,如果其果,如果其为 ResultSet 对象,象,则返回返回 true,并,并隐式关式关闭利用方利用方法法 getResultSet 获取的所有当前取的所有当前 ResultSet 对象。象。u intgetUpdateCount()throwsSQLException 以更新以更新计数的形式数的形式检索当前索当前结果;如果果;如果结果果为 ResultSet 对象或没有更多象或没有更多结果,果,则返回返回-1。每个。每个结果只果只应调用一次此方法。用一次此方法。第27页/共79页u intgetMaxFieldSize()throwsSQLException 检索可以索可以为此此 Statement 对象所生成象所生成 ResultSet 对象中的象中的字符和二字符和二进制列制列值返回的最大字返回的最大字节数数。如果超如果超过了了该限制,限制,则安静地安静地丢弃多出的数据。弃多出的数据。u intgetMaxRows()throwsSQLException 检索由此索由此 Statement 对象生成的象生成的 ResultSet 对象象可以包含的最大行数。如果超可以包含的最大行数。如果超过了此限制,了此限制,则安安静地撤消多出的行。静地撤消多出的行。u intgetQueryTimeout()throwsSQLException 检索索驱动程序等待程序等待 Statement 对象象执行的秒数。行的秒数。如果超如果超过该限制,限制,则抛出抛出 SQLException。第28页/共79页v 关关闭Statement对象象u Statement对象将由象将由Java垃圾收集程序自垃圾收集程序自动关关闭u显式关式关闭将立即将立即释放放DBMS资源,有助于避免潜源,有助于避免潜在的内存在的内存问题。第29页/共79页如何处理查询结果如何处理查询结果?第30页/共79页v ResultSetu表示数据表示数据库结果集的数据表,通常通果集的数据表,通常通过执行行查询数据数据库的的语句生成。句生成。u ResultSet 对象具有指向其当前数据行的指象具有指向其当前数据行的指针。最初,最初,指指针被置于第一行之前被置于第一行之前。next 方法将指方法将指针移移动到下一行。到下一行。u ResultSet 接口提供用于从当前行接口提供用于从当前行检索列索列值的的获取方法取方法(getBoolean、getLong 等)等)u 可以使用列的索引可以使用列的索引编号或列的名称号或列的名称检索索值u StringgetString(intcolumnIndex)throwsSQLException u StringgetString(StringcolumnName)throwsSQLException列名不区分大小写列名不区分大小写publicinterfaceResultSet第31页/共79页u对于于获取方法取方法getXXX(),JDBC 驱动程序程序尝试将将基基础数据数据转换为在在获取方法中指定的取方法中指定的 Java 类型,型,并返回适当的并返回适当的 Java 值。u用用户不必关不必关闭ResultSet;当;当产生它的生它的Statement关关闭、重新、重新执行或用于从多行或用于从多结果序列中果序列中获取下一个取下一个结果果时,该ResultSet将被将被Statement自自动关关闭。Statement stmt=conn.createStatement();ResultSet r=stmt.executeQuery(SELECT a,b,c FROM Table1“);while(r.next()/打印当前行的值。打印当前行的值。Int i=r.getInt(a“);String s=r.getString(b“);Float f=r.getFloat(c“);System.out.println(ROW=+i+s+f);第32页/共79页v获取取MyDB数据数据库中的表属性,包括列的中的表属性,包括列的最大字最大字节数,表的最大行数,数,表的最大行数,驱动程序等程序等待待SQL操作操作执行的秒数行的秒数 v在在MyDB中中创建一个建一个teacher表,包括的字段及表,包括的字段及类型型为:id(int),name(varchar(10),sex(char(2),age(int)v 以以id为主主键v 将将teachers.txt的内容插入的内容插入teacher表中表中第33页/共79页v 在在teacher表上表上创建一个建一个仅包括包括name和和age列的列的视图teacher_viewv 查询teacher和和teacher_view的内容的内容第34页/共79页第35页/共79页如何获取结果集中任意位置处的记录如何获取结果集中任意位置处的记录?第36页/共79页u 游游标控制控制u booleannext()throwsSQLException 将指将指针从当前位置下移一行。从当前位置下移一行。ResultSet 指指针最初最初位于第一行之前位于第一行之前 u booleanprevious()throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的上一行象的上一行u booleanfirst()throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的第一行。象的第一行。u booleanlast()throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的最后一行。象的最后一行。u voidbeforeFirst()throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的开象的开头,正好位于,正好位于第一行之前。第一行之前。第37页/共79页u voidafterLast()throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的末尾,正好位于最后象的末尾,正好位于最后一行之后。一行之后。u booleanabsolute(introw)throwsSQLException 将指将指针移移动到此到此 ResultSet 对象的象的给定行定行编号。号。u booleanrelative(introws)throwsSQLException 按相按相对行数(或正或行数(或正或负)移)移动指指针u在在ResultSet对象或其父象或其父辈Statement对象关象关闭之前,之前,光光标一直保持有效。一直保持有效。第38页/共79页 v 输出出teacher表的所有内容(包括列名和表的所有内容(包括列名和记录)v 在在teacher表上表上执行行查询,并将,并将结果填充到果填充到结果集果集中中v 输出出结果集第一行果集第一行记录v输出出结果集第四行果集第四行记录v输出出结果集最后一行果集最后一行记录v输出出结果集当前位置的前两行果集当前位置的前两行对应记录v输出出结果集当前位置的前一行果集当前位置的前一行对应记录第39页/共79页第40页/共79页如何向结果集及数据库中插入、删除、如何向结果集及数据库中插入、删除、更改记录更改记录?第41页/共79页可更新的可更新的ResultSetv创建可更新的建可更新的结果集:果集:ucreateStatement方法第二参数需要是方法第二参数需要是CONCUR_UPDATABLEu UpdatableResultSet不能保不能保证获得可更新的得可更新的结果集,需要果集,需要驱动程序的支持。程序的支持。u intgetConcurrency()throwsSQLException 检索此索此 ResultSet 对象的并象的并发模式。模式。并并发类型型ResultSet.CONCUR_READ_ONLY 或或 ResultSet.CONCUR_UPDATABLE 第42页/共79页v 插入新行插入新行u可更新的可更新的 ResultSet 对象具有一个与其关象具有一个与其关联的的特殊行特殊行,该行用作构建要插入的行的行用作构建要插入的行的暂存区域存区域(staging area)。u voidinsertRow()throwsSQLException 将插入行的内容插入到此将插入行的内容插入到此 ResultSet 对象和数据象和数据库中。中。rs.moveToInsertRow();/moves cursor to the insert rowrs.updateString(1,AINSWORTH);/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();第43页/共79页v更新当前行中的列更新当前行中的列值u voidupdateRow()throwsSQLException 用此用此 ResultSet 对象的当前行的新内容更新底象的当前行的新内容更新底层数据数据库。v删除行除行u将游将游标移移动到想到想删除的行,除的行,调用方法用方法deleteRow().u注:不同的注:不同的JDBC以不同的方式以不同的方式处理理删除操作(将除操作(将删除行移走,使其在除行移走,使其在结果集中不可果集中不可见;或者在被;或者在被删除行的原来位置插入一个空行)。除行的原来位置插入一个空行)。rs.absolute(5);/moves the cursor to the fifth row of rs rs.updateString(NAME,AINSWORTH);/updates the NAME column of row 5 to be AINSWORTH rs.updateRow();/updates the row in the data source 第44页/共79页(1)在表中插入一条新记录)在表中插入一条新记录“7 LiuJie F 23”(2)删除第四条记录)删除第四条记录(3)将第二条记录的教师年龄修改为)将第二条记录的教师年龄修改为40第45页/共79页可滚动的可滚动的ResultSetvScrollableResultSet,支持将,支持将结果集中的游果集中的游标按任意按任意方向移方向移动。v创建可建可滚动的的ResultSet:publicStatementcreateStatement(intrsType,intrsConcurrenty)throwsSQLException其中,其中,rsType必必须是一下三种是一下三种变量之一,添加到量之一,添加到ResultSet接口中指示其接口中指示其对象象类型:型:uTYPE_FORWARD_ONLY:创建不可建不可滚动的的结果集果集,默默认uTYPE_SCROLL_INSENSITIVE:创建可建可滚动的的ResultSet对象,象,结果集打开果集打开时不反映不反映变化化uTYPE_SCROLL_SENSITIVE:创建可建可滚动的的ResultSet对象,象,结果集打开果集打开时反映反映变化化第46页/共79页 ursConcurrenty必必须是是ResultSet常量中的一个,用常量中的一个,用于指定于指定结果集是只果集是只读的的还是可更新的:是可更新的: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”);第47页/共79页如果多次重复执行同一条如果多次重复执行同一条SQLSQL语句,只语句,只是语句中参数的取值不同,如何避免对是语句中参数的取值不同,如何避免对该该SQLSQL语句进行重复编译语句进行重复编译?第48页/共79页v PreparedStatement u SQL 语句被句被预编译并且存并且存储在在 PreparedStatement 对象中。然后可以使用此象中。然后可以使用此对象高效地多次象高效地多次执行行该语句。句。u用来用来设置置 IN 参数参数值的的 setter 方法(方法(setShort、setString 等等)必等等)必须指定与指定与输入参数的已定入参数的已定义 SQL 类型型兼容兼容的的类型。型。u 获取取PreparedStatement 对象的方法象的方法PreparedStatementprepareStatement(Stringsql)throwsSQLException 创建一个建一个 PreparedStatement 对象来将参数化的象来将参数化的 SQL 语句句发送到数据送到数据库。SQL 语句可能包含一个或多个句可能包含一个或多个?IN 参数占位符参数占位符的的 SQL 语句句 public interface PreparedStatementextends Statement第49页/共79页u PreparedStatement可以作可以作为IN参数的参数的变量包含量包含占位符,初始化的方法是占位符,初始化的方法是调用用该类的一系列的一系列setXXX()方法。方法。usetXXX()方法一般有两个参数:第一个参数都是方法一般有两个参数:第一个参数都是int型,指示型,指示JDBC PreparedStatement对象的第象的第几个参数将要被初始化。第二个参数的几个参数将要被初始化。第二个参数的值就是就是PreparedStatemetn将要被初始化的参数取将要被初始化的参数取值 u PreparedStatement接口有自己的接口有自己的executeQuery、executeUpdate和和execute方法,但并不需要方法,但并不需要SQL语句作句作为参数提供参数提供给这些方法,因些方法,因为它它们已已经包包含含预编译SQL语句句 第50页/共79页例:将例:将mysql的的myDB数据库中数据库中teacher表的表的ChenHong 的年龄修改为的年龄修改为30,LiMing的年龄修改为的年龄修改为20第51页/共79页如何执行带输入和输出参数的存储过程如何执行带输入和输出参数的存储过程?第52页/共79页v CallableStatementu 用于用于执行行 SQL 存存储过程的接口程的接口u 该对象包含了象包含了对存存储过程的程的调用用,但不包含,但不包含存存储过程本身(存程本身(存储过程是存程是存储在数据在数据库中的)中的)u 获取取CallableStatement对象象u CallableStatementprepareCall(Stringsql)throwsSQLExceptionsql可能包含一个或多个可能包含一个或多个?参数占位符的参数占位符的 SQL 语句。句。public interface CallableStatementextends PreparedStatement第53页/共79页u IN 参数参数值是使用从是使用从 PreparedStatement 中中继承承的的 set 方法方法设置的。置的。u在在执行存行存储过程之前,必程之前,必须注册所有注册所有 OUT 参数参数的的类型型;它;它们的的值是在是在执行后通行后通过此此类提供的提供的 get 方法方法检索的。索的。u voidregisterOutParameter(intparameterIndex,intsqlType)throwsSQLException 按按顺序位置序位置 parameterIndex 将将 OUT 参数注册参数注册为 JDBC 类型型 sqlType。sqlType是由是由 java.sql.Types 定定义的的 SQL 类型代型代码。uvoidregisterOutParameter(StringparameterName,intsqlType)throwsSQLException 将名将名为 parameterName 的的 OUT 参数注册参数注册为 JDBC 类型型 sqlType。第54页/共79页例:执行存储过程,对例:执行存储过程,对mysql中的中的myDB数据库中的数据库中的teacher表,通过教师表,通过教师id能得到教师姓名能得到教师姓名第55页/共79页v 对非常大的行非常大的行值使用流使用流 u ResultSet可以可以获取任意大的取任意大的LONGVARBINARY或或LONGVARCHAR数据。数据。u方法方法getBytes和和getString将数据返回将数据返回为大的大的块(最(最大大为Statement.getMaxFieldSize的返回的返回值)。)。u但是,以但是,以较小的固定小的固定块获取非常大的数据可能会取非常大的数据可能会更方便更方便u InputStreamgetBinaryStream(intcolumnIndex)throwsSQLException 以以未解未解释字字节的流的形式的流的形式获取此取此 ResultSet 对象的象的当前行中指定列的当前行中指定列的值。第56页/共79页u InputStreamgetAsciiStream(intcolumnIndex)throwsSQLException u以以 单字字节ASCII 字符流字符流的形式的形式获取此取此 ResultSet 对象的当前行中指定列的象的当前行中指定列的值。u InputStreamgetUnicodeStream(intcolumnIndex)throwsSQLExceptionu以以双字双字节Unicode字符流字符流的形式的形式获取此取此 ResultSet 对象的当前行中指定列的象的当前行中指定列的值。第57页/共79页JDBC/ODBC桥连接桥连接Access的硬件设置的硬件设置v打开控制面板打开控制面板,选中管理工具。中管理工具。v打开管理工具,打开管理工具,选中中(ODBC)数据源数据源v打开数据源管理器,打开数据源管理器,选择系系统DNS,并,并单击添加添加按按钮。第58页/共79页 v选中中Driver do Microsoft Access (*mdb)第59页/共79页 v在在ODBC Microsoft Access安装界面中,填安装界面中,填写数据源写数据源(如如Book),并,并选择数据数据库,选好好后如后如图。单击确定,完成了确定,完成了设置。置。第60页/共79页将将Access的学生表的内容输出的学生表的内容输出第61页/共79页u DatabaseMetaDatagetMetaData()throwsSQLException 获取取 DatabaseMetaData 对象,象,该对象包含关于象包含关于 Connection 对象象连接到的数据接到的数据库的元数据。的元数据。元数据包括关于数据元数据包括关于数据库的表、受支持的的表、受支持的 SQL 语法、存法、存储过程、此程、此连接的功能等信息。接的功能等信息。如何获取所连接数据库的属性如何获取所连接数据库的属性?第62页/共79页DatabaseMetaDatav由由Connection.getMetaData()方法方法创建,可以用于建,可以用于获取取数据数据库的相关信息:的相关信息:v例如:例如:获取数据取数据库中表的名字中表的名字Connection con=DriverManager.getConnection(“jdbc:odbc:Customers”);DatabaseMetaData dm=con.getMetaData();ResultSet rs=dm.getTables(null,null,”%”,new String“Table”);ResultSetgetTables(Stringcatalog,StringschemaPattern,StringtableNamePattern,Stringtypes)throwsSQLException 检索可在索可在给定定类别中使用的表的描述。中使用的表的描述。仅返回与返回与类别、模式、模式、表名称和表名称和类型型标准匹配的表描述。准匹配的表描述。类别名称类别名称模式名称模式模式名称模式表名称模式表名称模式要包括的表类要包括的表类型组成的列表型组成的列表第63页/共79页 v从数据从数据库获得的常得的常规信息的方法:信息的方法:uStringgetURL()throwsSQLException 检索此索此 DBMS 的的 URL u StringgetDriverName()throwsSQLException 检索此索此JDBC驱动程序的名称程序的名称uStringgetUserName()throwsSQLException 检索此数据索此数据库的已知的用的已知的用户名称名称 uString getDatabaseProductName()throwsSQLException 检索此数据索此数据库产品的名称。品的名称。第64页/共79页u String getSQLKeywords()throwsSQLException 检索此数据索此数据库的的还“不不”是是 SQL92 关关键字的所有字的所有 SQL 关关键字的逗号分隔列表。字的逗号分隔列表。u booleannullsAreSortedHigh()throwsSQLException 检索索 NULL 值是否被高排序。是否被高排序。u booleannullsAreSortedLow()throwsSQLException 检索索 NULL 值是否被低排序是否被低排序第65页/共79页 v检索信息的方法:索信息的方法:u booleansupportsBatchUpdates()throwsSQLException 检索此数据索此数据库是否支持批量更新是否支持批量更新 u booleansupportsStoredProcedures()throwsSQLException 检索此数据索此数据库是否支持使用存是否支持使用存储过程程转义语法的法的存存储过程程调用用 u booleansupportsFullOuterJoins()throwsSQLException 检索此数据索此数据库是否支持完全嵌套的外是否支持完全嵌套的外连接。接。u booleansupportsPositionedDelete()throwsSQLException 检索此数据索此数据库是否支持位置的是否支持位置的 DELETE 语句。句。第66页/共79页v检索索SQL对象及属性:象及属性:uResultSetgetSchemas()throwsSQLException 检索可在此数据索可在此数据库中使用的模式名称。模式列中使用的模式名称。模式列为:TABLE_SCHEM,TABLE_CATALOGuResultSet getCatalogs()throws SQLException 检索可在此数据索可在此数据库中使用的中使用的类别名称。名称。类别列列为:TABLE_CATu ResultSetgetTables(Stringcatalog,StringschemaPattern,StringtableNamePattern,Stringtypes)throwsSQLExceptionucatalog类别名称名称u schemaPattern模式名称的模式模式名称的模式u tableNamePattern表名称模式表名称模式u type要包括的表要包括的表类型型组成的列表成的列表第67页/共79页u 表描述的列表描述的列为:uTABLE_CAT 表表类别uTABLE_SCHEM 表模式表模式u,TABLE_NAME 表名称表名称uTABLE_TYPE 表表类型型uREMARKS,表的解表的解释性注性注释uTYPE_CAT,类型型类别uTYPE_SCHEM,类型模式型模式uTYPE_NAME,类型名称型名称uSELF_REFERENCING_COL_NAME,有有类型表的型表的指定指定”identifier”列的名称列的名称uREF_GENERATION 指定在指定在 SELF_REFERENCING_COL_NAME 中中创建建值的方式的方式 第68页/共79页u ResultSetgetProcedures(Stringcatalog,StringschemaPattern,StringprocedureNamePattern)throwsSQLException 检索可在索可在给定定类别中使用的存中使用的存储过程的描述。程的描述。过程描述的列程描述的列为:PROCEDURE_CAT,PROCEDURE_SCHEM,PROCEDURE_NAME,REMARKS 过程的解程的解释性注性注释 PROCEDURE_TYPE 过程的种程的种类l procedureResultUnknown 可能返回可能返回结果果l procedureNoResult 不返回不返回结果果l procedureReturnsResult 返回返回结果果uResultSetgetPrimaryKeys(Stringcatalog,Stringschema,Stringtable)throwsSQLException 检索索对给定表的主定表的主键列的描述。它列的描述。它们根据根据 COLUMN_NAME 进行排序。行排序。第69页/共79页v 输出出MyDB中中mydb数据数据库的下列属性的下列属性u 数据数据库URLu 驱动程序名程序名u 对表及表及视图的描述的描述u 对模式的描述模式的描述u 数据数据库中使用的中使用的类别名称名称u 对personal表的主表的主键描述描述u 对存存储过程的描述程的描述u 用用户名名u 数据数据库产品名品名u SQL关关键字字u null是升序是升序还是降序排列是降序排列第70页/共79页u 是否支持批量更新是否支持批量更新u 是否支持存是否支持存储过程程u 是否支持完全外是否支持完全外连接接u 是否支持定点是否支持定点删除除 第71页/共79页第72页/共79页第73页/共79页ResultSetMetaDatav ResultSet中有关列的信息可以中有关列的信息可以调用用getMetaData()方法方法获得。得。v返回的返回的ResultSetMetaData对象可以象可以查询ResultSet对象的列的号象的列的号码、类型和属性。型和属性。如何获取结果集的相关属性如何获取结果集的相关属性?第74页/共79页u intgetColumnCount()throwsSQLException 返回此返回此 ResultSet 对象中的列数象中的列数u intgetColumnDisplaySize(intcolumn)throwsSQLException 指示指定列的最大指示指定列的最大标准准宽度,以字符度,以字符为单位位u StringgetColumnName(intcolumn)throwsSQLException 获取指定列的名称。取指定列的名称。u intgetColumnType(intcolumn)throwsSQLException 获取指定列的取指定列的 SQL 类型。型。u StringgetColumnTypeName(intcolumn)throwsSQLException 获取指定列的数据取指定列的数据库特定的特定的类型名称。型名称。第75页/共79页u StringgetTableName(intcolumn)throwsSQLException 获取指定列的表名称。取指定列的表名称。u booleanisAutoIncrement(intcolumn)throwsSQLException 指示是否自指示是否自动为指定列指定列进行行编号号u intisNullable(intcolumn)throwsSQLException 指示指定列中的指示指定列中的值是否可以是否可以为 nullu booleanisReadOnly(intcolumn)throwsSQLException 指示指定的列是否明确不可写入。指示指定的列是否明确不可写入。第76页/共79页u intgetPrecision(intcolumn)throwsSQLException 获取指定列的指定列取指定列的指定列宽。uintgetScale(intcolumn)throwsSQLException 获取指定列的小数点右取指定列的小数点右边的位数的位数第77页/共79页v 显示从示从teacher表表查询得到的得到的结果集的下列属性果集的下列属性u 结果集的列数果集的列数u 结果集各列的列名果集各列的列名u 表名表名u 各列的各列的类型名型名u 各列的各列的SQL类型型标识u 工工资列的列的总宽度度u 工工资列的小数位数列的小数位数u 各列的最大各列的最大标准准宽度度u 各列的各列的值是否自是否自动增增长u 各列是否允各列是否允许取空取空值u 各列是否是只各列是否是只读的的第78页/共79页第79页/共79页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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