Java2实用教程第4版_第11章_JDBC数据库操作_第1页
Java2实用教程第4版_第11章_JDBC数据库操作_第2页
Java2实用教程第4版_第11章_JDBC数据库操作_第3页
Java2实用教程第4版_第11章_JDBC数据库操作_第4页
Java2实用教程第4版_第11章_JDBC数据库操作_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、第 1 页注意:开始用功了注意:开始用功了!第 2 页Java2实用教程实用教程(第第4版版) 第第11章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平JDBCJDBC数据库操作数据库操作 第 3 页导读导读主要内容主要内容JDBC连接数据库连接数据库查询操作查询操作更新、添加与删除操作更新、添加与删除操作使用预处理语句使用预处理语句事务事务批处理批处理第 4 页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中。中。 第 5 页11.1.2 创建表创建表 在在shopshop数据库中创建名字为数据库中创建名字为

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

4、双击已创建的表可以为该表添加记录的表可以为该表添加记录。第 6 页11.2 JDBCJDBC Java提供了专门用于操作数据库的API,即JDBC (Java DataBase Connection) 。JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库(如图11.3).程序经常使用JDBC进行如下的操作 : (1)与一个数据库建立连接。与一个数据库建立连接。 (2)向数据库发送向数据库发送SQL语句。语句。 (3)处理数据库返回的结果。处理数据库返回的结果。第 7 页11.3 连接数据库连接数据库 11.3

5、.1 连接方式的选择连接方式的选择 和数据库建立连接的常用两种方式是:建立和数据库建立连接的常用两种方式是:建立JDBCODBCJDBCODBC桥接桥接器和加载纯器和加载纯JavaJava数据库驱动程序。使用数据库驱动程序。使用JDBCODBCJDBCODBC桥接器方式的桥接器方式的机制是,应用程序只需建立机制是,应用程序只需建立JDBCJDBC和和ODBCODBC之间的连接,即所谓的建之间的连接,即所谓的建立立JDBCODBCJDBCODBC桥接器,而和数据库的连接由桥接器,而和数据库的连接由ODBCODBC去完成。去完成。 使用使用JDBCODBC桥接桥接器连接数据库的器连接数据库的3个步

6、骤个步骤(1)建立JDBC-ODBC桥接器(2)建ODBC数据源(3)和ODBC数据源建立连接第 8 页11.3.2 建立建立JDBC-ODBCJDBC-ODBC桥接器桥接器 JDBC使用使用java.lang包中的包中的Class类建立类建立JDBC-ODBC桥接器。建立桥接器时可能发生异常,必须捕获这个异桥接器。建立桥接器时可能发生异常,必须捕获这个异常,建立桥接器的代码是:常,建立桥接器的代码是:try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e) System.out.printl

7、n(e); 第 9 页11.3.3 ODBCODBC数据源数据源 1 1创建、修改或删除数据源创建、修改或删除数据源 选择选择“控制面板控制面板”“”“管理工具管理工具”“”“ODBCODBC数据源数据源”(某些(某些window/window/xpxp系统,需选择系统,需选择“控制面板控制面板”“”“性能和维护性能和维护”“”“管管理工具理工具”“”“ODBCODBC数据源数据源”)。)。 双击双击ODBCODBC数据源图标,出现的界面显示了用户已有的数据源的数据源图标,出现的界面显示了用户已有的数据源的名称。选择名称。选择“系统系统DSN”DSN”或或“用户用户DSN”DSN”,单击单击“

8、添加添加”按钮,可按钮,可以创建新的数据源;单击以创建新的数据源;单击“配置配置”按钮,可以重新配置已有的数按钮,可以重新配置已有的数据源;单击据源;单击“删除删除”按钮,可以删除已有的数据源。按钮,可以删除已有的数据源。2 2为数据源选择驱动程序为数据源选择驱动程序 因为要访问因为要访问AccessAccess数据库数据库, ,选择选择Microsoft Microsoft AcessAcess Driver Driver(* *. .mdbmdb)。3 3数据源名称及对应数据库的所在位置数据源名称及对应数据库的所在位置 在在名称栏名称栏里为数据源起一个自己喜欢的名字,这里我们起的里为数据源

9、起一个自己喜欢的名字,这里我们起的名字是名字是myData 。这个数据源就是指某个数据库。在这个数据源就是指某个数据库。在“数据库选数据库选择择”栏中选择一个数据库,这里我们选择的是栏中选择一个数据库,这里我们选择的是C:ch11下的下的shop.mdb数据库。数据库。 第 10 页11.3.4 建立连接建立连接 编写连接数据库代码不会出现数据库的名称,只能出现数据编写连接数据库代码不会出现数据库的名称,只能出现数据源的名字。源的名字。 首先使用首先使用java.sqljava.sql包中的包中的ConnectionConnection类类声明一个对象,然后再声明一个对象,然后再使用类使用类D

10、riverManagerDriverManager调用它的静态方法调用它的静态方法getConnectiongetConnection创建这个创建这个连接对象,连接对象,建立连接时应捕获建立连接时应捕获SQLException异常异常 :try Connection con=DriverManager.getConnection(“jdbc:odbc:数据源名字数据源名字”, login name, password ); catch(SQLException e) 例子例子1 (连接到数据源连接到数据源myData,查询查询goods表表 )第 11 页11.4 查询操作查询操作 对一个数据

11、库中表进行查询操作的具体步骤如下。对一个数据库中表进行查询操作的具体步骤如下。 1 1向数据库发送向数据库发送SQLSQL查询语句查询语句 try Statement sql=con.createStatement(); catch(SQLException e ) 2处理查询结果处理查询结果 ResultSet rs=sql.executeQuery(SELECT * FROM employee); 表表11.1给了出了给了出了ResultSet对象的若干方法。对象的若干方法。 第 12 页11.4.1 顺序查询顺序查询 通过使用通过使用JDBC提供的提供的API,可以在查询之前知道表中的字

12、段可以在查询之前知道表中的字段的个数和名字,步骤如下:的个数和名字,步骤如下: 1.连接对象con调用getMetaData()方法可以返回一个DatabaseMetaData对象,例如: DatabaseMetaDataDatabaseMetaData metadata= metadata=con.getMetaDatacon.getMetaData();(); 2. Metadata对象再调用getColumns可以将表的字段信息以行列的形式存储在一个ResultSet对象中,例如: ResultSetResultSet tableMessagetableMessage= =metadat

13、a.getColumns(null,null,“goods,nullmetadata.getColumns(null,null,“goods,null);); 3. tableMessage对象调用next方法使游标向下移动一行(游标的初始位置在第1行之前),然后tableMessage调用getXXX方法可以查看该行中列的信息,其中最重要的信息是第4列,该列上的信息为字段的名字。 例题例题2 Example11_2.java , Query.java 有一个负责查询数据库的的Query类类。在主类的main方法中,将数据源名和表名传递给Query类的实例 .第 13 页11.4.2 控制游标

14、控制游标 需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,需使用下述方法先获得一个集,需使用下述方法先获得一个Statement对象:对象:Statement stmt=con.createStatement(int type ,int concurrency); 然后根据参数的然后根据参数的type、concurrency的取值情况的取值情况,stmt返回相应类型的结果集:返

15、回相应类型的结果集: ResultSet re=stmt.executeQuery(SQL语句语句); 滚动查询经常用到滚动查询经常用到ResultSet的下述方法:的下述方法: public public booleanboolean previous() previous():将游标向上移动 public void public void beforeFirstbeforeFirst()():将游标移动到结果集的初始位置。 public void public void afterLastafterLast()():将游标移到结果集最后一行之后。 public void first() p

16、ublic void first():将游标移到结果集的第一行。 public void last() public void last():将游标移到结果集的最后一行。 public public booleanboolean isAfterLastisAfterLast()():判断游标是否在最后一行之后。 public public booleanboolean isBeforeFirstisBeforeFirst()():判断游标是否在第一行之前 public public booleanboolean ifFirstifFirst()():判断游标是否指向结果集的第一行。 publi

17、c public booleanboolean isLastisLast()():判断游标是否指向结果集的最后一行。 public public intint getRowgetRow()():得到当前游标所指行的行号. public public booleanboolean absolute(intabsolute(int row) row):将游标移到参数row指定的行号。第 14 页 例子例子3中,在查询goods表时,首先将游标移动到最后一行,然后再获取最后一行的行号,以便获得表中的记录数目。程序倒序输出goods表中的记录,程序运行效果如图11.10。第 15 页11.4.3 条件

18、查询条件查询 例子例子4 4中使用了例子中使用了例子2 2中中QueryQuery类,分别按商品号和类,分别按商品号和价格查询记录。主类将查询条件传递价格查询记录。主类将查询条件传递QueryQuery类的实例。类的实例。程序运行效果如图程序运行效果如图11.1111.11。 第 16 页11.4.4 排序查询排序查询 可以在可以在SQLSQL语句中使用语句中使用ORDER BYORDER BY子语句对记录排序,子语句对记录排序,例如,按例如,按priceprice排序查询的排序查询的SQLSQL语句:语句:SELECT SELECT * * FROM goods ORDER BY price

19、 FROM goods ORDER BY price 例子例子5 5中使用例子中使用例子2 2中的中的QueryQuery类的实例分别按商品名类的实例分别按商品名称和价格排序称和价格排序goodsgoods表中的全部记录。程序运行效果如表中的全部记录。程序运行效果如图图11.1211.12。 第 17 页11.4.5 模糊查询模糊查询 可以用可以用SQL语句操作符语句操作符LIKE进行模式般配,使用进行模式般配,使用“%”代替代替零个或多个字符,用一个下划线零个或多个字符,用一个下划线“_”代替一个字符,用代替一个字符,用abc代代替替a、b、c中的任何一个。比如,下述语句查询商品名称中含有中

20、的任何一个。比如,下述语句查询商品名称中含有“T”或或“宝宝”的记录:的记录: rs = sql.executeQuery(SELECT * FROM goods WHERE name LIKE T宝宝% ); 在下面的在下面的例子例子6中使用例子中使用例子2中中Query类类的实例模糊查询表中的的实例模糊查询表中的记录。程序运行效果如图记录。程序运行效果如图11.13。第 18 页11.5 更新、添加与删除操作更新、添加与删除操作 Statement Statement对象对象调用方法:调用方法: public int executeUpdate(String sqlStatement);通

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

22、) 例:例: INSERT INTO goods(number,name,madeTime,price) VALUES (A009,手机手机, 2010-12-20,3976) DELETE FROM WHERE 例例 DELETE FROM goods WHERE number = B002 例子例子7中,中,ModifyTable类类能能更新、插入和删除表中的记录更新、插入和删除表中的记录 第 19 页11.6 使用预处理语句使用预处理语句 Java提供了更高效率的数据库操作机制,就是PreparedStatementPreparedStatement对象对象,该对象被习惯地称作预处理语句

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

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

25、 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 setString(int pa

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

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

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

温馨提示

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

评论

0/150

提交评论