《JDBC数据库访问.ppt》由会员分享,可在线阅读,更多相关《JDBC数据库访问.ppt(119页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java Web Java Web Java Web Java Web 编程技术编程技术编程技术编程技术第第7 7章章 JDBCJDBC数据库访问数据库访问7.1 数据库简介 7.2 Java数据库技术概述 7.3 传统的数据库连接方法7.4 JDBC API介绍7.5 访问数据库元数据(自学)7.6 预处理语句7.7 使用数据源连接数据库(自学)7.8 DAO设计模式介绍7.9可调用语句7.10事务处理(自学)7.1 数据库简介vPostgreSQLvMySQLvSQLServervORACLE7.1.1 PostgreSQL数据库简介vPostgreSQL是对象关系型数据库管理系统(ORD
2、BMS)v它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一,有着非常广泛的用户vPostgreSQL支持事务、子查询、多版本并发控制、数据完整性检查等特性,并且支持多语言的应用开发v能在包括Linux、FreeBSD和Windows等多种平台下运行PostgreSQL的下载和安装 v计算机系统必须满足下面要求:CPU:Intel或AMD的32位或64位CPU。操作系统:Windows、Linux、FreeBSD(UNIX)、MAC。磁盘格式:文件系统为NTFS格式。用户:以系统管理员身份安装PostgreSQL。v目前的最新版本是9.1.3版。v下载地址:ht
3、tp:/ III 操作数据库 在数据库名模式public 数据表下查看或新建数据表使用工具查询工具,查询数据库数据 7.1.2 MySQL数据库简介vMySQL是目前最为流行的开放源代码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典的MySQLAB公司(开发人MichaelWideniusandDavidAxmark)于1995年开始发布v2008年2月26日,Sun公司并购MySQLAB公司,2010年1月27日,Oracle公司并购了Sun公司,现在MySQL属于Oracle。v版本:开源版MySql5.5,企业服务器版MySql5.6,集群版MySql7.1v下载地址htt
4、p:/ MySQL数据库简介v一种完全免费的产品,被广泛地应用在中小型网站和管理系统中v具有功能强大、支持跨平台、运行速度快、支持面向对象、安全性高、成本低、支持各种开发语言、数据存储量大、支持强大的内置函数等特点v能在包括Linux、FreeBSD和Windows等多种平台下运行用SQLyog工具管理MySQL数据库下载地址http:/7.1.3 SQL Server数据库简介vSQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),提供了一个可靠的、高效的、智能化的数据平台v经历7.0,2000,2005,2008等版本,其中SQLServer2008分为SQL
5、Server2008企业版、标准版、工作组版、Web版、开发者版、Express版(免费)、Compact3.5版vSQLServer2008企业版是一个全面的数据管理和业务智能平台,为关键业务应用提供了企业级的可扩展性、数据仓库、安全、高级分析和报表支持。vSQLServer2008标准版是一个完整的数据管理和业务智能平台,为部门级应用提供了最佳的易用性和可管理特性。vSQLServer2008工作组版是一个值得信赖的数据管理和报表平台,用以实现安全的发布、远程同步和对运行分支应用的管理能力。这一版本拥有核心的数据库特性,可以很容易地升级到标准版或企业版。vSQLServer2008Web版
6、是针对运行于Windows服务器中要求高可用、面向InternetWeb服务的环境而设计。这一版本为实现低成本、大规模、高可用性的Web应用或客户托管解决方案提供了必要的支持工具。vSQLServer2008开发者版允许开发人员构建和测试基于SQLServer的任意类型应用。这一版本拥有所有企业版的特性,但只限于在开发、测试和演示中使用。基于这一版本开发的应用和数据库可以很容易地升级到企业版。7.1.3 SQL Server数据库简介vSQLServer2008Express版是SQLServer的一个免费版本,它拥有核心的数据库功能,其中包括了SQLServer2008中最新的数据类型,但它
7、是SQLServer的一个微型版本。这一版本是为了学习、创建桌面应用和小型服务器应用而发布的。vSQLServerCompact是一个针对开发人员而设计的免费嵌入式数据库,这一版本的意图是构建独立、仅有少量连接需求的移动设备、桌面和Web客户端应用。SQLServerCompact可以运行于所有的微软Windows平台之上,包括WindowsXP和WindowsVista操作系统,以及PocketPC和SmartPhone设备。7.1.3 SQL Server数据库简介在配置工具Sql Server配置管理器中启动Sql Server2008服务用Sql Server management s
8、tudio打开Sql Server2008控制台7.1.4 ORACLE数据库vOracle是目前关系型数据库管理系统市场中应用最广泛的产品,最新的Oracle版本是Oracle11gv劳伦斯埃里森和他的朋友BobMiner和EdOates在1977年建立了软件开发实验室咨询公司(SDL,SoftwareDevelopmentLaboratories)。SDL开发了Oracle软件的最初版本vORACLE数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化vORACLE数据库在逻辑上是由许多表空间构成vORACLE的详细信息参见百度百科http:/
9、Developer管理Oracle数据库7.2 Java数据库技术概述 vJava程序是通过JDBC(Java DataBase Connection)访问数据库的。该工具包使得Java编程人员可以连接到一个数据库,进而使用SQL 对数据库进行查询和更新操作可以理解成是对查询分析器的模拟实现vJDBC的基本功能包括:建立与数据库的连接;发送SQL语句;处理数据库操作结果。Java数据库应用程序JDBC驱动程序管理器JDBC/ODBC桥接器ODBC驱动程序DB供应商提供的JDBC驱动程序DBJDBCAPIJDBC驱动程序APISQL命令(SQLServer、Oracle)JDBC运行原理JDBC
10、与与JDBC驱动程序的关系驱动程序的关系 JDBC=JDBC驱动程序管理器JDBCDriverAPI+供编程人员使用供数据库厂商使用JDBCAPI+JDBC驱动程序实现实现java.sql包数据库厂商提供JDBC的结构数据库访问的两层和三层模型 v两层模型即客户机/数据库服务器结构,也就是通常所说的C/S(Client/Server)结构v三层模型是指客户机/应用服务器/数据库服务器结构,也就是通常所说的B/S(Browser/Server)结构JDBC驱动程序 v在Java程序中可以使用的数据库驱动程序主要有四种类型,常用的有下面两种:JDBC-ODBC桥驱动程序专为某种数据库而编写的驱动程
11、序postgreSQL驱动包:postgresql-9.0-801.jdbc4.jarMySQL驱动包:mysql-connector-java-5.0.8-bin.jarSql Server驱动包:sqljdbc.jarOracle驱动包:classes12.jar以上驱动包可到进入Web应用开发课程的教学材料学习参考资料 下载安装JDBC驱动程序v使用JDBC-ODBC桥驱动程序连接数据库,不需要安装驱动程序,因为在Java API中已经包含了该驱动程序。v使用专用驱动程序连接数据库,必须安装驱动程序。在开发Web应用程序中,需要将驱动程序打包文件复制到:Tomcat安装目录的lib目录中
12、Web应用程序的WEB-INFclasseslib目录中Eclipse工程的build path中JavaJava访问数据库的过程访问数据库的过程7.3 传统的数据库连接方法 7.3.1加载驱动程序7.3.2建立连接对象7.3.3创建语句对象7.3.4获得SQL语句的执行结果7.3.5关闭建立的对象,释放资源7.3.6简单的应用示例7.3.1 加载驱动程序v使用Class类的forName()静态方法,该方法的声明格式为:public static Class forName(String className)throws ClassNotFoundExceptionv如果使用ODBC-JDB
13、C桥驱动程序,则使用JDK自带的驱动程序,名称为“sun.jdbc.odbc.JdbcOdbcDriver”Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);v数据库厂商提供的专门的驱动程序,应该给出专门的驱动程序名。几种常见数据库的加载驱动程序代码vPostgreSQL数据库:Class.forName(org.postgresql.Driver);vMySQL数据库:Class.forName(com.mysql.jdbc.Driver);vSQLServer数据库:Class.forName(com.microsoft.jdbc.sqlserver.
14、SQLServerDriver);vOracle数据库:Class.forName(oracle.jdbc.driver.OracleDriver);7.3.2 建立连接对象v使用DriverManager类的getConnection()vDriverManager类的静态方法getConnection(),该方法的声明格式为:public static Connection getConnection(String dburl)public static Connection getConnection(String dburl,String user,String password)v如
15、果通过JDBC-ODBC桥驱动程序连接数据库,URL的形式为:jdbc:odbc:DataSourcev例如:String dburl=jdbc:odbc:Bookstore;v如果使用专门的驱动程序连接数据库,JDBCURL可能更复杂一些。例如要连接PostgreSQL数据库,它的JDBCURL为:jdbc:postgresql:/localhost:5432/dbnameString dburl=jdbc:postgresql:/localhost:5432/bookstore;Connection conn=DriverManager.getConnection(dburl,bookst
16、ore,bookstore);7.3.2 建立连接对象(续)v连接MySQL数据库为:String dburl=jdbc:mysql:/localhost:3306/bankConnection conn=DriverManager.getConnection(dburl,root,111111);v连接SQLServer数据库为:String dburl=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=web2011Connection conn=DriverManager.getConnection(dburl,web,web20
17、11);v连接Oracle数据库为:String dburl=jdbc:oracle:thin:localhost:1521:ORCLConnection conn=DriverManager.getConnection(dburl,system_dba,123456);7.3.2 建立连接对象(续)7.3.3创建语句对象v对于不同的语句对象,可以使用Connection接口的不同方法创建。v例如,要创建一个简单的Statement对象可以使用createStatement()方法,Statement stmt=conn.createStatement();v创建PreparedStateme
18、nt对象(预编译的SQL语句)应使用prepareStatement()方法v创建CallableStatement对象(用于执行SQL存储过程)应使用prepareCall()方法。7.3.4获得SQL语句的执行结果v对于查询语句,调用executeQuery(Stringsql)方法,如:String sql=SELECT*FROM books;ResultSet rst=stmt.executeQuery(sql);while(rst.next()out.print(rst.getString(1)+t);v对于语句如CREATE、ALTER、DROP、INSERT、UPDATE、DEL
19、ETE等须executeUpdate(Stringsql)方法。该方法返回值为整数,用来指示被影响的行数。7.3.5关闭建立的对象,释放资源v在Connection接口、Statement接口和ResultSet接口中都定义的close()方法。v当这些对象使用完毕后应使用close()方法关闭建立的对象,关闭对象应该按与建立对象相反的顺序关闭,从而释放资源。v例如:conn.close();7.3.6 简单的应用示例v1、连接postgreSQL、MySQL和SQL Server数据库的例子(1)连接postgreSQL:testPostgreSQL.jsp(2)连接MySQL:testMy
20、SQL.jsp(3)连接SQL Server:testSqlServer.jsp 连接PostgreSQL数据库的主要代码testPostgreSQL.jspvvvvvv连接MySQL数据库的主要代码testMySQL.jspvv%vClass.forName(com.mysql.jdbc.Driver);v/Connectionconn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/bank?user=root&password=111111);vConnectionconn=DriverManager.getConnectio
21、n(jdbc:mysql:/localhost:3306/bank,root,111111);vStatementst=conn.createStatement();vst.setMaxRows(20);vStringsqlStr=select*fromT_User;vResultSetrs=st.executeQuery(sqlStr);vvvv连接SQLServer数据库的主要代码testSqlServer.jspvv%vClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);/.microsoft.jdbc.sqlServe
22、r.SQLServerDriver);vConnectionconn=DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=web2011,web,web2011);vStatementst=conn.createStatement();vst.setMaxRows(20);vStringsqlStr=select*fromT_User;vResultSetrs=st.executeQuery(sqlStr);vvvv7.3.6 简单的应用示例v2、基于MVC设计模式实现数据库查询:从
23、JSP页面输入一个书号,查询该书的信息 v该应用的程序代码(P189):v模型:BookBean.javav视图:bookQuerys.jspvshowBook.jspverror.jspv控制器:BookQueryServlet.java7.4 JDBC API介绍vJDBCAPI是Java语言的标准API,目前的最新版本是JDBC4.0。在JDK6.0中,它是通过两个包提供的:java.sql包 javax.sql包vjava.sql包提供了基本的数据库编程的类和接口,如驱动程序管理类DriverManager、创建数据库连接Connection接口、执行SQL语句以及处理查询结果的类和接
24、口等。vjavax.sql包主要提供了服务器端访问和处理数据源的类和接口,如DataSource、RowSet、RowSetMetaData、PooledConnection接口等,它们可以实现数据源管理、行集管理以及连接池管理等。java.sql包包功能类、接口(斜体)JDBCAPI执行执行SQL语句语句对对SQL语句进行语句进行封装,并用此封装,并用此sql语句操作数据库语句操作数据库java.sql.Connectionjava.sql.Statementjava.sql.PreparedStatement驱动程序管理器驱动程序管理器装载和管理各装载和管理各个数据库驱动个数据库驱动jav
25、a.sql.DriverManager执行执行sql语句的结果集语句的结果集将将SQL语语句的执行结果封装成象句的执行结果封装成象java.sql.ResultSetjava.sql.ResultSetMetaData辅助类辅助类特殊数据类型包装类、异常类特殊数据类型包装类、异常类Driever API供应商必须实现的驱动程序供应商必须实现的驱动程序APIjava.sql.Driverjava.sql.DatabaseMetaDatjavax.sql包中的类和接口javax.sql.DataSource和java.sql.Connection之间的关系连接池化过程中涉及的关系分布式事务支持中涉
26、及的关系行集涉及的关系vConnection对象代表与数据库的连接,也就是在加载的驱动程序与数据库之间建立连接。一个应用程序可以与一个数据库建立一个或多个连接,或者与多个数据库建立连接。v得到连接对象后,可以调用Connection接口的方法创建SQL语句对象以及在连接对象上完成各种操作,下面是Connection接口的常用方法:vpublic Statement createStatement()7.4.1 Connection接口vpublicDatabseMetaDatagetMetaData()所连接的数据库的元数据vpublicvoidsetAutoCommit(booleanaut
27、oCommit)vpublicbooleangetAutoCommit()获取自动提交模式vpublicvoidcommit()提交对数据库的更新操作,使更新写入数据库。只有当setAutoCommit()设置为false时才应该使用该方法。vpublicvoidrollback()回滚对数据库的更新操作。只有当setAutoCommit()设置为false时才应该使用该方法。vpublicvoidclose()vpublicbooleanisClosed()7.4.2 Statement对象v通过Connection对象可以创建SQL语句对象,SQL语句对象有三种:Statement、Pre
28、paredStatement和CallableStatement。通过调用Connection接口的相应方法可以得到这三种语句对象。vStatement接口对象主要用于执行一般的对数据库操作SQL语句,调用Statement对象的方法可以执行SQL语句,返回一个ResultSet结果集对象。vpublicResultSetexecuteQuery(Stringsql)该方法用来执行SQL查询语句。查询结果以ResultSet对象返回。vpublicintexecuteUpdate(Stringsql)执行由字符串sql指定的SQL语句,该语句可以是INSERT、DELETE、UPDATE语句或
29、者无返回的SQL语句,如CREATETABLE。返回值是更新的行数,如果语句没有返回则返回值为0。vpublicbooleanexecute(Stringsql)执行可能有多个结果集的SQL语句,sql为任何的SQL语句。如果语句执行的第一个结果为ResultSet对象,该方法返回true,否则返回false。vpublicConnectiongetConnection()vpublicvoidclose()Statement的方法7.4.3ResultSet接口vResultSet对象表示SQLSELECT语句查询得到的记录集合,称为结果集。v结果集一般是一个记录表,其中包含多个记录行和列标
30、题,一个Statement对象一个时刻只能打开一个ResultSet对象。通过调用ResultSet对象的方法,可以对查询结果处理。v每个结果集对象都有一个游标。所谓游标游标(cursor)是结果集的一个标志或指针。对新产生的ResultSet对象,游标指向第一行的前面,可以调用ResultSet的next()方法,使游标定位到下一条记录。v如果游标指向一个具体的行,就通过调用ResultSet对象的方法,可以对查询结果处理。v1.检索当前行字段值vResultSet接口提供了检索行的字段值的方法,由于结果集列的数据类型不同,所以应该使用不同的getXxx()方法获得列值,例如若列值为字符型数
31、据,可以使用下列方法检索列值:vString getString(int columnIndex)vString getString(String columnName)v返回结果集中当前行指定的列号或列名的列值,结果作为字符串返回。columnIndex 为列在结果行中的序号,序号从1开始,columnName结果行中的列名。ResultSet的方法v下面列出了返回其他数据类型的方法,这些方法都可以使用这两种形式的参数:shortgetShort(intcolumnIndex)返回指定列的short值。bytegetByte(intcolumnIndex)返回指定列的byte值。intget
32、Int(intcolumnIndex)返回指定列的int值。longgetLong(intcolumnIndex)返回指定列的long值。floatgetFloat(intcolumnIndex)返回指定列的float值。double getDouble(int columnIndex)返回指定列的double值。booleangetBoolean(intcolumnIndex)返回指定列的boolean值。DategetDate(intcolumnIndex)返回指定列的Date对象值。ObjectgetObject(intcolumnIndex)返回指定列的Object对象值。Blob g
33、etBlob(int columnIndex)返回指定列的Blob对象(BinaryLargeObject)值。Clob getClob(int columnIndex)返回指定列的Clob对象(CharacterLargeObject)值ResultSet的方法v2.对行操作的方法调用ResultSet的next()方法,使游标定位到下一条记录。还可以通过其他方法使游标任意移动,这些方法有:booleannext()throwsSQLException将游标从当前位置向下移动一行。第一次调用next()方法将使第一行成为当前行,以后调用游标依次向后移动。如果该方法返回true,说明新行是有效
34、的行,若返回false,说明已无记录。booleanisFirst()throwsSQLException返回游标是否指向第一行booleanisLast()throwsSQLException返回游标是否指向最后一行intgetRow()返回当前行的行号。intfindColumn(Stringcolumnname)返回列名指定的列号。ResultSet的方法v对于查询语句,调用executeQuery(Stringsql)方法,该方法的返回类型为ResultSet,再通过调用ResultSet的方法可以对查询结果的每行进行处理。如:Stringsql=SELECT*FROMbooks;Re
35、sultSetrst=stmt.executeQuery(sql);while(rst.next()System.out.print(rst.getString(1)+t);对于更新语句,如INSERT、UPDATE、DELETE,须使用executeUpdate(Stringsql)方法。该方法返回值为整数,用来指示被影响的行的数目。ResultSet的方法3.数据类型转换v在ResultSet对象中的数据为从数据库中查询出的数据,调用ResultSet对象的getXxx()方法返回的是Java语言的数据类型,因此这里就有数据类型转换的问题。v实际上调用getXxx()方法就是把SQL数据类
36、型转换为Java语言数据类型,下表列出了SQL数据类型与Java数据类型的转换。ResultSet的方法SQLSQL数据类型与数据类型与JavaJava数据类型之间的对应关系数据类型之间的对应关系 注:不同数据库的数据类型名称有略微差别注:不同数据库的数据类型名称有略微差别7.4.4 7.4.4 可滚动和可更新的可滚动和可更新的ResultSetResultSetv可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录,还可以向后访问结果集中的记录。v可更新的ResultSet是指不但可以访问结果集中的记录,还可以通过结果集对象更新数据库。1 1、可滚动的、可滚动的Resu
37、ltSetResultSetv要使用可滚动的ResultSet对象,必须使用Connection对象的带参数的createStatement()方法创建的Statement,然后在该对象上创建的结果集才是可滚动的,该方法的格式为:vpublicStatementcreateStatement(intresultType,intconcurrency)v参数resultType的取值应为ResultSet接口中定义的下面常量:ResultSet.TYPE_SCROLL_SENSITIVE/可滚动ResultSet.TYPE_SCROLL_INSENSITIVE/不可滚动ResultSet.TYP
38、E_FORWARD_ONLY /仅向前读取v对于可滚动的结果集,ResultSet接口提供了下面的移动结果集游标的方法:public boolean next()throwsSQLExceptionpublic boolean previous()throwsSQLExceptionpublicbooleanfirst()throwsSQLExceptionpublicbooleanlast()throwsSQLExceptionpublicbooleanabsolute(introws)throwsSQLException将光标移动到此ResultSet对象的给定行编号publicboole
39、anrelative(introws)throwsSQLException按相对行数(或正或负)移动光标publicbooleanisFirst()throwsSQLExceptionpublicbooleanisLast()throwsSQLExceptionpublicintgetRow()返回游标所在当前行的行号。用可滚动的结果集更新的两种方式(1)更新ResultSet对象rs第五行中的NAME列,然后使用方法updateRow更新导出rs的数据源表。rs.absolute(5);/movesthecursortothefifthrowofrsrs.updateString(NAME,
40、AINSWORTH);/updatesthe/NAMEcolumnofrow5tobeAINSWORTHrs.updateRow();/updatestherowinthedatasource(2)将光标移动到插入行,构建一个三列的行,并使用方法insertRow将其插入到rs和数据源表中。rs.moveToInsertRow();/movescursortotheinsertrowrs.updateString(1,AINSWORTH);/updatesthe/firstcolumnoftheinsertrowtobeAINSWORTHrs.updateInt(2,35);/updatest
41、hesecondcolumntobe35rs.updateBoolean(3,true);/updatesthethirdcolumntotruers.insertRow();rs.moveToCurrentRow();例:查询数据分页显示%/将记录指针定位到待显示页的第一条记录上sqlRst.absolute(intPage-1)*intPageSize+1);/显示数据i=0;while(i2 2、可更新的、可更新的ResultSetResultSetv要使ResultSet对象可更新,应该在使用Connection的createStatement(int,int)创建Statement对
42、象时,指定第二个参数的值决定是否创建可更新的结果集,该参数也使用ResultSet接口中定义的常量,如下所示:ResultSet.CONCUR_READ_ONLY不可以更新的 ResultSet 对象的并发模式ResultSet.CONCUR_UPDATABLE可以更新的 ResultSet 对象的并发模式v例如,下面语句创建的rst对象就是可滚动和可更新的结果集对象:Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);Resultsetrst=stmt.e
43、xecuteQuery(SELECT*FROMbooks);v对于每种数据类型,ResultSet都定义了相应的updateXXX()方法,例如:lpublicvoidupdateInt(intcolumnIndex,intx)lpublicvoidupdateInt(StringcolumnName,intx)lpublicvoidupdateString(intcolumnIndex,Stringx)lpublicvoidupdateString(StringcolumnName,Stringx)v有关其他方法请参考JavaAPI文档。v当更新了需要更新的所有列之后,调用updateRow
44、()方法把更新写入表中。updateRow()方法的格式如下:public void updateRow()throws SQLExceptionv执行该方法后,将用当前行的新内容更新结果集,同时更新数据库。下面代码说明了如何在books表中修改一本书的信息:staticStringsql=SELECTbookid,bnameFROMbooksWHEREbookid=201;rset=stmt.executeQuery(sql);rset.next();rset.updateString(2,JavaEE编程指南);rset.updateRow();/更新当前行v要插入一行数据首先应该将游标移
45、到插入行,该方法格式如下:vpublicvoidmoveToInsertRow()throwsSQLExceptionv当游标移到插入行时,ResultSet记住游标所在的位置。插入行是与可更新结果集相关的特殊行。它实际上是一个新行的缓冲区。v当游标处于插入行时,调用updateXxx()方法用相应的数据修改每列的值。完成输入新行的数据之后,调用insertRow()方法。在调用insertRow()方法之前,该行所有的列都必须给定一个值。vpublicvoidinsertRow()throwsSQLExceptionv调用insertRow()方法之后,这个ResultSet仍然位于插入行。
46、这时,可以插入另外一行数据,或者移回到刚才ResultSet记住的位置(当前行位置)。通过调用moveToCurrentRow()方法返回到当前行。也可以在调用insertRow()方法之前通过调用moveToCurrentRow()方法取消插入。v最后,可以通过调用下面的方法从一个表或ResultSet中删除一行数据:publicvoiddeleteRow()throwsSQLException从结果集中删除当前行,同时从数据库中将该行删除。7.5 访问数据库元数据(自学)v7.5.1 获得数据库的信息v7.5.2 获取结果集的信息7.5.1获得数据库的信息 v在得到数据库的连接对象后,可以
47、通过该对象获得数据库的元信息。其中包括数据库产品名称、版本号、使用的数据类型和存储过程等信息。v要获取这些信息,需要得到DatabaseMetaData接口对象,这可以通过调用Connection对象的getMetaData()方法实现。v假 如 conn是 一 个 Connection对 象,下 面 语 句 可 以 获 得DatabaseMetaData接口对象dbmd:DatabaseMetaDatadbmd=conn.getMetaData();v得到了元数据对象后就可以调用DatabaseMetaData接口的方法得到数据库的各种元信息了,常用的方法有:StringgetDatabas
48、eProductName()StringgetDatabaseProductVersion()StringgetUserName()StringgetURL()StringgetDriverName()StringgetDriverVersion()7.5.2 7.5.2 获取结果集的信息获取结果集的信息v在对数据库的表结构已经了解的情况下,可以知道返回的结果集中各个列的一些情况,如列名、数据类型等。但有时可能并不知道结果集中各个列的情况,这时可以使用ResultSet的getMetaData()方法来获得结果集的信息。该方法的格式为:ResultSetMetaDatagetMetaDate(
49、)throwsSQLExceptionvResultSetMetaData接口常用的方法有:intgetColumnCount()返回结果集的列数 StringgetColumnLabel(intcolumn)返回结果集中指定列的标题 StringgetColumnName(intcolumn)返回结果集中指定列的名称 intgetColumnType(intcolumn)返回结果集中指定列的SQL数据类型。它的返回值是一个int型值。在java.sql.Types类中定义了各种SQL数据类型的常量 StringgetColumnTypeName(intcolumn)返回结果集中指定列的数据类
50、型在数据源中的名称StringgetSchemaName(intcolumn)返回指定列所属表的模式名 StringgetTableName(intcolumn)返回指定的列所属的表名 boolaenisReadOnly(intcolumn)返回指定的列是否只读 boolaenisNullable(intcolumn)返回指定的列是否可取空值7.6 7.6 预处理语句预处理语句v为了提高语句的执行效率可以使用PreparedStatement接口对象v调用数据库的存储过程可以使用CallableStatement接口对象。7.6.1 7.6.1 创建创建PreparedStatementPre