您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > T14 JDBC数据库访问技术
JDBC数据库访问技术目标JDBC技术概述JDBC技术接口介绍DriverManager类Connection接口Statment接口ResultSet接口ResultSetMetaData接口项目实践JDBC技术概述1996年夏,Sun公司推出了java数据库连接JDBC工具包的第一个版本。JDBC工具包使得编程人员可以进行结构化查询语言,即sql,连接到一个数据库,对数据库进行查询,或者对数据库进行更新。JDBC技术是J2EE构架的重要组部分。目前JDBC已经发展到4.0版本JDBC技术概述JDBC是标准化地将关系型数据库操作和java程序集成到一起,可以直接对数据库进行访问和修改的API。JDBC最终还是应用到ODBC的技术,但它却很好的封装了ODBC,我们可以很容易通过JDBCAPI来进行数据库访问控制。JDBC现在可以连接的数据库包括:Oracle、SqlServer、MySQL、DB2、Informix以及Sybase等JDBC技术概述由于JDBC对多种数据库的支持,使得人们在建立客户/服务器应用程序时,通常把Java作为编程语言,把任何一种浏览器作为应用程序的友好界面,把Internet或Intranet作为网络主干,来访问有关的后台数据库。InternetDataBasec/s的javaweb应用程序JDBC技术概述简单的说JDBC就是完成的三件事同一个数据库建立连接;向数据库发送SQL语句;处理数据库返回的结果;JDBC--工作原理Java应用程序JDBC驱动程序管理器JDBC-ODBC桥连接器OracleODBC驱动程序SQL服务器ODBC驱动程序SQL服务器数据库Oracle数据库InternetJDBCAPIJDBC驱动程序API供应商提供的其他JDBC驱动程序数据库JDBC-ODBC桥加ODBC驱动程序将JDBC转换成ODBC,并使用一个ODBC驱动程序与数据库连接。JDBC驱动程序的分类-1你所撰写的应用程序JDBC-ODBC桥连接器ODBC驱动程序数据库Sql语句结果集缺点:性能比较低。Sun建议:jdbc-odbc桥连接器最好只是用来测试,不建议使用在web应用开发中。例如:连接小型的MicrosoftAccess之类的数据库可以使用。本地API驱动程序部分使用java编程语言编写和部分使用本机代码编写的驱动程序,通过该驱动程序使你的应用程序和数据库进行连接。JDBC驱动程序的分类-2你所撰写的应用程序JDBC驱动程序本地代码编写的驱动程序数据库Sql语句结果集缺点:移植性不好。当使用该类型的驱动程序时,除了安装java库,还需要某个特定平台的代码,例如:C/C++C/C++负责与数据库做沟通,然后再通过java自己的jdbc与应用程序沟通通过特殊沟通方式进行数据库访问JDBC通过网络的纯Java驱动程序该驱动程序是一个3-Tier(层)的解决方案,驱动程序将应用程序中的操作通过jdbc转换成指令发送到一个中介软件,再通过该中介软件将操作指令发送到DBMS中,得到的结果集也是通过该中介软件传回应用程序的。JDBC驱动程序的分类-3JDBC驱动程序你所撰写的应用程序中介软件数据库Sql语句结果集优点:简化了它的部署过程,跨数据库特点。这个纯java驱动程序使用跨数据库协议,可根据使用的不同数据库将请求进行转换,那么应用程序就可以独立实际的数据库而运行。通过特殊沟通方式进行数据库访问纯Java驱动程序这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议,应用程序可以直接和数据库进行沟通。JDBC驱动程序的分类-4你所撰写的应用程序纯java驱动程序数据库Sql语句结果集优点:性能最好,访问速度最快。JDBC编程基础使用JDBC的类来进行编程主要使用到JDBC的核心类来建立对象,如果有需要的话,再按照继承性来扩展这些对象。用于JDBC编程的类都放在java.sql和javax.sql包中。java.sql.*:提供用于访问和处理存储在数据源中数据的API,包含不同驱动进行数据库访问方法的框架设计。javax.sql.*:提供在程序中访问和处理数据源的API,该包中类实现了java.sql包。JDBC具体的实现步骤通过驱动程序管理器获取连接接口,注册一个驱动。建立一个到数据库的连接Connection。创建一个陈述对象Statement。通过陈述对象执行sql语句,并返回结果集ResultSet.处理该结果集。关闭Statement。关闭连接接口。JDBC的用处以及实现步骤例子:TestDB.javaDriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动序,并在数据库和相应驱动程序之间建立连接。DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。DriverManager类包含一列的驱动程序类,它们已通过调用方法DriverManager.registerDriver()对自己进行了注册,所以我们可以直接加载驱动程序,然后让驱动程序自己去注册。加载及注册JDBC驱动程序-1Class.forName()提供两种方式进行注册:Class.forName(com.mysql.jdbc.Driver);•加载成功后会生成一个Driver对象,然后调用DriverManager.registerDriver()自动注册该对象•加载失败,“Classnotfound”说明无法找到JDBC驱动程序Class.forName(com.mysql.jdbc.Driver).newInstance()•当碰到“Drivernotfound”错误的时候,也就是说注册JDBC驱动不成功的时候用这种方法,主要是因为JDBC规范和某些JVM产生问题。加载及注册JDBC驱动程序-2创建数据库连接-1在成功注册后,就要用java.sql.DriverManager类的getConnection()方法来创建一个连接。创建Connection对象的两种方法:staticConnectiongetConnection(Stringurl)•尝试建立一个和给定的URL的数据库连接。•staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)•连接到指定URL的数据库,使用用户名为user,密码为password。JDBCURL的标准语法:protocol:subprotocol:datasourceinfoURL中三个部分,分别是协议、子协议和数据来源协议:JDBC表示协议,它是唯一的,JDBC只有这一种协议。子协议:识别不同的数据库驱动程序。数据来源:用于连接的具体数据库名字。主要通讯协议次要通讯协议,即驱动程序的名字数据来源创建数据库连接-2URL例子:以JDBC-ODBC桥连接本地Access数据库mydb•jdbc:odbc:mydb?user=name&password=pwSqlserver连接的例子Stringurl=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb;StringuserName=sa;Stringpassword=sa;Connectioncon=DriverManager.getConnection(url,userName,password);创建数据库连接-3close()该方法为关闭数据库的连接,在使用完连接后必须关闭,否则连接会保持到超时为止。isclose()判断连接是否关闭。setAutoCommit(booleanautoCommit)设置操作是否自动提交到数据库,默认情况下是true。commit()提交对数据库的更改,是更改生效。注意:这个方法只有调用了setAutoCommit(false)方法后才有效,否则对数据库的更改会自动提交到数据库。rollback()回滚当前执行的操作,和commit()一样只有调用了setAutoCommit(false)才可以使用。StatementcreateStatement()创建一个Statement,Statement用于执行SQL语句。getMetaData()返回数据库元数据。创建数据库连接–connection对象提供的其他方法陈述对象java.sql.Statement提供在基层连接上运行SQL语句(如添加,删除,修改,查询),并且返回结果。可通过调用Connection对象的createStatement()方法来建立一个新的陈述对象。Statementstat=conn.createStatement();stat.execute(“createteableGreetings(NameCHAR(20)));•在数据库中创建一个新的表stat.execute(“insertintoGreetingsvalues(‘TestData!'));•在当前数据库表中插入一条新纪录ResultSetresult=stat.executeQuery(“select*fromGreetings);•从当前数据库表中查询符合要求的纪录booleanexecute(Stringsql)执行sql语句返回一个结果集则返回true,否则返回falseResultSetexecuteQuery(Stringsql)返回查询结果,通过ResultSet对象来取得具体的值intexecuteUpdate(Stringsql)执行如createtable\droptable\altertable等的sqlddl语句•执行返回结果为零。执行如insert\delete\update等的sqldml语句。•执行该方法时返回值都是整数,代表更新的数据数voidaddBatch(Stringsql)增加批处理语句。int[]executeBatch()执行批处理语句。voidclearBatch()清除批处理语句。陈述对象--Statement提供的其他方法ResultSet在Statement执行SQL语句时,有时会返回ResultSet结果集可将结果集看成一张二维表,通过一个可控制的、可以指向任意一条记录的指针(游标)来任意访问我们希望的纪录行。一个结果集对象中只包含一个游标。并可通过提供的方法可以访问结果的不同字段。例子while(rs!=null&&rs.next()){Stringname=rs.getString(“name”);intage=rs.getInt(“age”);System.out.println(“姓名为:”+name)System.out.println(“年龄为:”age);}ResultSet的随机访问从JDBC2.0开始在得到statement对象时增加了两个参数设置,通过这些参数的设置可以决定查询结果集ResultSet是否可以上下自由移动,是只读还是可读写的。通过createStatement(intresultSetType,intresultSetConcurrency)throwsSQLException的参数来设置。createStatement(inttype,intconcurrency)的参数说明:type参数设置ResultSet对象中的指针是否能够上下自由移动;可选值为:•TYPE_FORWARD_ONLY:只能使用next方法向下移动指针。•TYPE_SCROLL_SENSITIVE:能可上下移动,且能得到改临时修改后的数据库值。•TYPE_SCROLL_INSENSITIVE:能可上下移动,只能得到当前查询的值。concurrency参数指定ResultSet对象的读写属性。•CONCUR_READ_ONLY:ResultSet对象对结果集只能读。•CONCUR_UPDATABLE:ResultSet对象可以直接执行数据库的新增、修改和移除的操作。Res
本文标题:T14 JDBC数据库访问技术
链接地址:https://www.777doc.com/doc-5198244 .html