Java 2实用教程第4版_第11章_JDBC数据库操作.ppt

上传人:177277 文档编号:9370503 上传时间:2023-03-19 格式:PPT 页数:28 大小:454KB
下载 相关 举报
Java 2实用教程第4版_第11章_JDBC数据库操作.ppt_第1页
第1页 / 共28页
Java 2实用教程第4版_第11章_JDBC数据库操作.ppt_第2页
第2页 / 共28页
Java 2实用教程第4版_第11章_JDBC数据库操作.ppt_第3页
第3页 / 共28页
Java 2实用教程第4版_第11章_JDBC数据库操作.ppt_第4页
第4页 / 共28页
Java 2实用教程第4版_第11章_JDBC数据库操作.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、注意:开始用功了注意:开始用功了!1111Java2实用教程实用教程(第第4版版)第第11章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平JDBCJDBC数据库操作数据库操作 导读导读主要内容主要内容JDBC连接数据库连接数据库查询操作查询操作更新、添加与删除操作更新、添加与删除操作使用预处理语句使用预处理语句事务事务批处理批处理11.1 Microsoft Access Microsoft Access 数据库管理系统数据库管理系统 11.1.1 建立数据库建立数据库 建立一个名字为建立一个名字为shopshop的数据库。的数据库。操作步骤如下:操作步

2、骤如下:单击单击“开始开始”“”“所有程所有程序序”“”“Microsoft Access”Microsoft Access”,在 新 建 数 据 库 界 面 选 择在 新 建 数 据 库 界 面 选 择“空空AccessAccess数据库数据库”,然后命名、保,然后命名、保存新建的数据库,在这里我们命存新建的数据库,在这里我们命名 的 数 据 库 是名 的 数 据 库 是 s h o ps h o p,保 存 在保 存 在C:ch11C:ch11中。中。11.1.2 创建表创建表 在在shopshop数据库中创建名字为数据库中创建名字为goodsgoods的表。在的表。在shopshop管理

3、管理的的“表表”的界面上选择的界面上选择“使用设计器创建表使用设计器创建表”,然后单,然后单击界面上的击界面上的“设计设计”菜单,将出现相应的建表界面,我菜单,将出现相应的建表界面,我们建立的表是们建立的表是goodsgoods,该表的字段该表的字段(属性属性)为:为:number(number(文本文本)name(name(文本文本)madeTime(madeTime(日期日期)price(price(数字,双精度数字,双精度)。在在shop管理的管理的“表表”的界面上,用鼠标双击已创建的界面上,用鼠标双击已创建的表可以为该表添加记录的表可以为该表添加记录。11.2 JDBCJDBC Jav

4、a提供了专门用于操作数据库的API,即JDBC(Java DataBase Connection)。JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库(如图11.3).程序经常使用JDBC进行如下的操作:(1)与一个数据库建立连接。与一个数据库建立连接。(2)向数据库发送向数据库发送SQL语句。语句。(3)处理数据库返回的结果。处理数据库返回的结果。11.3 连接数据库连接数据库 连接方式的选择连接方式的选择 和数据库建立连接的常用两种方式是:建立和数据库建立连接的常用两种方式是:建立JDBCODBCJDBC

5、ODBC桥接桥接器和加载纯器和加载纯JavaJava数据库驱动程序。使用数据库驱动程序。使用JDBCODBCJDBCODBC桥接器方式的桥接器方式的机制是,应用程序只需建立机制是,应用程序只需建立JDBCJDBC和和ODBCODBC之间的连接,即所谓的建之间的连接,即所谓的建立立JDBCODBCJDBCODBC桥接器,而和数据库的连接由桥接器,而和数据库的连接由ODBCODBC去完成。去完成。使用使用JDBCODBC桥接桥接器连接数据库的器连接数据库的3个步骤个步骤(1)建立JDBC-ODBC桥接器(2)建ODBC数据源(3)和ODBC数据源建立连接11.3.2 建立建立JDBC-ODBCJD

6、BC-ODBC桥接器桥接器 JDBC使用使用java.lang包中的包中的Class类建立类建立JDBC-ODBC桥接器。建立桥接器时可能发生异常,必须捕获这个异桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:常,建立桥接器的代码是:try);catch(ClassNotFoundException e)System.out.println(e);11.3.3 ODBCODBC数据源数据源 1 1创建、修改或删除数据源创建、修改或删除数据源 选择选择“控制面板控制面板”“”“管理工具管理工具”“”“ODBCODBC数据源数据源”(某些(某些window/xpwindow

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

8、数据源选择驱动程序 因为要访问因为要访问AccessAccess数据库数据库,选择选择Microsoft Acess DriverMicrosoft Acess Driver(*.mdb.mdb)。3 3数据源名称及对应数据库的所在位置数据源名称及对应数据库的所在位置 在在名称栏名称栏里为数据源起一个自己喜欢的名字,这里我们起的里为数据源起一个自己喜欢的名字,这里我们起的名字是名字是myData。这个数据源就是指某个数据库。在这个数据源就是指某个数据库。在“数据库选数据库选择择”栏中选择一个数据库,这里我们选择的是栏中选择一个数据库,这里我们选择的是C:ch11下的下的shop.mdb数据库。

9、数据库。11.3.4 建立连接建立连接 编写连接数据库代码不会出现数据库的名称,只能出现数据编写连接数据库代码不会出现数据库的名称,只能出现数据源的名字。源的名字。首先使用首先使用java.sqljava.sql包中的包中的ConnectionConnection类类声明一个对象,然后再声明一个对象,然后再使用类使用类DriverManagerDriverManager调用它的静态方法调用它的静态方法getConnectiongetConnection创建这个创建这个连接对象,连接对象,建立连接时应捕获建立连接时应捕获SQLException异常异常:try Connection con=Dr

10、iverManager.getConnection(“jdbc:odbc:数据源名字数据源名字”,login name,password);catch(SQLException e)例子例子1(连接到数据源连接到数据源myData,查询查询goods表表)11.4 查询操作查询操作 对一个数据库中表进行查询操作的具体步骤如下。对一个数据库中表进行查询操作的具体步骤如下。1 1向数据库发送向数据库发送SQLSQL查询语句查询语句 try Statement sql=con.createStatement();catch(SQLException e)2处理查询结果处理查询结果 ResultSet

11、 rs=sql.executeQuery(SELECT*FROM employee);表表11.1给了出了给了出了ResultSet对象的若干方法。对象的若干方法。11.4.1 顺序查询顺序查询 通过使用通过使用JDBC提供的提供的API,可以在查询之前知道表中的字段可以在查询之前知道表中的字段的个数和名字,步骤如下:的个数和名字,步骤如下:1.连接对象con调用getMetaData()方法可以返回一个DatabaseMetaData对象,例如:DatabaseMetaData metadata=con.getMetaData();DatabaseMetaData metadata=con.

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

13、是第4列,该列上的信息为字段的名字。例题例题2 Example11_2.java,Query.java 有一个负责查询数据库的的Query类类。在主类的main方法中,将数据源名和表名传递给Query类的实例.11.4.2 控制游标控制游标 需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法先获得一个集,需使用下述方法先获得一个Statement对象:对象:Stat

14、ement stmt=con.createStatement(int type,int concurrency);然后根据参数的然后根据参数的type、concurrency的取值情况的取值情况,stmt返回相应类型的结果集:返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句语句);滚动查询经常用到滚动查询经常用到ResultSet的下述方法:的下述方法:public boolean previous()public boolean previous():将游标向上移动 public void beforeFirst()public void bef

15、oreFirst():将游标移动到结果集的初始位置。public void afterLast()public void afterLast():将游标移到结果集最后一行之后。public void first()public void first():将游标移到结果集的第一行。public void last()public void last():将游标移到结果集的最后一行。public boolean isAfterLast()public boolean isAfterLast():判断游标是否在最后一行之后。public boolean isBeforeFirst()public b

16、oolean isBeforeFirst():判断游标是否在第一行之前 public boolean ifFirst()public boolean ifFirst():判断游标是否指向结果集的第一行。public boolean isLast()public boolean isLast():判断游标是否指向结果集的最后一行。public int getRow()public int getRow():得到当前游标所指行的行号.public boolean absolute(int row)public boolean absolute(int row):将游标移到参数row指定的行号。例子

17、例子3中,在查询goods表时,首先将游标移动到最后一行,然后再获取最后一行的行号,以便获得表中的记录数目。程序倒序输出goods表中的记录,程序运行效果如图11.10。11.4.3 条件查询条件查询 例子例子4 4中使用了例子中使用了例子2 2中中QueryQuery类,分别按商品号和类,分别按商品号和价格查询记录。主类将查询条件传递价格查询记录。主类将查询条件传递QueryQuery类的实例。类的实例。程序运行效果如图程序运行效果如图11.1111.11。11.4.4 排序查询排序查询 可以在可以在SQLSQL语句中使用语句中使用ORDER BYORDER BY子语句对记录排序,子语句对记

18、录排序,例如,按例如,按priceprice排序查询的排序查询的SQLSQL语句:语句:SELECT SELECT*FROM goods ORDER BY price FROM goods ORDER BY price 例子例子5 5中使用例子中使用例子2 2中的中的QueryQuery类的实例分别按商品名类的实例分别按商品名称和价格排序称和价格排序goodsgoods表中的全部记录。程序运行效果如表中的全部记录。程序运行效果如图图11.1211.12。11.4.5 模糊查询模糊查询 可以用可以用SQL语句操作符语句操作符LIKE进行模式般配,使用进行模式般配,使用“%”代替代替零个或多个字符

19、,用一个下划线零个或多个字符,用一个下划线“_”代替一个字符,用代替一个字符,用abc代代替替a、b、c中的任何一个。比如,下述语句查询商品名称中含有中的任何一个。比如,下述语句查询商品名称中含有“T”或或“宝宝”的记录:的记录:rs=sql.executeQuery(SELECT*FROM goods WHERE name LIKE T宝宝%);在下面的在下面的例子例子6中使用例子中使用例子2中中Query类类的实例模糊查询表中的的实例模糊查询表中的记录。程序运行效果如图记录。程序运行效果如图11.13。11.5 更新、添加与删除操作更新、添加与删除操作 Statement Statemen

20、t对象对象调用方法:调用方法:public int executeUpdate(String sqlStatement);通过参数通过参数sqlStatementsqlStatement指定的方式实现对数据库表中记录的更新、添加和删指定的方式实现对数据库表中记录的更新、添加和删除操作。除操作。更新、添加和删除记录的更新、添加和删除记录的SQLSQL语法分别是:语法分别是:UPDATE SET =新值新值 WHERE 例:例:UPDATE goods SET price=3009 WHERE name=海尔电视机海尔电视机。INSERT INTO 表表(字段列表字段列表)VALUES(对应的具体

21、的记录)或对应的具体的记录)或INSERT INTO 表表(VALUES(对应的具体的记录)对应的具体的记录)例:例:INSERT INTO goods(number,name,madeTime,price)VALUES(A009,手机手机,2010-12-20,3976)DELETE FROM WHERE 例例 DELETE FROM goods WHERE number=B002 例子例子7中,中,ModifyTable类类能更新、插入和删除表中的记录能更新、插入和删除表中的记录 11.6 使用预处理语句使用预处理语句 Java提供了更高效率的数据库操作机制,就是PreparedState

22、mentPreparedStatement对象对象,该对象被习惯地称作预处理语句对象。11.6.1 预处理语句优点预处理语句优点 预处理预处理不仅减轻了数据库的负担,而且也提高了访问数据库的速度。对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象对象中,那么该对象调用下列方法都可以使得该地层内部命令被数据库执行 ResultSet executeQuery();bo

23、olean execute();int executeUpdate();只要编译好了PreparedStatement对象,那么该对象可以随时地执行上述方法,显然提高了访问数据库的速度。例子例子8中的中的PrepareQuery类类的实例使用预处理语句的实例使用预处理语句 11.6.2 使用统配符使用统配符 在对SQL进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统配符所表示的具体值即可。例如:sql=con.prepareStatement(SELECT*FROM employee WHERE salary?);那么在sql对象执行之前,必须调用相应的方法设置

24、统配符“?”代表的具体值,比如:sql.setFloat(1,2389);指定上述预处理SQL语句中统配符“?”代表的值是2389 预处理语句设置统配符“?”的值的常用方法有:void setDate(int parameterIndex,Date x)void setDouble(int parameterIndex,double x)void setFloat(int parameterIndex,float x)void setInt(int parameterIndex,int x)void setLong(int parameterIndex,long x)void setStrin

25、g(int parameterIndex,String x)例子例子9中的中的AddRecord类类的实例使用预处理语句的实例使用预处理语句11.7 事务事务 11.7.1 事务及处理事务及处理 事务由一组事务由一组SQLSQL语句组成,所谓事务处理是指:语句组成,所谓事务处理是指:应用程序保证事务中的应用程序保证事务中的SQLSQL语句要么全部都执行,语句要么全部都执行,要么一个都不执行。要么一个都不执行。事务处理是保证数据库中数据完整性与一致事务处理是保证数据库中数据完整性与一致性的重要机制。性的重要机制。11.7.2 JDBCJDBC事务处理步骤事务处理步骤 1 1使用setAutoCo

26、mmit(boolean autoCommit)方法 和数据库建立一个连接对象后,比如con。那么con的提交模式是自动提交模式,为了能进行事务处理,必须关闭con的这个默认设置。con.setAutoCommit(false);con.setAutoCommit(false);2 2使用commit()方法 连接对象con调用commit()commit()方法就是让事务中的SQL语句全部生效。3 3使用rollback()方法 con调用rollback()rollback()方法的作用是撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作,即撤消引起数据发生变化的SQL

27、语句操作,将数据库中的数据恢复到commi()commi()方法执行之前的状态。例子例子1010使用了事务处理将使用了事务处理将goodsgoods表中表中numbernumber字段是字段是“A001”A001”的的priceprice的值减少的值减少n n,并将减少的并将减少的n n增加到字段是增加到字段是“B002”B002”的的priceprice上上.11.8 批处理批处理 程序在和数据库交互时,可能需要执行多个对表进行更新操程序在和数据库交互时,可能需要执行多个对表进行更新操作的作的SQLSQL语句,这就需要语句,这就需要StatementStatement对象反复执行对象反复执行

28、execute()execute()方法。方法。JDBC JDBC为为StatementStatement对象提供了批处理功能,即对象提供了批处理功能,即StatementStatement对象对象调用调用executeBatch()executeBatch()方法可以一次执行多个方法可以一次执行多个SQLSQL语句,只要事先语句,只要事先让让StatementStatement对象调用对象调用addBatch(String sql)addBatch(String sql)方法将要执行的方法将要执行的SQLSQL语句添加到该对象中即可。语句添加到该对象中即可。例子例子11中的中的Stateme

29、nt对象调用对象调用executeBatch()方法对多个方法对多个SQL语句进行了批处理,并将批处理作为一个事务。语句进行了批处理,并将批处理作为一个事务。11.9 CachedRowSetImplCachedRowSetImpl类类 包提供了CachedRowSetImplCachedRowSetImpl类,该类实现了CachedRowSet接口。CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connnection对象,这意味着一旦把ResultSet对象中的数据保存到CachedRowSetImpl对象中后,就可

30、以关闭和数据库的连接。将ResultSet对象rs中的数据保存到CachedRowSetImpl对象rowSet中的代码如下:rowSet.populate(rs);rowSet.populate(rs);例子例子12(Example11_12.java,CachedQuery.java)使用CachedRowSetImpl对象改进了例子2中的Query类11.10 应用举例应用举例 1.1.标准化考试标准化考试 2.2.用表格显示数据库中的记录用表格显示数据库中的记录 例子14(Example11_14.java,Query.java)使用表格显示数据库表中的记录,效果如图11.16。例子13(Example11_13.javaExample11_13.java,ReadExaminationPaper.java )基于数据库,设计一个标准化考试,效果如图11.14。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 管理/人力资源 > 物业管理

一课资料网交流QQ群:678591818  侵权投诉客服QQ:2935355895 copyright@ 2020-2024 www.ekdoc.com网站版权所有

经营许可证编号:鄂ICP备20004875号