Java-2实用教程第4版-第11章-JDBC数据库操作.ppt_第1页
Java-2实用教程第4版-第11章-JDBC数据库操作.ppt_第2页
Java-2实用教程第4版-第11章-JDBC数据库操作.ppt_第3页
Java-2实用教程第4版-第11章-JDBC数据库操作.ppt_第4页
Java-2实用教程第4版-第11章-JDBC数据库操作.ppt_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

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

文档简介

2020/5/12,第1页,注意:开始用功了!,2020/5/12,第2页,Java2实用教程(第4版)第11章,配合例子源代码一起使用,Powerpoint制作:耿祥义张跃平,JDBC数据库操作,2020/5/12,第3页,导读,主要内容JDBC连接数据库查询操作更新、添加与删除操作使用预处理语句事务批处理,2020/5/12,第4页,11.1MicrosoftAccess数据库管理系统11.1.1建立数据库,建立一个名字为shop的数据库。操作步骤如下:单击“开始”“所有程序”“MicrosoftAccess”,在新建数据库界面选择“空Access数据库”,然后命名、保存新建的数据库,在这里我们命名的数据库是shop,保存在C:ch11中。,2020/5/12,第5页,11.1.2创建表,在shop数据库中创建名字为goods的表。在shop管理的“表”的界面上选择“使用设计器创建表”,然后单击界面上的“设计”菜单,将出现相应的建表界面,我们建立的表是goods,该表的字段(属性)为:number(文本)name(文本)madeTime(日期)price(数字,双精度)。在shop管理的“表”的界面上,用鼠标双击已创建的表可以为该表添加记录。,2020/5/12,第6页,11.2JDBC,Java提供了专门用于操作数据库的API,即JDBC(JavaDataBaseConnection)。JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库(如图11.3).程序经常使用JDBC进行如下的操作:(1)与一个数据库建立连接。(2)向数据库发送SQL语句。(3)处理数据库返回的结果。,2020/5/12,第7页,11.3连接数据库11.3.1连接方式的选择,和数据库建立连接的常用两种方式是:建立JDBCODBC桥接器和加载纯Java数据库驱动程序。使用JDBCODBC桥接器方式的机制是,应用程序只需建立JDBC和ODBC之间的连接,即所谓的建立JDBCODBC桥接器,而和数据库的连接由ODBC去完成。,使用JDBCODBC桥接器连接数据库的3个步骤(1)建立JDBC-ODBC桥接器(2)建ODBC数据源(3)和ODBC数据源建立连接,2020/5/12,第8页,11.3.2建立JDBC-ODBC桥接器,JDBC使用java.lang包中的Class类建立JDBC-ODBC桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptione)System.out.println(e);,2020/5/12,第9页,11.3.3ODBC数据源,1创建、修改或删除数据源选择“控制面板”“管理工具”“ODBC数据源”(某些window/xp系统,需选择“控制面板”“性能和维护”“管理工具”“ODBC数据源”)。双击ODBC数据源图标,出现的界面显示了用户已有的数据源的名称。选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以创建新的数据源;单击“配置”按钮,可以重新配置已有的数据源;单击“删除”按钮,可以删除已有的数据源。2为数据源选择驱动程序因为要访问Access数据库,选择MicrosoftAcessDriver(*.mdb)。3数据源名称及对应数据库的所在位置在名称栏里为数据源起一个自己喜欢的名字,这里我们起的名字是myData。这个数据源就是指某个数据库。在“数据库选择”栏中选择一个数据库,这里我们选择的是C:ch11下的shop.mdb数据库。,2020/5/12,第10页,11.3.4建立连接,编写连接数据库代码不会出现数据库的名称,只能出现数据源的名字。首先使用java.sql包中的Connection类声明一个对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象,建立连接时应捕获SQLException异常:tryConnectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,loginname,password);catch(SQLExceptione),例子1(连接到数据源myData,查询goods表),2020/5/12,第11页,11.4查询操作,对一个数据库中表进行查询操作的具体步骤如下。1向数据库发送SQL查询语句tryStatementsql=con.createStatement();catch(SQLExceptione)2处理查询结果ResultSetrs=sql.executeQuery(SELECT*FROMemployee);表11.1给了出了ResultSet对象的若干方法。,2020/5/12,第12页,11.4.1顺序查询,通过使用JDBC提供的API,可以在查询之前知道表中的字段的个数和名字,步骤如下:1.连接对象con调用getMetaData()方法可以返回一个DatabaseMetaData对象,例如:DatabaseMetaDatametadata=con.getMetaData();2.Metadata对象再调用getColumns可以将表的字段信息以行列的形式存储在一个ResultSet对象中,例如:ResultSettableMessage=metadata.getColumns(null,null,“goods,null);3.tableMessage对象调用next方法使游标向下移动一行(游标的初始位置在第1行之前),然后tableMessage调用getXXX方法可以查看该行中列的信息,其中最重要的信息是第4列,该列上的信息为字段的名字。,例题2Example11_2.java,Query.java有一个负责查询数据库的Query类。在主类的main方法中,将数据源名和表名传递给Query类的实例.,2020/5/12,第13页,11.4.2控制游标,需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法先获得一个Statement对象:Statementstmt=con.createStatement(inttype,intconcurrency);然后根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSetre=stmt.executeQuery(SQL语句);滚动查询经常用到ResultSet的下述方法:publicbooleanprevious():将游标向上移动publicvoidbeforeFirst():将游标移动到结果集的初始位置。publicvoidafterLast():将游标移到结果集最后一行之后。publicvoidfirst():将游标移到结果集的第一行。publicvoidlast():将游标移到结果集的最后一行。publicbooleanisAfterLast():判断游标是否在最后一行之后。publicbooleanisBeforeFirst():判断游标是否在第一行之前publicbooleanifFirst():判断游标是否指向结果集的第一行。publicbooleanisLast():判断游标是否指向结果集的最后一行。publicintgetRow():得到当前游标所指行的行号.publicbooleanabsolute(introw):将游标移到参数row指定的行号。,2020/5/12,第14页,例子3中,在查询goods表时,首先将游标移动到最后一行,然后再获取最后一行的行号,以便获得表中的记录数目。程序倒序输出goods表中的记录,程序运行效果如图11.10。,2020/5/12,第15页,11.4.3条件查询,例子4中使用了例子2中Query类,分别按商品号和价格查询记录。主类将查询条件传递Query类的实例。程序运行效果如图11.11。,2020/5/12,第16页,11.4.4排序查询,可以在SQL语句中使用ORDERBY子语句对记录排序,例如,按price排序查询的SQL语句:SELECT*FROMgoodsORDERBYprice例子5中使用例子2中的Query类的实例分别按商品名称和价格排序goods表中的全部记录。程序运行效果如图11.12。,2020/5/12,第17页,11.4.5模糊查询,可以用SQL语句操作符LIKE进行模式般配,使用“%”代替零个或多个字符,用一个下划线“_”代替一个字符,用abc代替a、b、c中的任何一个。比如,下述语句查询商品名称中含有“T”或“宝”的记录:rs=sql.executeQuery(SELECT*FROMgoodsWHEREnameLIKET宝%);在下面的例子6中使用例子2中Query类的实例模糊查询表中的记录。程序运行效果如图11.13。,2020/5/12,第18页,11.5更新、添加与删除操作,Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作。更新、添加和删除记录的SQL语法分别是:UPDATESET=新值WHERE例:UPDATEgoodsSETprice=3009WHEREname=海尔电视机。INSERTINTO表(字段列表)VALUES(对应的具体的记录)或INSERTINTO表(VALUES(对应的具体的记录)例:INSERTINTOgoods(number,name,madeTime,price)VALUES(A009,手机,2010-12-20,3976)DELETEFROMWHERE例DELETEFROMgoodsWHEREnumber=B002例子7中,ModifyTable类能更新、插入和删除表中的记录,2020/5/12,第19页,11.6使用预处理语句,Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。,2020/5/12,第20页,11.6.1预处理语句优点,预处理不仅减轻了数据库的负担,而且也提高了访问数据库的速度。对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(Stringsql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该地层内部命令被数据库执行ResultSetexecuteQuery();booleanexecute();intexecuteUpdate();只要编译好了PreparedStatement对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。例子8中的PrepareQuery类的实例使用预处理语句,2020/5/12,第21页,11.6.2使用统配符,在对SQL进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统配符所表示的具体值即可。例如:sql=con.prepareStatement(SELECT*FROMemployeeWHEREsalary?);那么在sql对象执行之前,必须调用相应的方法设置统配符“?”代表的具体值,比如:sql.setFloat(1,2389);指定上述预处理SQL语句中统配符“?”代表的值是2389预处理语句设置统配符“?”的值的常用方法有:voidsetDate(intparameterIndex,Datex)voidsetDouble(intparameterIndex,doublex)voidsetFloat(intparameterIndex,floatx)voidsetInt(intparameterIndex,intx)voidsetLong(intparameterIndex,longx)voidsetString(intparameterIndex,Stringx)例子9中的AddRecord类的实例使用预处理语句,2020/5/12,第22页,11.7事务11.7.1事务及处理,事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。事务处理是保证数据库中数据完整性与一致性的重要机制。,2020/5/12,第23页,11.7.2JDBC事务处理步骤,1使用setAutoCommit(booleanautoCommit)方法和数据库建立一个连接对象后,比如con。那么con的提交模式是自动提交模式,为了能进行事务处理,必须关闭con的这个默认设置。con.setAutoCommit(false);2使用commit()方法连接对象con调用commit()方法就是让事务中的SQL语句全部生效。3使用rollback()方法con调用rollback()方法的作用是撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作,即撤消引起数据发生变化的SQL语句操作,将数据库中的数据恢复到commi()方法执行之前的状态。例子10使用了事务处理将goods表中number字段是“A001”的price的值减少n,并将减少的n增加到字段是“B002”的price上.,2020/5/12,第24页,11.8批处理,程序在和数据库交互时,可能需要执行多个对表进行更新操作的SQL语句,这就需要Statement对象反复执行execute()方法。JDBC为Statement对象提供了批处理功能,即Statement对象调用executeBatch()方法可以一次执行多个SQL语句,只要事先让Statement对象调用addBatch(Stringsql)

温馨提示

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

评论

0/150

提交评论