第14章-Java-数据库编程接口.ppt_第1页
第14章-Java-数据库编程接口.ppt_第2页
第14章-Java-数据库编程接口.ppt_第3页
第14章-Java-数据库编程接口.ppt_第4页
第14章-Java-数据库编程接口.ppt_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第14章 Java数据库编程接口,利用JDBC访问数据库,2,主要内容,14.1 数据库与JDBC概述 14.1.1 数据库概述 14.1.2 SQL 14.1.3 什么是JDBC 14.1.4 JDBC与ODBC 14.1.5 ODBC数据源设置 14.2 通过JDBC访问数据库 14.2.1 JDBC数据库驱动程序 14.2.2 JDBC API 14.2.3 编写JDBC程序的一般步骤 14.3 ATM应用程序,利用JDBC访问数据库,3,14.1 数据库与JDBC概述,14.1.1 数据库概述 数据库是一个有组织的数据集合,它由一个或多个表组成。每一个表中都存储了对一类对象的数据描述。

2、数据库管理系统(database management system,DBMS)以一种与数据库格式一致的方式,提供了存储和组织数据的机制。 当前最流行的数据库是关系型数据库,它是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。数据库中的表按照行和列的形式来存储信息。行表示关系型数据库中的记录,列表示数据属性。 比较著名的关系数据库管理系统有Oracle、Sybase、DB2、MySQL、Microsoft SQL Server、Microsoft Access等。,利用JDBC访问数据库,4,本章ATM应用程序使用小型关系数据库Microsoft Access,设计一个简

3、单数据库ATM.mdb,该数据库由一张表account组成。如图14.1所示。,利用JDBC访问数据库,5,14.1.2 SQL,SQL是一个国际化标准语言,几乎所有关系型数据库都用SQL语言执行数据查询和操纵。 理解SQL语句时要注意几点: (1) SQL语言中的语句都是独立执行的,无上下文联系; (2) 每条语句都有自己的主关键字,语句中可包含若干子句; (3) SQL语句本身不区分大小写。为突出语句格式,下面例子中保留字采用大写。,利用JDBC访问数据库,6,1. 建表语句 格式: CREATE TABLE table_name (column1 type not null,) 功能:在

4、当前数据库中创建一张名为的table_name表格结构。 2. 删除表 格式: DROP table_name 功能:在当前数据库中删除名为table_name的表。,利用JDBC访问数据库,7,3. 查询语句 格式: SELECT col1,col2,.,coln FROM table_name WHERE condition_expression 功能:从数据库表中检索满足条件的记录。WHERE子句是可选项,它可以包含、 =、 =、和LIKE运算符。LIKE运算符用于带有通配符百分号(%)和下划线(_)的模式匹配。,利用JDBC访问数据库,8,4. 插入语句 格式: INSERT INTO

5、 table_name (col1,col2,.,coln) VALUES(v1,v2,.,vn) 功能:在表table_name中插入一条记录,各列的值依次分别为v1、v2、vn等,若某列的列名未给,则值为NULL。 注意:(1)如果所有的列名都未给,则在Values中必须依次给出所有列的值。(2)给出的值的类型必须与对应的列的类型相一致。,利用JDBC访问数据库,9,5. 更新语句 格式: UPDATE table_name SET col1=v1 ,col2=v2,.,coln=vnWHERE condition_expression 功能:更新表table_name中满足条件的记录,使

6、列col1的值为v1、列col2 的值为v2、列coln的值为vn等。 注意:如不给出条件,则更新表中所有记录。 例如,account表中,账号为“1280316401“的账户取款200元后应更新余额,使用语句如下: UPDATE account SET accountAmount=accountAmount-200 WHERE accountNumber =1280316401,利用JDBC访问数据库,10,6. 删除语句 格式: DELETE FROM table_name WHERE condition_expression 功能:删除表table_name中满足条件的记录。特别注意:如

7、果不给出条件,则删除表中所有记录。 例如,对account表中,账号为“1280316401“的账户进行销户处理,语句如下: DELETE FORM account WHERE accountNumber=1280316401,利用JDBC访问数据库,11,14.1.3 什么是JDBC,Java程序使用JDBC与数据库进行通信,并用它操纵数据库中的数据。 JDBC是Java DataBase Connectivity的缩写,它是一种可用于执行SQL语句的Java API,由一组用 Java编写的类和接口组成。JDBC主要提供了跨平台的数据库访问方法,为数据库应用开发人员提供了一种标准的应用程序

8、设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。 类似于Microsoft的ODBC。 JDBC是一种规范,它让各数据库厂商为Java程序员提供标准的数据库访问类和接口,这样就使得独立于DBMS的Java应用程序的开发工具和产品成为可能。,利用JDBC访问数据库,12,14.1.4 JDBC与ODBC,JDBC与Microsoft开放数据库连接(ODBC)的工作原理非常类似。ODBC是OpenDatabaseConnectivity的英文简写。它是由Microsoft提出的为连接不同数据库而制定的一种接口标准,是用C语言实现的,标准应用程序数据接口。通过ODBC API,应用

9、程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。,利用JDBC访问数据库,13,ODBC,ODBC是OpenDatabaseConnectivity的英文简写。它是由Microsoft提出的为连接不同数据库而制定的一种接口标准,是用C语言实现的,标准应用程序数据接口。通过ODBC API,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。几乎所有的数据库都支持这一标准。 ODBC有其不足之处,比如它并不容易使用,没有面向对象的特性等等。 ODBC的结构包括四个主

10、要部分:应用程序接口、驱动器管理器、数据库驱动器和数据源。,利用JDBC访问数据库,14,14.1.5 ODBC数据源设置,进行ODBC数据源设置,在Windows XP环境下,可按路径开始菜单-设置-控制面板-管理工具-数据源(ODBC),双击可打开如图14.3所示的对话框。,利用JDBC访问数据库,15,利用JDBC访问数据库,16,14.2 通过JDBC访问数据库,14.2.1 JDBC数据库驱动程序 JDBC数据库驱动程序的功能是:一面用底层协议与数据库服务器进行对话;一面用JDBC API与用户程序进行对话。 为实现 “与平台无关”的特点,JDBC为我们提供了一个“驱动程序管理器”,

11、它能动态维护数据库查询所需的所有驱动程序对象。 用户可以从数据库供应商那里获得JDBC数据库驱动程序。,利用JDBC访问数据库,17,JDBC驱动程序类型,(1) JDBC-ODBC Bridge 将对JDBC的调用转化为ODBC的调用,要求本地机必须安装ODBC驱动程序,然后注册一个ODBC数据源名 。 (2) JDBC-Native API Bridge 直接将用户的调用转化为对数据库客户端API的调用,要求本地机必须安装好特定的驱动程序,显然限制了应用程序对其它数据库的使用。 (3) JDBC-MiddleWare 它是独立于数据库服务器的,它和一个中间件服务器通讯,由中间件负责与数据库

12、通讯。 (4) Pure JDBC Driver 使用该类型的应用程序无需安装附加的软件,所有对数据库的操作都直接由JDBC驱动程序完成。,利用JDBC访问数据库,18,利用JDBC访问数据库,19,14.2.2 JDBC API,简单地说,JDBC主要完成下列三项任务: (1)同一个数据库建立连接; (2)向数据库发送SQL语句; (3)处理数据库返回的结果。 这些任务由JDBC API来完成。JDBCAPI被描述成为一组抽象的Java接口。这些接口都可能产生异常,如:ClassNotFoundException、SQLException异常,因而编写程序时必须对抛出的异常进行捕获。,利用J

13、DBC访问数据库,20,(1) 驱动程序管理器Drvier Manager 用来加载驱动程序,管理应用程序和已注册的驱动程序的连接。 (2) 连接Connection 封装了应用程序与数据库之间的连接信息。 (3) 驱动程序Driver 负责定位并访问数据库,建立数据库连接和处理所有与数据库的通讯。 (4) 语句Statement 用来在数据库中执行一条SQL语句。 (5) 结果集ResultSet 负责保存执行查询后返回的数据。,利用JDBC访问数据库,21,1 . DriverManager类,DriverManager 类是 JDBC 的管理层,作用于用户程序和驱动程序之间。它跟踪可用的

14、驱动程序,并在数据库和相应驱动程序之间建立连接。负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。 加载 Driver 类,并且实现自动在 DriverManager 中注册,这一过程通常通过调用方法 Class.forName()来完成,这将显式地加载驱动程序类。,利用JDBC访问数据库,22,利用JDBC访问数据库,23,Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /加载驱动程序,这里是一个JDBC-ODBC桥,类型一 或者采用另外一种方法:

15、 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver() ) Connection con = DriverManager.getConnection(jdbc:odbc:userlist, user, ); / 表示是通过ODBC来连接数据库的,userlist为ODBC数据源名, user为此数据源的某个表名字 /建立一个连接,利用JDBC访问数据库,24,Sql Server7.0/2000数据库,Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);

16、 String url=“jdbc:microsoft:sqlserver: /localhost:1433;DatabaseName=mydb”; /mydb为数据库 String user=sa; String password=; Connection conn= DriverManager.getConnection(url,user,password);,利用JDBC访问数据库,25,2 .Connection接口,Connection实际上是一个接口,它负责维护Java应用程序与数据库之间的连接。 Connection 对象代表与数据库的连接。连接过程包括所执行的 SQL 语句和在

17、该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。 Connection实际上是接口,因而不能实例化,通常使用DriverManager.getConnection方法返回一个Connection对象,利用JDBC访问数据库,26,利用JDBC访问数据库,27,Connection con =DriverManager.getConnection(url); /建立一个连接, /创建Statement对象 Statement stmt = con.createStatement();,利用JDBC访问数据库,28,3 . Statement类和接口,S

18、tatement 对象用于将 SQL 语句发送到数据库中,并返回结果。,利用JDBC访问数据库,29,(1) 创建 Statement 对象 Statement stmt = con.createStatement(); (2) 使用 Statement 对象执行语句 String sql = select * from userlist where username= + username + ; ResultSet rs = stmt.executeQuery(sql); (3) 语句完成 语句在已执行且所有结果返回时,即认为已完成。对于返回一个结果集的 executeQuery 方法,在

19、检索完 ResultSet 对象的所有行时该语句完成。对于方法 executeUpdate,当它执行时语句即完成。,利用JDBC访问数据库,30,4 . ResultSet接口,ResultSet结果集一般是一个表,其中有查询所返回的列标题及相应的值,即包含符合 SQL 语句中条件的所有行,并且它通过一套 getXXX 方法(这些 get 方法可以访问当前行中的不同列)提供了对这些行中数据的访问。 See the JDK API Help Document,利用JDBC访问数据库,31,4ResultSet类 有了SQL语句对象后,调用语句对象的方法executeQuery()执行SQL语句查

20、询,并将查询结果存放在一个用ResultSet类声明的对象中。例如,以下代码读取学生成绩表存于rs对象中: ResultSet rs = sql.executeQuery(SELECT * FROM ksInfo); ResultSet 对象实际上是一个由查询结果数据构成的表,是一个管式数据集,由统一形式的数据行组成, 一行对应一条查询记录。在ResultSet对象中隐含着一个游标,一次只能获得游标当前所指的数据行,用next方法可取下一个数据行。用数据行的字段(列)名称或位置索引(自1开始)调用形如getXXXX()方法获得记录的字段值。,利用JDBC访问数据库,32,ResultSet对象

21、的部分方法: (1)byte getByte(int columnIndex),返回指定字段的字节值。 (2)Date getDate(int columnIndex),返回指定字段的日期值。 (3)float getFloat(int columnIndex),返回指定字段的浮点值。 (4)int getInt(int columnIndex),返回指定字段整数值。 (5)String getString(int columnIndex),返回指定字段的字符串值。 (6)double getDouble(String columnName) ,返回指定字段的双精度值。 (7)long get

22、Long(String columnName) ,返回指定字段的long型整值。 (8)boolean next(),返回是否还有下一字段。,利用JDBC访问数据库,33,以上方法中的columnIndex 是位置索引,用于指定字段,columnName是字段名。 用户需要在查询结果集上浏览,或前后移动、或显示结果集的指定记录,这称为可滚动结果集。程序要获得一个可滚动结果集,只要在获得SQL的语句对象时,增加指定结果集的两个参数即可。例如,以下代码所示: Statement stmt = con.createStatement(type, concurrency); ResultSet re=

23、stmt.executeQuery(SQL 语句); 语句对象stmt的SQL查询就能得到相应类型的结果集。 int型参数type决定可滚动集的滚动方式: ResultSet.TYPE_FORWORD_ONLY,结果集的游标只能向下滚动。 ResultSet.TYPE_SCROLL_INSENSITIVE,游标可上下移动,当数据库变化时,当前结果集不变。 ResultSet.TYPE_SCROLL_SENSITIVE,游标可上下移动,当数据库变化时,当前结果集同步改变。 int型参数concurrency决定数据库是否与可滚动集同步更新: ResultSet.CONCUR_READ_ONLY,

24、不能用结果集更新数据库中的表。 ResultSet.CONCUR_UPDATETABLE,能用结果集更新数据库中的表。,利用JDBC访问数据库,34,利用连接对象connect,创建Statement对象stmt,指定结果集可滚动,并以只读方式读数据库: Stmt = connect.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 可滚动集上另外一些常用的方法如下: boolean previous(),将游标向上移动,当移到结果集第一行时,返回false 。 void beforeF

25、irst(),将游标移到结果集的第一行前。 void afterLast(),将游标移到最后一行之后。 boolean next(),将游标移到下一行。,利用JDBC访问数据库,35,void first(),将游标移到第一行。 void last(),将游标移到最后一行。 boolean isAfterLast(),判游标是否在最后一行之后。 boolean isBeforeFirst(),判游标是否在第一行之前。 boolean isLast(),判游标是否在最后一行。 boolean isFirst(),判游标是否在第一行。 int getRow(),获取当前所指的行(行号自1 开始编号

26、,结果集空,返回0 )。 boolean absolute(int row),将游标移到row 行。,利用JDBC访问数据库,36,ResultSet rs = stmt.executeQuery(sql); /列印结果集 while(rs.next() String ps = rs.getString(password); if (ps.equals(password) /验证通过 ok=true; ,利用JDBC访问数据库,37,14.2.3编写JDBC程序一般步骤,import java.sql.*; 加载驱动程序/可能抛出ClassNotFoundException异常; Class.

27、forName(driverClass); 获得jdbc 连接 Connection con = DriverManager.getConnection(url); 创建Statement对象 Statement stmt = con.createStatement(); 得到查询结果集或者执行update等操作 ResultSet rs = stmt.executeQuery(select * from student); 关闭数据库连接 con.close(); 注意: try catch (SQLException e) ,利用JDBC访问数据库,38,14.3 ATM应用程序,了解了JDBC基本原理以及掌握了JDBC API编程步骤后,现在完成简易数据库应用程序的编写。 【例14.1】举例:从student.mdb 读入数据,并显示。 Student.mdb是一个Excell数据库,里面有成绩表,,利用JDBC访问数据库,39,操作步骤:,1:在ODBC下把redsun与Studeng.mdb联系起来,设置 username: snow Password: ookk 2:运行程序,利用JDBC访

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论