《面向对象程序设计项目教程》课件 项目14 实现MySQL数据库连接_第1页
《面向对象程序设计项目教程》课件 项目14 实现MySQL数据库连接_第2页
《面向对象程序设计项目教程》课件 项目14 实现MySQL数据库连接_第3页
《面向对象程序设计项目教程》课件 项目14 实现MySQL数据库连接_第4页
《面向对象程序设计项目教程》课件 项目14 实现MySQL数据库连接_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计项目教程本章学习目标:●

了解JDBC概念以及驱动类型●

掌握使用JDBC连接MySQL数据库的基本步骤●

掌握数据库环境的搭建●

掌握使用JDBC访问数据库的步骤●

掌握使用JavaAPI操作数据库●

掌握数据库事务的使用项目14实现MySQL数据库连接任务1part认识JDBCJDBC(JavaDatabaseConnectivity,Java数据库连接)是一种执行SQL语句的JavaAPI。程序可以通过JDBCAPI连接到关系数据库,并使用SQL结构化语言来完成对数据库的增、删、改、查等操作。JDBC驱动示意图如图14.1所示。1.1JDBC简介JDBC应用程序可以对数据库进行访问和操作,JDBC访问数据库时主要完成以下工作:

●建立与数据库的连接;

●执行SQL语句;

●获取执行结果。

数据库驱动程序是JDBC程序和数据库之间的转换层,数据库驱动程序负责将JDBC调用映射成特定的数据库调用,JDBC访问示意图如图14.2所示。1.2JDBC驱动JDBC驱动程序有以下4种类型:

●JDBC-ODBC桥:是最早实现的JDBC驱动程序,主要目的是快速推广JDBC。ODBC(OpenDatabaseConnectivity,开放数据库连接)是通过一组通用的API访问不同的数据库管理系统,也需要各数据库厂商提供相应的驱动程序,而ODBC则对这些驱动程序进行管理。

●本地API驱动:直接将JDBCAPI映射成数据库特定的客户端API,包含特定的数据库本地代码,用于访问特定数据库的客户端。●网络协议驱动:将JDBC调用翻译成中间件供应商的协议,然后再由中间件服务器翻译成数据库访问协议。●本地协议驱动:是纯Java编写的,可以直接连接到数据库。JDBC驱动14.1.2JDBCAPI提供了一组用于与数据库进行通信的接口和类,这些接口和类都定义在java.sql包中,常用的接口和类如表14-1所示。1.3JDBC

APIJDBC

API1.DriverManager类DriverManager是数据库驱动管理类,用于管理一组JDBC驱动程序的基本服务。应用程序和数据库之间可以通过DriverManager建立连接,其常用的静态方法如表14-2所示。JDBC

API1.32.Connection接口Connection接口用于连接数据库,每个Connection对象代表一个数据库连接会话,要想访问数据库,必须先获得数据库连接。一个应用程序可与单个数据库建立一个或多个连接,也可以与多个数据库建立连接。Connection接口中常用的方法如表14-3所示。JDBC

API1.33.Statement接口Statement接口一般用于执行SQL语句。在JDBC中要执行SQL查询语句的方式有一般查询(Statement)、参数查询(PreparedStatement)和存储过程(CallableStatement)三种方式。Connection接口中提供的createStatement()、prepareStatement()和prepareCall()方法分别返回一个Statement对象,PreparedStatement对象和CallableStatement对象。Statement、PreparedStatement和CallableStatement三个接口具有继承关系,其中PreparedStatement是Statement的子接口,而CallableStatement又是PreparedStatement的子接口。Statement接口的主要功能是将SQL语句传送给数据库,并返回SQL语句的执行结果。Statement提交的SQL语句是静态的,不需要接收任何参数,SQL语句可以包含以下三种类型的语句:

●SELECT查询语句;

●DML语句,如INSERT、UPDATE或DELETE;

●DDL语句,如CREATETABLE和DROPTABLE。JDBC

API1.3Statement接口中常用的方法及功能如表14-4所示。JDBC

API1.34.ResultSet接口ResultSet接口用于封装结果集对象,该对象包含访问查询结果的方法。使用Statement中的executeQuery()方法可以返回一个ResultSet结果集的对象,该对象封装了所有符合查询条件的记录。ResultSet接口中常用的方法如表14-5所示。JDBC

API1.3ResultSet对象具有指向当前数据行的游标。最初游标位于第一行之前,每调用一次next()方法,游标会自动向下移一行,从而可以从上到下依次获取所有数据行。常用的SQL数据类型和Java数据类型之间的对应关系如表14-6所示。JDBC

API1.3任务2part数据库环境搭建2.1创建数据库表

本章JDBC数据库访问基于MySQL数据库,因此所有的代码及环境都是基于MySQL数据库的。在进行数据库访问操作之前,需要先创建数据库和表并录入测试数据。在root用户下创建student数据库,并在该库下创建t_user表,并添加测试数据,其SQL代码如下所示。创建数据库表创建数据库表

【代码14.1】student.sqlCREATEDATABASE`student`;CREATETABLE`t_user`(`Id`int(11)NOTNULLAUTO_INCREMENT,`sid`varchar(20)DEFAULTNULL,`name`varchar(20)DEFAULTNULL,`password`varchar(20)DEFAULTNULL,`sex`varchar(20)DEFAULTNULL,`major`varchar(20)DEFAULTNULL,`hobby`varchar(20)DEFAULTNULL,PRIMARYKEY(`Id`));#添加测试数据INSERTINTO`t_user`VALUES(19,'159110909','向守超','111','男','物联网工程','篮球足球'),(20,'159110901','张恒','123','男','物联网工程','篮球足球');

创建完库student、表t_user和添加完数据以后,在MySQL-Front图形化界面工具中打开,其表中的数据如图14.3所示。2.2设置MySQL驱动类Java项目在访问MySQL数据库时,需要在项目中设置MySQL驱动类路径,即将MySQL数据库所提供的JDBC驱动程序(mysql-connector-java-5.1.12-bin0)导入到工程中。mysql-connector-java-5.1.12-bin.jar驱动文件可在网络上直接下载,当然也可以下载其他的版本。

配置MySQL数据库驱动程序有两种方法:一种方法是将驱动程序配置到CLASSPATH中,与配置JDK的环境变量类似,这种方法的配置将对本机中所有创建的项目起作用,但程序员一般不用这种方法;第二种方法是在基础开发工具Eclipse中选中项目,右键单击,在弹出的快捷菜单中选择“Properties→JavaBuildPath→libraries→AddExternalJARs…”命令,在弹出的对话框中,选择mysql-connector-java-5.1.12-bin.jar文件。如图14.4所示。设置MySQL驱动类任务3part访问数据库使用JDBC访问数据库的步骤:●加载数据库驱动;●建立数据连接;●创建Statement对象;●执行SQL语句;●访问结果集;数据库访问本节概述3.1加载数据库驱动

通常使用Class类的forName()静态方法来加载数据库的驱动,其语法格式如下所示://加载驱动Class.forName(数据库驱动类名);

例如:Class.forName("com.mysql.jdbc.Driver");//加载MySQL驱动

需要注意的是:不同的数据库其数据库驱动类是不同的,例如:Oracle数据库的驱动类是oracle.jdbc.driver.OracleDriver,而MySQL的数据库驱动类是com.mysql.jdbc.Driver。数据库厂商在提供数据库驱动(通常是一个或几个jar文件)时,会有相应的文档说明。加载数据库驱动3.2建立数据库连接

在使用JDBC操作数据库之前,需要先创建一个数据库连接,使用DriverManager类的getConnection()静态方法来获取数据库连接对象,其语法格式如下所示:DriverManager.getConnection(Stringurl,Stringuser,Stringpass);

其中,getConnection()方法有三个参数,具体如下:

●url:数据库连接字符串,遵循的格式是“jdbc:驱动:其他”,不同的数据库连接的URL也有所不同。

●user:连接数据库的用户名;

●pass:密码。建立数据库连接3.3创建Statement对象

对数据库进行操作或访问时,需要使用SQL语句。在Java语言中,SQL语句是通过Statement对象进行封装后,发送给数据库。Statement对象不是通过Statement类直接创建的,而是通过Connection对象所提供的方法来创建各种Statement对象。

通过Connection对象来获得Statement的方法有以下三种:

●createStatement()方法:创建一个基本的Statement对象;

●prepareStatement(Stringsql)方法:根据参数化的SQL语句创建一个预编译的PreparedStatement对象;

●prepareCall(Stringsql)方法:根据SQL语句来创建一个CallableStatement对象,用于调用数据库的存储过程。

例如://创建Statment对象Statementstmt=conn.createStatement();创建Statement对象3.4执行SQL语句

获取Statement对象之后,就可以调用该对象的不同方法来执行SQL语句。所有的Statement都有三种执行SQL语句的方法,具体使用哪一种方法由SQL语句产生的结果来决定:

●executeQuery()方法:只能执行查询语句,例如SELECT语句,用于产生单个结果集;

●executeUpdate()和executeLargeUpdate()方法:用于执行DML和DDL语句,执行DML(INSERT、UPDATE或DELETE语句)时返回受SQL语句所影响的行数(整数值),而执行DDL语句(CREATETABLE、DROPTABLE等)返回值总为0;●execute()方法:可以执行任何SQL语句,此方法比较特殊,也比较麻烦,返回结果为多个结果集、多个更新计数或二者的组合。通常不建议使用该方法,只有在不知道执行SQL语句会产生什么结果或可能有多种类型结果的情况下才会使用。如果SQL语句运行后能产生结果集,Statement对象则将结果集封装成ResultSet对象并返回。下述代码调用Statement对象的executeQuery()方法来执行SQL查询语句,并返回一个ResultSet结果集对象。例如:执行SQL查询语句并返回结果集ResultSetrs=smt.executeQuery("SELECT*FROMt_user");3.5访问结果集SQL的查询结果使用ResultSet封装,ResultSet结果集包含了满足SQL查询条件的所有的行,使用getXXX()方法对结果集中的数据进行访问。

当使用getXXX()方法访问结果集中的数据时,可通过列索引或列名来获取游标所指行中的列数据,其语法格式如下;getXXX(列索引)

或getXXX(“列名”)

例如:循环输出结果集中第三列数据。while(rs.next()){ System.out.println(rs.getString(3));}

或while(rs.next()){ System.out.println(rs.getString("name"));}访问结果集

需要注意的是:在使用getXXX()方法来获得数据库表中的对应字段的数据时,尽可能使用序列号参数,这样可以提高效率。除Blob类型外,其他任意类型的字段都可以通过getString()方法来获取,因为所有数据类型都可以自动转换成字符串。

当数据库操作执行完毕或退出应用前,需将数据库访问过程中建立的对象按顺序关闭,防止系统资源浪费。关闭的次序是:

①关闭结果集:rs.close();

②关闭Statement对象:stmt.close();

③关闭连接:conn.close();

3.5任务4part操作数据库4.1execute()方法Statement接口的execute()方法几乎可以执行任何SQL语句,如果不清楚SQL语句的类型,则只能通过使用execute()方法来执行SQL语句。

使用execute()方法执行SQL语句的返回值是boolean值,表明执行该SQL语句是否返回了ResultSet对象:

●当返回值为true时,可以使用Statement的getResultSet()方法,来获取execute()方法执行SQL查询语句所返回的ResultSet对象;

●当返回值为false时,可以使用getUpdateCount()方法,来获取execute()方法执行DML语句所影响的行数。

4.2executeUpdate()方法executeUpdate()和executeLargeUpdate()方法用于执行DDL和DML语句,其中executeLargeUpdate()方法是Java8新增的方法,是增强版的executeUpdate()方法。executeLargeUpdate()方法的返回值类型为long,当DML语句影响的记录超过Integer.MAX_VALUE时,建议使用该方法。

4.3PreparedStatement接口PreparedStatement接口继承Statement接口,该接口具有以下两个特点:

●PreparedStatement对象中所包含的SQL语句将进行预编译,当需要多次执行同一条SQL语句时,直接执行预先编译好的语句,其执行速度比Statement对象快;

●PreparedStatement可用于执行动态的SQL语句,即在SQL语句中提供参数,大大提高了程序的灵活性和执行效率。

动态SQL语句使用“?”作为动态参数的占位符,示例如下所示。

例如:参数化的动态SQL语句,创建PreparedStatement对象StringinsertSql="INSERTINTOuserdetails(sid,name,password,sex)VALUES(?,?,?,?)";PreparedStatementpstmt=conn.prepareStatement(insertSql);PreparedStatement接口

在执行带参数的SQL语句前,必须对“?”占位符参数进行赋值。PreparedStatement接口中提供了大量的setXXX()方法,通过占位符的索引完成对输入参数的赋值,根据参数的类型来选择对应的setXXX()方法,PreparedStatement接口中提供的常用setXXX()方法如表14-7所示。4.3任务5part处理数据库事务事务具有ACID四个特性:

●原子性(Atomicity):事务是应用中的最小执行单位,就如原子是自然界的最小颗粒一样,具有不可再分的特性。事务中的全部操作要么全部完成,要么都不执行。

●一致性(Consistency):事务执行之前和执行之后,数据库都必须处于一致性状态,即从执行前的一个一致状态变为另一个一致性的状态。

●隔离性(Isolation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发事务都是隔离的,即并发执行的事务之间不能看到对方的中间状态,并发事务之间是互不影响的。

●持久性(Durability):事务一旦提交,对数据库所做的任何改变都永久地记录到存储器中,即保存到物理数据库中,不被丢失。事务处理

事务处理过程中会涉及到事务的提交、中止和回滚三个概念。“事务提交”是指成功执行完毕事务,事务提交又分显示提交和自动提交两种;“事务中止”是指未能成功完成事务,执行中断;“事务回滚”对

温馨提示

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

评论

0/150

提交评论