Java程序设计项目化教程教学源模块6——Java数据库编程_第1页
Java程序设计项目化教程教学源模块6——Java数据库编程_第2页
Java程序设计项目化教程教学源模块6——Java数据库编程_第3页
Java程序设计项目化教程教学源模块6——Java数据库编程_第4页
Java程序设计项目化教程教学源模块6——Java数据库编程_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、模块模块6java数据库编程数据库编程主讲教师:成奋华6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作项目项目42 使用使用jdbc-odbc桥接实现与数据桥接实现与数据库的连接及查询数据表中的数据库的连接及查询数据表中的数据 w jdbc的基本功能的基本功能 njava database connectivity,java数据库连接n由一组用java编程语言编写的类和接口组成,是一种可用于执行sql语句的java api n在java.sql包中定义 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w jdbc api 中定义的主要类n数据库驱动程序管理器

2、类drivermanager l在用户程序和数据库系统之间维护着与数据库驱动程序之间的连接 l实现驱动程序的装载 l创建与数据库系统连接的connection类对象 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作drivermanager类的常用方法方法主要功能主要功能void deregisterdriver(driverdriver)从 drivermanager 的列表中删除一个驱动程序connection getconnection(stringurl)建立到给定数据库 url 的连接connection getconnection(stringurl, prope

3、rtiesinfo)建立到给定数据库 url 的连接connection getconnection(stringurl, stringuser, stringpassword)建立到给定数据库 url 的连接driver:每个驱动程序类必须实现的接口 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作driver getdriver (stringurl)查找能理解给定 url 的驱动程序enumeration getdrivers()获取带有当前调用者可以访问的所有当前已加载 jdbc 驱动程序的 enumerationint getlogintimeout()获取驱动程序

4、试图登录到某一数据库时可以等待的最长时间,以秒为单位。void registerdriver (driverdriver)向 drivermanager 注册给定驱动程序void setlogintimeout (intseconds)设置驱动程序试图连接到某一数据库时将等待的最长时间,以秒为单位。6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作类类connection用于管理到指定数据库的连接用于管理到指定数据库的连接 方法方法主要功能主要功能void clearwarning()清除为此 connection 对象报告的所有警告sqlwarning getwarnings

5、()获取此 connection 对象上的调用报告的第一个警告void close()即释放此 connection 对象的数据库和 jdbc 资源boolean isclosed() 查询此 connection 对象是否已经被关闭void commit()使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 connection 对象当前持有的所有数据库锁。6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作statement createstatement (intresultsettype, intresultsetconcurrency)创建一个 statement

6、 对象,该对象将生成具有给定类型和并发性的 resultset 对象statement用于执行静态 sql 语句并返回它所生成结果的对象 resultsettype包括:type_forward_only 1003 指针只能向前移动type_scroll_insensitive 1004指针可滚动但通常不受其他的更改影响type_scroll_sensitive 1005指针可滚动并且通常受其他的更改影响resultsetconcurrency包括concur_read_only 1007 不可以更新concur_updatable 1008 可以更新 6.1与数据库的连接及数据的基本操作与数

7、据库的连接及数据的基本操作statement createstatement()创建一个 statement 对象来将 sql 语句发送到数据库string getcatalog()获取此 connection 对象的当前目录名称void setcatalog (stringcatalog)设置给定目录名称databasemetadata getmetadata()获取一个 databasemetadata 对象,该对象包含关于此 connection 对象所连接的数据库的元数据接口 databasemetadata(数据库元数据)关于数据库的整体综合信息 元数据:描述数据及其环境的数据能提供

8、基于用户的信息能支持系统对数据的管理和维护 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作boolean isreadonly()查询此 connection 对象是否处于只读模式void setreadonly (booleanreadonly)将此连接设置为只读模式callablestatement preparecall(stringsql)创建一个 callablestatement 对象来调用数据库存储过程callablestatement:用于执行 sql 存储过程的接口preparedstatement:表示预编译的 sql 语句的对象 preparedsta

9、tement preparestatement(stringsql)创建一个 preparedstatement 对象来将参数化的 sql 语句发送到数据库void rollback()取消在当前事务中进行的所有更改,并释放此 connection 对象当前持有的所有数据库锁6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作wjdbc访问数据库的两种方式访问数据库的两种方式n利用数据库产品的面向利用数据库产品的面向odbc驱动程序,在驱动程序,在jdbc和和odbc之间建立之间建立jdbc- odbc桥,桥,在在java程序中基于程序中基于jdbc- odbc桥的方式桥的方式访

10、问数据库访问数据库n基于特定数据库产品的基于特定数据库产品的jdbc驱动程序,在驱动程序,在java应用程序中利用应用程序中利用jdbc数据驱动程序直数据驱动程序直接与数据库连接接与数据库连接 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w建立数据库连接建立数据库连接 n首先必须通过java.lang.class类的forname()动态加载驱动程序类,加载驱动器的语句为: class.forname(sun.jdbc.odbc.jdbcodbcdrvier);n再向drivermanager注册jdbc驱动程序,用drivermanager类中的getconnectio

11、n()方法建立与数据库的连接。 connection con=drivermanager.getconnection(url, 数据库的用户名,密码);l url是由三部分组成,是提供识别数据库方式的串:: 例:如果数据源是mydatasource,则url可以写成: jdbc:odbc:mydatasource6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w 创建数据源的步骤创建数据源的步骤 (windows xp )n打开控制面版性能和维护管理工具数据源(odbc)n在“用户dsn”中单击添加按钮 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w 创

12、建数据源的步骤创建数据源的步骤 (windows xp )n选择sql server,点击完成按钮 n在名称栏内写上数据源的名字,如mydatasource 服务如果是用本机的话就直接写上“.”号就可以了,如果是用别的服务器,请单击下拉按钮选择。然后单击下一步 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w 创建数据源的步骤创建数据源的步骤 (windows xp )n可以选择使用用户输入登录的id和密码的sql server验证,然后设置登录sql的用户名和密码,如用户名为sa,密码为空,然后点下一步 n更改默认的数据库(你处理哪个数据库中的数据,就把对应的数据库更改为

13、默认数据库,如pubs),然后点下一步 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w 创建数据源的步骤创建数据源的步骤 (windows xp )n直接点完成 n点击测试数据源,测试是否连接成功。至此数据源建立完毕。点击确定按钮退出此对话框 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w创建和执行创建和执行jdbc语句语句nstatement对象可将简单的查询发送到数据库。对象可将简单的查询发送到数据库。l创建一个创建一个statement对象对象l将想要执行的将想要执行的sql语句传递给适当的执行方法语句传递给适当的执行方法l执行该执行该stat

14、ement对象。对象。 如:如:statement stat = con.createstatement();n对于对于select语句,使用的方法是语句,使用的方法是executequery()n对于创建、插入或更新表的语句,使用的方法是对于创建、插入或更新表的语句,使用的方法是executeupdate()。 如:如: stat.executeupdate(sql); /sql字符串是一条字符串是一条sql语句语句 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w处理结果:处理结果:jdbc将结果集返回给resultset对象 resultset rs = stat.e

15、xecutequery(sql); /sql字符串是一条sql语句n resultset结果集对象所包含的常用方法如下:lnext():对象rs包含了结果集中显示的表,将光标移到下一行。w光标初始定位于resultset对象第一行的上面w第一次调用next()将光标移到第一行,使它成为当前行。接下来调用next()将使光标从上至下每次移动一行。lgetstring()w常用于检索char和varchar sql类型的数据w也能检索其他基本sql类型的数据例:如果用它检索numeric类型的数据,getstring()将把numeric值转换成java的string对象,这样一来,在数据要作为数

16、字前就必须转换回numeric类型 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作ngetxxx():适当类型的getxxx方法可用于检索列中的数值,这里的xxx指列的数据类型l检索varchar sql类型数值的方法是getstring()l检索float类型数值的方法是getfloat()while (rs.next() /每次调用next(),下一行就成为当前行,直到rs中再也没有可向前移动的行为止 string s = rs.getstring(strcolumnname1 ); float n = rs.getfloat(strcolumnname2); / st

17、rcolumnname1、 strcolumnname2都是sql字符串中的列名 system.out.println(s + + n);ljdbc使用两种方法标识getxxx方法检索数值的列w指定列名w指定列索引(列的序号),i表示第i列 如:string s = rs.getstring(1); float n = rs.getfloat(2);6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w 与数据库连接及数据基本操作的步骤与数据库连接及数据基本操作的步骤n创建数据源n建立数据库连接 class.forname(sun.jdbc.odbc.jdbcodbcdrvier

18、); connection con = drivermanager.getconnection (url,“数据库用户名”, “密码); n创建和执行jdbc语句:statement stat = con.createstatement(); n执行jdbc语句,得到处理结果resultset rsstat.executequery (sql); while (rs.next() 变量名rs.get(列名或列索引);n关闭连接: con.close6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作【应用扩展】【应用扩展】w 使用预备语句使用预备语句nstatement对象是可以

19、将简单的查询发送到数据库n发送带参数的查询语句到数据库,可以使用preparedstatement对象l包含一条预编译过的sql语句ldbms不必编译就可直接运行preparedstatement的sql语句l代替statement对象一般会缩短执行时间lpreparedstatement对象可用于不带参数的sql语句,但在多数场合是用于带参数的sql语句。6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作【应用扩展】【应用扩展】 使用预备语句使用预备语句其用法如下:string strsql=update coffees set sales = ? where cof_nam

20、e like ?;preparedstatement stat = con.preparestatement(strsql);stat.setint(1, 75);/给上面的sql语句的第一个问号赋值stat.setstring(2, colombian);/给上面的sql语句的第二个问号赋值stat.executeupdate();/相当于执行update coffees set sales = 75 where cof_name like colombian可用该对象制作成模板实现一次构造多条带参数的sql语句,简化编码。6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作【

21、应用扩展】【应用扩展】 executeupdate方法的返回值方法的返回值 executequery返回一个resultset对象 executeupdate返回的是一个整数值,指出了表中已更新的行数。如果executeupdate的返回值为0表明 执行的语句是一不影响任何行的更新语句 执行的是一无返回内容的 sql 语句,比如dll语句 sql与与java的数据类型 sql数据类型与java的数据类型不一致 在使用java类型的应用程序与使用sql类型的数据库之间,需要某种读写类型转换机制 resultset类的“get”系列方法 statement及其子类的“set”系列方法都有可能要用到

22、数据转换 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作项目项目43 使用纯使用纯java jdbc 实现与数据库的连接及更新实现与数据库的连接及更新jdbc-odbc桥将jdbc数据转换为odbc数据源,然后用odbc与数据连接,速度比较慢。纯java jdbc驱动程序用纯java 语言编写独立的jdbc驱动程序直接与数据连接与数据库进行通信的整个过程均由java语言实现,而不通过桥接或中间件来存取数据库缺点:需要下载相应的类包不同数据库的连接代码可能不同 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作项目项目43 使用纯使用纯java jdbc 实现

23、与数据库的连接及更新实现与数据库的连接及更新jdbc-odbc桥将jdbc数据转换为odbc数据源,然后用odbc与数据连接,速度比较慢。纯java jdbc驱动程序用纯java 语言编写独立的jdbc驱动程序直接与数据连接与数据库进行通信的整个过程均由java语言实现,而不通过桥接或中间件来存取数据库缺点:需要下载相应的类包不同数据库的连接代码可能不同 w 使用纯java jdbc驱动程序连接数据库 n装载驱动程序l在程序中,利用class.forname()方法加载指定的驱动程序class.forname(com.microsoft.jdbc.sqlserver.sqlserverdriv

24、er); l注意:连接不同的数据库时,加载的驱动程序有所不同。n建立与数据库的连接l首先创建指定数据库的urljdbc:subprotlcol:subname:/hostname:port;databasename=xxxljdbc表示当前通过java数据库连接进行数据库访问lsubprotocal表示某种驱动程序支持的数据库连接机制lsubname表示在当前连接机制下的具体名称lhostname表示主机名。port表示相应的连接端口ldatabasename是要连接的数据库的名称。例如:string url=jdbc: sqlserver:/localhost:1433;databasena

25、me=pubs; /pubs为数据库名string user=“sa”; /用户名 string password=; /密码connection conn= drivermanager.getconnection(url,user,password);6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w创建存储过程创建存储过程ncallablestatement 对象为所有的 dbms 提供了一种以标准形式调用已储存过程的方法n创建一个存储过程: create procedure publishers_titles as select pub_name,title from

26、publishers,titles where publishers.pub_id=titles.pub_id order by titlen将sql语句放到一个字符串中,然后赋给变量createprocedure以备后用:string createprocedure =” create procedure publishers_titles as select pub_name,title from publishers,titles where publishers.pub_id=titles.pub_id order by title”n使用connection对象con来创建state

27、ment对象,用于把创建存储过程的sql语句发送给数据库:statement stmt = con.createstatement(); stmt.executeupdate(createprocedure);n存储过程publishers_titles将作为一个可调用的数据库对象在数据库中编译并存储,调用时就像调用其他方法一样 6.1与数据库的连接及数据的基本操作与数据库的连接及数据的基本操作w从从jdbc调用存储过程调用存储过程n创建一个callablestatement对象l利用一个打开的connection对象即可完成创建lcallablestatement对象包含了存储过程的一个调用

28、;但它不包含存储过程本身 如:callablestatement cs = con.preparecall(call publishers_titles );resultset rs = cs.executequery() n注意l用于执行cs的方法是executequery,因为cs调用的存储过程包含一个查询,执行后产生一个结果集l如果存储过程包含一条更新或一条dll语句:executeupdate方法l如果存储过程包含多条sql语句,产生了多个结果集:execute方法6.2 结果集元数据结果集元数据 项目项目44 获取数据表的基本信息获取数据表的基本信息w 结果集元数据(resultse

29、tmetadata)包含结果集的相关信息如字段名和字段类型。w 根据结果集的元数据,可以得到一个查询结果集关于查询表中列的个数、各个列名、类型以及各个列的宽度等w resultsetmetadata的对象可以由resultset对象的getmetadata()方法得到。w 在使用结果集前,需要知道记录的行列数n此类信息存储在结果集元数据中n使用结果集中的成员方法“getmetadata()”,便可得到结果集元数据。resultsetmetadata rsmd = results.getmetadata(); numcols = rsmd.getcolumncount();/从结果集元数据中取得

30、列数 6.2 结果集元数据结果集元数据项目项目44 获取数据表的基本信息获取数据表的基本信息resultsetmetadata主要主要方法方法主要功能主要功能getcolumncount()返回目前resultset对象的列数getcolumndisplaysize(int column)返回column指定的列的最大宽度getcolumnlabel(int column)返回column指定列的标签getcolumnname(int column)返回column指定列的列名getcolumntype(int)返回指定号数的字段类型6.2 结果集元数据结果集元数据【应用扩展】【应用扩展】 w 数据库元数据(databasemetadata)n包含数据库的有关信息如表名、表索引、数据库产品名和版本号、数据库支持的操作等等。ndatabasemetadata对象的创建如下: databasemetadata dma = con.getmetadata(); /con是connection的一个对象 6.2 结果集元数据结果集元数据 【应用扩展】【应用扩展】 databasemetadata类类主要主要方法方法主要

温馨提示

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

评论

0/150

提交评论