java面向对象程序设计第2版第14章_jdbc数据库操作_第1页
java面向对象程序设计第2版第14章_jdbc数据库操作_第2页
java面向对象程序设计第2版第14章_jdbc数据库操作_第3页
java面向对象程序设计第2版第14章_jdbc数据库操作_第4页
java面向对象程序设计第2版第14章_jdbc数据库操作_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、1java面向对象程序设计面向对象程序设计第第2 2版版第第14章章配合第2版 例子源代码一起使用例子源代码一起使用power point 制作:耿祥义 张跃平jdbc 数据库操作2主要内容主要内容jdbc连接数据库连接数据库查询操作查询操作更新、添加与删除操作更新、添加与删除操作查询查询excel电子表格电子表格使用预处理语句使用预处理语句事务事务难点难点使用预处理语句使用预处理语句事务事务导读导读本章将学习怎样使用本章将学习怎样使用java提供的提供的jdbc技术操作数据库技术操作数据库 。314.1 microsoft access microsoft access 数据库管理系统数据库

2、管理系统 14.1.1 建立数据库建立数据库 建 立 一 个 名 字 为建 立 一 个 名 字 为factoryfactory的数据库。操作的数据库。操作步骤如下:步骤如下: 单击单击“开开始始 ” “ “ 所 有 程所 有 程序序” “ m i c r o s o ft “ m i c r o s o ft access”access”,在新建数据,在新建数据库界面选择库界面选择“空空accessaccess数据库数据库”,然后命名、,然后命名、保存新建的数据库,在保存新建的数据库,在这里我们命名的数据库这里我们命名的数据库是是 f a c t o r yf a c t o r y , 保

3、存 在, 保 存 在c:chapter14c:chapter14中。中。 414.1.2 创建表创建表 在在factory管理的管理的“表表”的界面上选择的界面上选择“使用设计器创使用设计器创建表建表”,然后单击界面上的,然后单击界面上的“设计设计”菜单,将出现相应菜单,将出现相应的建表界面,我们建立的表是的建表界面,我们建立的表是employee,该表的字段,该表的字段(属性)为:(属性)为:number(文本文本) name(文本文本) birthday(日期日期) salary(数字数字,双双精度精度)。其中,其中,“number”字段为主键字段为主键 。 在在factory管理的管理的

4、“表表”的界面上,用鼠标双击已创的界面上,用鼠标双击已创建的表可以为该表添加记录建的表可以为该表添加记录。514.2 jdbcjdbc jdbc(java database connection)是java数据库连接api。简单地说,jdbc能完成3件事: 与一个数据库建立连接。与一个数据库建立连接。 向数据库发送向数据库发送sql语句。语句。 处理数据库返回的结果。处理数据库返回的结果。614.3 连接数据库连接数据库 14.3.1 连接方式的选择连接方式的选择 和数据库建立连接的常用两种方式是:建立和数据库建立连接的常用两种方式是:建立jdbcodbcjdbcodbc桥接器和桥接器和加载纯

5、加载纯javajava数据库驱动程序。使用数据库驱动程序。使用jdbcodbcjdbcodbc桥接器方式的机制桥接器方式的机制是,应用程序只需建立是,应用程序只需建立jdbcjdbc和和odbcodbc之间的连接,即所谓的建立之间的连接,即所谓的建立jdbcodbcjdbcodbc桥接器,而和数据库的连接由桥接器,而和数据库的连接由odbcodbc去完成。去完成。 使用使用jdbcodbc桥接桥接器连接数据库的器连接数据库的3个步骤个步骤建立jdbc-odbc桥接器建odbc数据源和odbc数据源建立连接714.3.2 建立建立jdbc-odbcjdbc-odbc桥接器桥接器 jdbc使用使用

6、java.lang包中的包中的class类建立类建立jdbc-odbc桥接器。建立桥接器时可能发生异常,必须捕获这个异桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:常,建立桥接器的代码是:try class.forname(sun.jdbc.odbc.jdbcodbcdriver);catch(classnotfoundexception e) system.out.println(e); 814.3.3 odbcodbc数据源数据源 1创建、修改或删除数据源创建、修改或删除数据源 选择选择“控制面板控制面板”“管理工具管理工具”“odbc“odbc数据源数据源”(某

7、些(某些window/xpwindow/xp系统,需选择系统,需选择“控制面板控制面板”“性能和维护性能和维护”“管管理工具理工具”“odbc“odbc数据源数据源”)。)。 双击双击odbcodbc数据源图标,出现的界面显示了用户已有的数据源的数据源图标,出现的界面显示了用户已有的数据源的名称。选择名称。选择“系统系统dsn”dsn”或或“用户用户dsn”dsn”,单击,单击“添加添加”按钮,可按钮,可以创建新的数据源;单击以创建新的数据源;单击“配置配置”按钮,可以重新配置已有的数按钮,可以重新配置已有的数据源;单击据源;单击“删除删除”按钮,可以删除已有的数据源。按钮,可以删除已有的数据

8、源。2 2为数据源选择驱动程序为数据源选择驱动程序 因为要访问因为要访问accessaccess数据库数据库, ,选择选择microsoft acess drivermicrosoft acess driver(* *.mdb.mdb)。3 3数据源名称及对应数据库的所在位置数据源名称及对应数据库的所在位置 在在名称栏名称栏里为数据源起一个自己喜欢的名字,这里我们起的名里为数据源起一个自己喜欢的名字,这里我们起的名字是字是star。这个数据源就是指某个数据库。在。这个数据源就是指某个数据库。在“数据库选择数据库选择”栏栏中选择一个数据库,这里我们选择的是中选择一个数据库,这里我们选择的是c:c

9、hapter14下的下的factory.mdb数据库。数据库。 914.3.4 建立连接建立连接 编写连接数据库代码不会出现数据库的名称,只能出编写连接数据库代码不会出现数据库的名称,只能出现数据源的名字。现数据源的名字。 首先使用首先使用java.sqljava.sql包中的包中的connectionconnection类类声明一个对象,声明一个对象,然后再使用类然后再使用类drivermanagerdrivermanager调用它的静态方法调用它的静态方法getconnectiongetconnection创建这个连接对象,创建这个连接对象,建立连接时应捕获建立连接时应捕获sqlexcep

10、tion异常异常 :try connection con=drivermanager.getconnection(“jdbc:odbc:数据源名字数据源名字”, login name, password ); catch(sqlexception e) 例题例题14-11014.4 查询操作查询操作 对一个数据库中表进行查询操作的具体步骤如下。对一个数据库中表进行查询操作的具体步骤如下。 1 1向数据库发送向数据库发送sqlsql查询语句查询语句 try statement sql=con.createstatement(); catch(sqlexception e ) 2处理查询结果处理查

11、询结果 resultset rs=sql.executequery(select * from employee); 表表14.1给了出了给了出了resultset对象的若干方法。对象的若干方法。 1114.4.1 顺序查询顺序查询 通过使用jdbc提供的api,可以在查询之前知道表中的字段的个数和名字,步骤如下: 1.连接对象con调用getmetadata()方法可以返回一个databasemetadata对象,例如: databasemetadata metadata=con.getmetadata();databasemetadata metadata=con.getmetadata(

12、); 2. metadata对象再调用getcolumns可以将表的字段信息以行列的形式存储在一个resultset对象中,例如: resultset tablemessage=metadata.getcolumns(null,null,employee,null);resultset tablemessage=metadata.getcolumns(null,null,employee,null); 3. tablemessage对象调用next方法使游标向下移动一行(游标的初始位置在第1行之前),然后tablemessage调用getxxx方法可以查看该行中列的信息,其中最重要的信息是第4

13、列,该列上的信息为字段的名字。 例题例题14-21214.4.2 随机查询随机查询 需要在结果集中前后移动、显示结果集指定的一条记录或随机需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法先获得一个了得到一个可滚动的结果集,需使用下述方法先获得一个statement对象:对象:statement stmt=con.createstatement(int type ,int concurrency); 然后,根据参数的然后,根据参数的type

14、、concurrency的取值情况,的取值情况,stmt返回返回相应类型的结果集:相应类型的结果集: resultset re=stmt.executequery(sql语句语句);滚动查询经常用到滚动查询经常用到resultset的下述方法:的下述方法:public boolean previous()public boolean previous():将游标向上移动将游标向上移动public void beforefirst()public void beforefirst():将游标移动到结果集的初始位置。将游标移动到结果集的初始位置。public void afterlast()pub

15、lic void afterlast():将游标移到结果集最后一行之后。将游标移到结果集最后一行之后。public void first()public void first():将游标移到结果集的第一行。将游标移到结果集的第一行。public void last()public void last():将游标移到结果集的最后一行。将游标移到结果集的最后一行。public boolean isafterlast()public boolean isafterlast():判断游标是否在最后一行之后。判断游标是否在最后一行之后。public boolean isbeforefirst()publ

16、ic boolean isbeforefirst():判断游标是否在第一行之前判断游标是否在第一行之前public boolean iffirst()public boolean iffirst():判断游标是否指向结果集的第一行。判断游标是否指向结果集的第一行。public boolean islast()public boolean islast():判断游标是否指向结果集的最后一行。判断游标是否指向结果集的最后一行。public int getrow()public int getrow():得到当前游标所指行的行号得到当前游标所指行的行号.0.0public boolean absol

17、ute(int row)public boolean absolute(int row):将游标移到参数将游标移到参数rowrow指定的行号。指定的行号。例题例题14-31314.4.3 条件查询条件查询 在下面的例子在下面的例子4中中querybynumber和和querybysalary是例子是例子2中中query类的子类,二者分别能按雇员号和薪类的子类,二者分别能按雇员号和薪水查询记录。主类将查询条件传递水查询记录。主类将查询条件传递querybynumber和和querybysalary类的实例。类的实例。例题例题14-31414.4.4 排序查询排序查询 可以在sql语句中使用ord

18、er by子语句,对记录排序 。 按薪水排序查询的sql语句:select select * * from employee order by salary from employee order by salary 例题例题14-51514.4.5 模糊查询模糊查询 可以用sql语句操作符like进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。下述语句查询姓氏是“张”或“李”的记录: rs=sql.executequery(“select * from students where 姓名姓名 like 张李张李% ”); 例题例题14-61614.5 更新、添加与

19、删除操作更新、添加与删除操作 statementstatement对象对象调用方法:调用方法: public int executeupdate(string sqlstatement); 通过参数通过参数sqlstatementsqlstatement指定的方式实现对数据库表中记录的指定的方式实现对数据库表中记录的更新、添加和删除操作。更新、添加和删除操作。 更新、添加和删除记录的更新、添加和删除记录的sqlsql语法分别是:语法分别是: update set = 新值新值 where insert into 表表(字段列表字段列表) values (对应的具体的记录)或(对应的具体的记录)

20、或insert into 表表(values (对应的具体的记录)(对应的具体的记录) delete from where 例题例题14-71714.6 查询查询excelexcel电子表格电子表格 访问访问exelexel电子表格和访问其它的数据库有所不同,电子表格和访问其它的数据库有所不同,假设有电假设有电子表格子表格goods.xlsgoods.xls,见图,见图14.1714.17。连接连接excelexcel电子表格的步骤如下。电子表格的步骤如下。1 1设置表设置表 必须在电子表格中选出一工作区作为连接时使用的表。必须在电子表格中选出一工作区作为连接时使用的表。2 2设置数据源设置数

21、据源 为数据源选择的驱动程序必须是:为数据源选择的驱动程序必须是:microsoft excel drivermicrosoft excel driver。 例题例题14-8 1814.7 使用预处理语句使用预处理语句 java提供了更高效率的数据库操作机制,就是preparedstatement对象,该对象被习惯地称作预处理语句对象。 1914.7.1 预处理语句优点预处理语句优点 预处理预处理不仅减轻了数据库的负担,而且也提高了访问数据库的速度。 对于jdbc,如果使用connection和某个数据库建立了连接对象con,那么con就可以调用preparestatement(string

22、sql)方法对参数sql指定的sql语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在preparedstatement对象对象中,那么该对象调用下列方法都可以使得该地层内部命令被数据库执行 resultset executequery() ;boolean execute(); int executeupdate(); 只要编译好了preparedstatement对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。 例题例题14-92014.7.2 使用统配符使用统配符 在对sql进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统

23、配符所表示的具体值即可。例如:sql=con.preparestatement(select * from employee where salary ? );那么在sql对象执行之前,必须调用相应的方法设置统配符“?”代表的具体值,比如: sql.setfloat(1,2389); 指定上述预处理sql语句中统配符“?”代表的值是2389 预处理语句设置统配符“?”的值的常用方法有: void setdate(int parameterindex,date x) void setdouble(int parameterindex,double x) void setfloat(int par

24、ameterindex,float x) void setint(int parameterindex,int x) void setlong(int parameterindex,long x) void setstring(int parameterindex,string x) 例题例题14-102114.8 事务事务 14.8.1 事务及处理事务及处理 事务由一组事务由一组sqlsql语句组成,所谓事务处理是指:语句组成,所谓事务处理是指:应用程序保证事务中的应用程序保证事务中的sqlsql语句要么全部都执行,语句要么全部都执行,要么一个都不执行。要么一个都不执行。 事务处理是保证数据

25、库中数据完整性与一致事务处理是保证数据库中数据完整性与一致性的重要机制。性的重要机制。 2214.8.2 jdbcjdbc事务处理步骤事务处理步骤 1 1使用setautocommit(boolean autocommit)方法 和数据库建立一个连接对象后,比如con。那么con的提交模式是自动提交模式,为了能进行事务处理,必须关闭con的这个默认设置。con.setautocommit(false);con.setautocommit(false); 2 2使用commit()方法 连接对象con调用commit()commit()方法就是让事务中的sql语句全部生效。 3 3使用rollb

26、ack()方法 con调用rollback()rollback()方法的作用是撤消事务中成功执行过的sql语句对数据库数据所做的更新、插入或删除操作,即撤消引起数据发生变化的sql语句操作,将数据库中的数据恢复到commi()commi()方法执行之前的状态。 例题例题14-112314.9 cachedrowsetimplcachedrowsetimpl类类 com.sun.rowset包提供了cachedrowsetimpl类,该类实现了cachedrowset接口。cachedrowsetimpl对象 可 以 保 存 r e s u l t s e t 对 象 中 的 数 据 , 而 且

27、cachedrowsetimpl对象不依赖connnection对象,这意味着一旦把resultset对象中的数据保存到cachedrowsetimpl对象中后,就可以关闭和数据库的连接。 将 r e s u l t s e t 对 象 r s 中 的 数 据 保 存 到cachedrowsetimpl对象rowset中的代码如下:rowset.populate(rs);rowset.populate(rs); 例题例题14-122414. 10 javajava的的derbyderby内置数据库内置数据库 jdk 1.6版本及之后的版本为java平台提供了一个内置的数据库管理系统 ,简称de

28、rby数据库。 应用程序内嵌数据库的特点是应用程序在其自身的代码中创建所需要的数据库,并使用该数据库。应用程序连接derby数据库的步骤如下:1将java安装目录dblib下的derby.jar复制到java运行环境的扩展中,即将该jar文件存放在jdk安装目录的jrelibext文件夹中。2加载derby数据库驱动程序: 加载derby数据库驱动程序的代码是: class.forname(org.apache.derby.jdbc.embeddeddriver).newinstance();其中的org.apache.derby包是derby.jar提供的,该包中的embeddeddriver类负责创建 驱 动 数 据 的 实 例 . 加 载 d e r b y 数 据 库 驱 动 程 序 需 要 捕 获classnotfoundexception、instantiationexception、illegalaccessexception和sqlexception异常。3创建并连接数据库或连接已有的数据库 :创建名字是student的数据库,并与其建立连接(create取值是true)的代码是:connection con = drivermanager.getconnection(jdbc:derb

温馨提示

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

评论

0/150

提交评论