




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.1.1基本概念JDBC(Java Database Connection,Java数据库连接)是一种用于执行SQL语句的JavaAPI(应用程序设计接口),它由一些Java语言写的类和界面组成。JDBC提供了一种标准的应用程序设计接口,使得开发人员使用Java语言开发完整的数据库应用程序变得极为简单。通过JDBC,开发人员几乎可以将SQL语句传递给任何一种数据库,而无需为各种数据库编写单独的访问程序。JDBC可以自动将SQL语句传递给相应的数据库管理系统(DBMS)。JDBC扩展了Java的功能,简单地说,JDBC完成下面三个操作。1.与一个数据库建立连接。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection con=DriverManager.getConnection(“jdbc:odbc:CallCenter”,”sa”,”);2.向数据库发送SQL语句。 stmt=con.createStatement(); rs=stmt.executeQuery(“Select CID,CIP FROM Customer WHERE CID=1”);3.处理数据库返回的结果。 while(rs.next() String theInt=rs.getString(“CID”); String str=rs.getString(“CIP”); 2.1.2 JDBC驱动程序JDBC提供的接口主要有两种:一种是面向一般应用程序开发人员的JDBC API,另一种是面向驱动程序开发商的JDBC Driver API。它们之间的关系图1所示:开发商提供的JDBC驱动程序JDBC-ODBC桥ODBC驱动程序Java应用程序JDBC驱动程序管理器JDBC APIJDBCDriver API图1 使用JDBC的基本结构JDBC API是一系列抽象的接口。应用程序开发人员通过它可以缩写访问数据库的Java应用程序。JDBC API中抽象类的实现却是由驱动程序开发商提供的。驱动程序实现了应用程序和某个数据库产品之间的接口。驱动程序管理器则对应用程序和驱动程序之间的交互进行控制。每个驱动程序必须提供实现方法的接口包括如下内容。java.sql.Driver /封装了不同数据库的驱动程序java.sql.Connection /代表对特写数据库的连接java.sql.Statement /代表一个特写的容器,以对一个特写的数据库执行SQL语句java.sql.PreparedStatement /用于执行预编译的SQL语句java.sql.CallableStatement /用于执行对一个数据库内嵌过程的调用java.sql.ResultSet /控制对一个特写语句的行数据的存取JDBC驱动程序可以分为4种。n 类型1:JDBC-ODBC桥驱动程序该类型驱动程序使用桥技术将Java客户端连接到一个ODBC数据服务器。Sun公司的JDBC-ODBC是最常用的该类型服务器。这些驱动器使用本地代码来实现。n 类型2:本地API的Java驱动程序该类型驱动程序将一个Java层包在数据库指定的本地代码库上。,它将JDBC调用转换为特定的DBMS的客户端API调用。因此,也需要在客户机上加载一些可执行代码。n 类型3:网络协议的纯Java驱动程序该类型驱动器通过一个通常的网络协议和中间层通信。这个中间层组件能使用任何类型的驱动器来提供实际的数据库访问。这些驱动器是全部由Java组成。n 类型4:本地协议的纯Java驱动程序该类型驱动程序是四种中最直接的。全部由Java写成,该类型驱动程序支持数据库指定的Web浏览器协议,并能不用任何附加软件而直接访问数据库。其中,类型1 JDBC-ODBC桥驱动程序简单易用,通过ODBC提供对JDBC的实现。JDBC驱动程序,通过将JDBC操作转换为ODBC操作来实现。它由sun.jdbc.odc包实现,包含一个用来访问ODBC的本地库,对所有ODBC可用的数据库实现JDBC。通过ODBC子协议,可以使用下面一行代码进行显示加载。Class.forName(“sun.jdbc.odbc,JdbcOdbcDriver”);加载时,ODBC驱动程序将创建自己的实例,同时在JDBC驱动程序管理器中进行注册。由于JDBC放在ODBC之后,所以实现起来简单且高效。2.1.3 JDBC的使用 一. Driver与DriverManagerDriver接口是每个驱动器类都需要完成的。JavaSQL框架允许有多个数据库驱动器,每个驱动器应该提供一个类来实现驱动器接口,而驱动器的装载通过DriverManager实例实现。DriverManager将装载尽量多的驱动器,对每个给定的连接请求,将所有驱动器依次连接到目标数据库上。当驱动器类装载后,Driver应该创建一个实例,然后注册到DriverManager上。DriverManager管理一系列JDBC驱动器的基本服务。应用程序可以显示加载JDBC驱动器,例如前面JDBC-ODBC桥的显示加载。它的较为重要的方法有:public static Connection getConnection(String url) throws SQLExceptionpublic static Connection getConnection(String url,Properties info) throws SQLExceptionpublic static Connection getConnection(String url,String user,String password) throws SQLException这些方法的功能都是建立一个给定数据库的url连接。DriverManager试图从注册的JDBC驱动器序列中选择合适的驱动器,返回到url的连接。其中:1 url为数据库url,格式为jdbc:subprotocol:subname。2 Info以”标记/数据对”作为连接参数,至少应该包括user和password属性对。3 User指数据库用户(连接以什么身份建立)。4 Password是用户的密码。例如:使用JDBC-ODBC桥建立到ODBC配置的数据库DBBook的连接,访问DBBook数据库的用户为sa,密码无。语句如下:Connection con=DriverManager.getConnection(“jdbc:odbc:DBBook”,”sa”,”);二. 管理数据库会话与特写数据库连接创建的Connection对象代表了与特定数据库的会话。在这个会话中,可以执行SQL语句、运行存储过程、处理结果集以及进行其他的操作。表1描述了Connection接口的一些使用较多的方法。方法解释createSatement()返回一个可以执行不带参数的SQL语句的Statement对象prepareStatement(String)返回一个含有预编译SQL语句的PreparedStatement对象。该SQL语句可以被这个对象重复执行多次PrepareCall(String)返回一个含有预编译SQL存储过程调用语句的CallableStatement对象SetAutoCommit(boolean)指明SQL语句是作为单独的事务被自动提交还是由commit()或rollback()进行处理。缺少是自动提交Commit()使得上一次commit或rollback操作后对数据库所作的修改永久提交到数据库,同时释放当前被Connection所占用的数据库锁Rollback()放弃上次commit或rollback操作后对数据库所作的修改,并释放被Connection占用的数据库锁Close()导致立即释放Connection的数据库和JDBC资源GetMetaData()创建一个DatabaseMetaData对象。它提供所访问的数据库的元数据当需要执行一般的查询语句时,应先通过调用Connection对象的createStatement()方法实例化一个Statement对象:Statement stmt = conn.createStatement();如果执行预编译的SQL语句,必须先调用Connection对象的prepareStatement()方法创建一个PreparedStatement对象:PreparedStatement pstmt = conn.prepareStatement(“SELECT * FROM t_book”);如果要使用存储过程,则需先调用Connection对象的prepareCall()方法来创建一个CallableStatement对象。例如:CallableStatement cstmt = conn.prepareCall(“call sp_help”);其中sp_help是MS SQLServer中的一个系统存储过程。动态访问数据库信息时,要使用Connection对象的getMetaData()方法创建一个DatabaseMetaData对象:DatabaseMetaData md=conn.getMetaDa();对于数据库来说,任何操作都不应该破坏数据库的完整性。例如:银行转帐,转帐人和接受人的数据必须同时作相应的更改。解决这个问题可能通过定义事务来解决。如果一个事务中的所有命令都已正确执行,就提交该事务;否则,只要有一条命令出现错误,就回滚事务。一个事务中的语句要么全部正确完成,要么什么都不做。缺少情况下,一个数据库连接是自动提交方式的。即每个SQL命令都是一个单独的事务,该命令一旦正确执行就会提交到数据库,否则就回滚这一条命令。Connection对象的setAutoCommit()方法可以设置该数据库连接是否自动提交。例如用下例来取消自动提交模式:Conn.setAutoCommit(false);现在,可以执行很多SQL命令。当所有命令执行完之后,通过调用commit()方法将上一次提交或回滚操作后对数据库所作的修改永久提交到数据库;Cmit();如果SQL命令执行过程中出现了错误,可以调用rollback()方法放弃上次提交或回滚操作后对数据库所作的所有修改。例如:Try Conn.setAutoCommit(false); /取消自动提交模式 / 执行若干SQL命令 Cmit(); /如果SQL命令都被正确执行,则提交到数据库Catch(SQLException ex) Conn.rollback(); /如果出现错误,则放弃所有修改 System.out.println(ex.getMessage(); 一个连接如果不需要了,应该将其关闭; conn.close();三. 实施静态SQL语句JDBC中执行SQL语句的方法分为三类,分别为java.sql包中的Statement、PreparedStatement和CallableStatement接口定义。Statement接口主要用于实施静态的SQL语句,并获得执行结果。如果是以结果集ResultSet对象的形式给出。在任何时候,每个Statement对象只能有一个结果集。表2是Statement接口中常用的方法。方法解释executeQuery(String)执行一个返回单个结果集ResultSet对象的SQL语句executUpdate(String)执行SQL的INSERT、UPDATE和DELETE语句。不返回结果集的SQL语句也可以执行。close()立即释放Statement的数据库和JDBC资源execute(String)执行一条可以返回多个结果的SQL语句cancel()取消当前正在执行的JDBC语句getResultSet()返回当前语句的结果集ResultSet对象。对每个结果集该方法只能调用一次getUpdateCount()返回更新计数如上一节所述,Statement对象是通过调用Connection对象的createStatement()方法创建的。在Statement对象上,可以使用executeQuery()方法来执行一个查询语句。其参数是一个SQL的SELECT语句,返回值是一个ResultSet对象。ResultSet rs = stmt.executeQuery(“SELECT * FROM Customer“);如果要执行一个像INSERT、UPDATE和DELETE这样语句,或是一个像CREATE和GRANT这样不返回结果的SQL语句,就不能使用executeQuery()方法,可以使用executeUpdate()方法。stmt.executeUpdate(“CREATE TABLE book (ISBN varchar(13),title varchar(60),price varchar(3)”);stmt.executeUpdate(“UPDATE book SET price = “34” WHERE ISBN=”123456”);stmt.executeUpdate(“CREATE PROCEDURE p_sInt (field1 int,field2 int OUTPUT)”+”AS BEGIN SELECT field2=field1 * field1 END”);上面的第一条语句创建book表,返回值为0。第二语句将book表中ISBN等于123456的记录的price值修改为34,返回值为修改了price的记录数。第三条语句建立一个带有输出、输入参数的存储过程p_sInt。单元练习:1 请简要描述JDBC连接数据库的四种类型。2 DriverManager在JDBC中的的作用。第二单元 JDBC实例 下面给出一个完整的实例,包括建立所需用户数据库,配置ODBC数据源,编写访问数据库的程序,查看运行结果。其中访问数据库程序输出表books的记录,并将“java 语言”修改为“java language”。2.2.1 建立用户数据库建立SQLSever数据库,数据库名为BookShop,其中一个表名为books,记录如图2所示:图2.1 建立数据库BookShop图2.2 建立表books配置ODBC数据源在Windows2000下配置ODBC数据源,首先找到程序管理工具数据源(ODBC),调出“数据源ODBC”,选择“系统DSN”,如图2.3所示 图2.3 ODBC数据源管理器点击“添加”按钮,出现“创建新数据源”窗口,如图2.4所示。 图2.4 为数据源选择驱动程序在图2.4中选择”SQL Server”选项,然后点击“完成”按钮,进入“建立新的数据源到SQL Server”窗口,如图2.5所示。 图2.5 数据源配置1. “名称”:ODBC提供给应用程序的数据库名字。在图5中填入BookShop。2. “说明”:用来说明数据库的文字信息,可根据自己的需要填写。3. “服务器”:选择连接的数据库。2.2.2 数据库访问的步骤编写数据库访问程序的步骤如下:1. 引入java.sql的包。import java.sql.*; 2. 声明变量。Statement stmt;PreparedStatement pstmt;ResultSet rs;3. 加载驱动程序。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);4. 连接数据库String urlName=”jdbc:odbc:BookShop”;Connection con=DriverManager.getConnection(urlName,”sa”,”sa”);5. 执行查询操作。rs = stmt.executeQuery(“SELECT code,name,price from books WHERE name=computer”);pstmt = con.prepareStatement(“UPDATE books SET name = ? WHERE name = ?”);pstmt.setString(1,”Java Language”);pstmt.setString(2,”java语言”);6. 关闭数据库。con.close();源程序代码源程序代码如下:import java.sql.*;import java.io.*;public class UseJDBCpublic static void main(String args)tryStatement stmt;PreparedStatement pstmt;ResultSet rs;/加载JDBC-ODBC桥Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);String urlName=jdbc:odbc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仿古长廊翻修工程方案(3篇)
- 防火涂料工程维护方案(3篇)
- 揣摩《读书:目的和前提》的写作动机
- 方案指的是分部工程吧(3篇)
- 安全教育法规培训课件
- 安全教育案例培训课件
- 安全教育教师培训报道课件
- 牵引电机检修课件
- 农业供应链金融与智慧农业示范园发展评估报告
- 安全教育培训通过率课件
- 公共机构建筑能源审计和能耗基准值技术服务方案投标文件(技术标)
- 2025-2026学年人教PEP版(2024)小学英语四年级上册教学计划及进度表
- 2025广西公需科目考试题库和答案(覆盖99%考题)广西一区两地一园一通道+人工智能时代的机遇
- 脓毒症护理查房记录
- 企业燃气充值管理办法
- 食材库房防霉防潮卫生管理措施
- 腹透患者的饮食管理
- 人工智能辅助药物服务企业制定与实施新质生产力项目商业计划书
- 门诊部护理质控
- 财务部实习生聘用合同模板
- 基金从业资格-私募股权投资基金基础知识讲义
评论
0/150
提交评论