《电子课件《Java Web应用开发教程(项目式)》第4章 JDBC.pptx》由会员分享,可在线阅读,更多相关《电子课件《Java Web应用开发教程(项目式)》第4章 JDBC.pptx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、电子课件Java Web应用开发教程(项目式)第4章 JDBC第4章 JDBCJava Web应用开发教程(项目式)学习目标理解什么是 JDBC理解并掌握常用 JDBC API理解并掌握通过 JDBC 添加数据理解并掌握通过 JDBC 删除数据理解并掌握通过 JDBC 修改数据理解并掌握通过 JDBC 查询数据理解并掌握 JDBC 事务目录01 JDBC基础02 JDBC基本操作01 JDBC 基础JDBC 基础Java程序对数据库进行添删改查操作就要用到JDBC技术。JDBC全称Java DataBase Connectivity,它是一组可以发送SQL命令到数据库的API,是由Java语言
2、编写的类和接口。01JDBC为不同的数据库提供统一的访问方式。各种常见数据库如SQL Server、Oracle和MySql在底层实现上都存在差异,为了通过统一的API对这些不同的数据库进行访问,需要这些数据库厂商针对JDBC提供的接口实现各自的“驱动类”。JDBC 基础JDBC API 提供了常用的接口和类。01APIAPI说明说明java.sql.DriverManagerjava.sql.DriverManager管理数据库驱动程序的类java.sql.Connectionjava.sql.Connection连接数据库进行通信的接口,该接口的对象可以与数据库通信java.sql.Pre
3、paredStatementjava.sql.PreparedStatementSQL语句预处理接口,该接口的对象可以对SQL语句进行预处理并发送语句到数据库java.sql.ResultSetjava.sql.ResultSet用来保存数据库查询结果的接口,该接口的对象可以迭代访问查询结果java.sql.SQLExceptionjava.sql.SQLException数据库操作异常封装类DriverManager的常用方法:static Connection getConnection(String s1,String s2,String s3)静态方法,返回数据库连接对象。JDBC 基
4、础Connection的常用方法:PreparedStatement prepareStatement(String s)返回数据预处理对象。void setAutoCommit(boolean b)设置JDBC事务提交方式。void commit()提交事务。void rollback()回滚事务。void close()释放资源。01JDBC 基础PreparedStatement的常用方法:int executeUpdate()执行会改变数据库的操作,返回值是操作影响的记录数量。ResultSet executeQuery()执行查询操作,返回值是查询结果集。void close()释放
5、资源。调用该方法通知数据库释放和预处理对象有关的资源。void setInt(int i,int v)为int类型占位符赋值,参数i是占位符的顺序,参数v是需要赋的整数值。void setString(int i,String s)为String类型占位符赋值,参数i是占位符的顺序,参数s是需要赋的字符串值。01JDBC 基础ResultSet的常用方法:boolean next()返回结果集中还有没有未访问的记录,如果为true将结果集访问游标指向下一条未访问的记录。void close()释放资源。调用该方法通知数据库释放和结果集对象有关的资源。int getInt(String s)以i
6、nt类型返回当前记录中字段s的值。String getString(String s)以String类型返回当前记录中字段s的值。01JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源注册驱动使用注册驱动使用Class.forName(Class.forName(驱动类驱动类)JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源建立连接使用建立连接使用Driver
7、Manager.getConnection(DriverManager.getConnection(连接字符串连接字符串,账号账号,密码密码)JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源JDBCJDBC的的StatementStatement、PreparedStatementPreparedStatement和和CallableStatementCallableStatement可可以以让让你你发发送送SQLSQL命令到数据库,并从你的数据库接收数据。命令到数据库,并从你的数据库接收数据。没有参数的情况下建议使用没有参数的情
8、况下建议使用StatementStatement。需要使用存储过程时使用需要使用存储过程时使用CallableStatementCallableStatement。SQLSQL语句需要输入参数,建议使用语句需要输入参数,建议使用PreparedStatementPreparedStatement。JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源会会改改变变数数据据库库内内容容的的操操作作通通过过预预处处理理对对象象的的executeUpdate()executeUpdate()方方法法执执行行,返返回回值值intint,表示操作影
9、响的记录数。表示操作影响的记录数。不不改改变变数数据据库库的的操操作作通通过过预预处处理理对对象象的的executeQuery()executeQuery()方方法法执执行行,返返回回值值ResultSetResultSet,表表示示查查询询结结果果。一一般般需需要要对对迭迭代代ResultSetResultSet使使用用查查询询结结果果封封装装JavaJava对象。对象。JDBC 基础JDBC操作一般分为5个步骤。01注册驱动建立数据库连接创建SQL预处理对象执行SQL操作关闭资源ConnectionConnection、PreparedStatementPreparedStatement和
10、和ResultSetResultSet对对象象都都是是存存在在JVMJVM里里的的,数数据据库库服服务务器器里里面面会会分分配配对对应应资资源源。当当它它们们使使用用完完毕毕后后需需要要通通过过各各自自的的close()close()方方法法通通知数据库服务器释放对应数据库资源。知数据库服务器释放对应数据库资源。JDBC 基础如果使用IntelliJ IDEA开发普通Java Application,需要将驱动jar文件复制到项目中并添加构建路径。在IntelliJ IDEA中新建项目chap04,项目类型选择Java。在安装MySQL时选择了安装connector/J,找到电脑的C:Prog
11、ram Files(x86)MySQLConnector J 8.0目录下的mysql-connector-java-8.0.xx.jar文件,这个jar文件就是MySQL 8的JDBC驱动。将该文件复制,点击Intellij IDEA项目根目录chap04,进行粘贴,提示是否复制文件到目录下,确认操作。01JDBC 基础选中项目下的驱动文件,单击右键在菜单中点击最下方的“Add as Library”,在弹出菜单中点击完成,将驱动文件添加到项目的运行库中。01JDBC 基础01参考【案例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedS
12、tatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.executeUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.printStackTrace();finally if(ps!=null)try ps.close();cat
13、ch(SQLException e)e.printStackTrace();if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();JDBC 基础01参考【案例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD
14、);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.executeUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.printStackTrace();finally if(ps!=null)try ps.close();catch(SQLException e)e.printStackTrace();if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();注册驱动JDBC 基础01参考【案
15、例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.executeUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.pr
16、intStackTrace();finally if(ps!=null)try ps.close();catch(SQLException e)e.printStackTrace();if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();建立连接JDBC 基础01参考【案例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=Dr
17、iverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.executeUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.printStackTrace();finally if(ps!=null)try ps.close();catch(SQLException e)e.printStackTrace();if(con!=null)try con.close();
18、catch(SQLException e)e.printStackTrace();创建预处理对象JDBC 基础01参考【案例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.execut
19、eUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.printStackTrace();finally if(ps!=null)try ps.close();catch(SQLException e)e.printStackTrace();if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();执行SQL操作JDBC 基础01参考【案例4-1】,下面代码给出了JDBC编程的基本结构。Connection con=null;PreparedStat
20、ement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(CREATE DATABASE chap04;);ps.executeUpdate();System.out.println(数据库创建完成.);catch(Exception e)e.printStackTrace();finally if(ps!=null)try ps.close();catch(
21、SQLException e)e.printStackTrace();if(con!=null)try con.close();catch(SQLException e)e.printStackTrace();关闭资源关闭资源02 JDBC 基本操作JDBC 基本操作面向数据库CRUD的操作主体是表和表中的记录,面向对象添删改查的操作主体是Java类和类的对象,我们编写Java程序进行数据库操作实际上就是将对类和对象的操作通过JDBC转换为对表和记录的操作。02一般称Java中和数据库表相对应的类为实体类,实体类的属性及其类型和表中的字段及其类型相对应。实体类(Entity)实体类对象和表中记
22、录存在对应关系,称为持久化对象。持久化对象(Persistent Object,简称PO)将JDBC操作细节封装成方法供外部调用的类称为数据访问对象。数据库访问对象(Data Access Object,简称DAO)JDBC 基本操作02字段名字段名字段类型字段类型约束约束说明说明ididint主键、自增长用户主键usernameusernamevarchar(32)非空用户名pwdpwdvarchar(32)非空用户密码public class User private int id;private String username;private String pwd;/省略set get方
23、法实体类实体类UserUser具有和表中字段类似的属性具有和表中字段类似的属性数据库表数据库表t_usert_userididusernameusernamepwdpwd1 1张三1234562 2李四1111113 3王五654321t_usert_user表记录表记录User user=new User();user.setId(1);user.setUsername(“张三”);user.setPwd(“123456”);new UserDAO().save(user);持久化对象持久化对象和数据库中的某条记录值对应和数据库中的某条记录值对应JDBC 基本操作02数据库访问对象数据库访问
24、对象封装对数据库的操作方法封装对数据库的操作方法public class UserDAO public void save(User user)public void delete(int id)public void update(User user)public User findById(int id)public List findAll()JDBC 基本操作02参考【案例4-2】,下面代码给演示了DAO对数据库进行添加操作。public void save(User user)throws Exception Connection con=null;PreparedStatement
25、 ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(insert into t_user value(null,?,?);ps.setString(1,user.getUsername();ps.setString(2,user.getPwd();ps.executeUpdate();catch(Exception e)throw new Exception(数据
26、库异常:+e.getMessage();finally if(ps!=null)ps.close();if(con!=null)con.close();JDBC 基本操作02参考【案例4-3】,下面代码给演示了DAO对数据库进行删除操作。public void delete(int id)throws Exception Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_US
27、ER,JDBC_PASSWORD);ps=con.prepareStatement(delete from t_user where id=?);ps.setInt(1,id);ps.executeUpdate();catch(Exception e)throw new Exception(数据库异常:+e.getMessage();finally if(ps!=null)ps.close();if(con!=null)con.close();JDBC 基本操作02参考【案例4-4】,下面代码给演示了DAO对数据库进行更新操作。public void update(User user)thro
28、ws Exception Connection con=null;PreparedStatement ps=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(update t_user set username=?,pwd=?where id=?);ps.setString(1,user.getUsername();ps.setString(2,user.getPwd(
29、);ps.setInt(3,user.getId();ps.executeUpdate();catch(Exception e)throw new Exception(数据库异常:+e.getMessage();finally if(ps!=null)ps.close();if(con!=null)con.close();JDBC 基本操作02参考【案例4-5】,下面代码给演示了DAO对数据库进行查询操作。public User findById(int id)throws Exception User user=null;Connection con=null;PreparedStateme
30、nt ps=null;ResultSet rs=null;try Class.forName(com.mysql.cj.jdbc.Driver);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);ps=con.prepareStatement(select*from t_user where id=?);ps.setInt(1,id);rs=ps.executeQuery();if(rs.next()user=new User();user.setId(rs.getInt(id);user.setUsername
31、(rs.getString(username);user.setPwd(rs.getString(pwd);catch(Exception e)throw new Exception(DAO异常:+e.getMessage();finally if(rs!=null)rs.close();if(ps!=null)ps.close();if(con!=null)con.close();return user;查查询询时时需需要要将将结结果果集集ResultSetResultSet中中的的数数据据封封装装成成持久化对象返回持久化对象返回JDBC 基本操作02在某些场景里,会一次执行多条能够修改数据
32、库内容的命令,如果在执行过程中发生异常,这些操作需要一起撤销,这时需要把这些操作放在同一个事务中。JDBC事务最基本的用法在开始操作前关闭事务的自动提交,在操作完成后手动提交事务,如果出现异常就回滚事务。参考【案例4-6】,下面代码给演示了JDBC事务操作。得到预处理对象前通过con.setAutoCommit(false)关闭了事务的自动提交。在操作完成后通过mit()提交事务。在捕获异常时通过con.rollback()回滚事务。JDBC 基本操作02Connection con=null;PreparedStatement ps=null;try Class.forName(“com.m
33、ysql.cj.jdbc.Driver”);con=DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASSWORD);con.setAutoCommit(false);System.out.println(“删除id为2的用户”);ps=con.prepareStatement(“delete from t_user where id=2;”);ps.executeUpdate();System.out.println(“更新id为4的用户,注意关键字where故意写错了,模拟发生异常”);ps=con.prepareStatement
34、(“update t_user username=haha whee id=4”);ps.executeUpdate();mit();catch(Exception e)if(con!=null)try con.rollback();System.out.println(“事务回滚,删除操作不会发生”);catch(SQLException ex)ex.printStackTrace();e.printStackTrace();finally 本章小结本章首先介绍了JDBC的基本概念,了解JDBC通过不同的数据库驱动文件让JAVA程序可以以相同的API访问不同的数据库,接着讲解了JDBC常用的添删改查操作以及事务处理。通过本章的学习,读者应该能够理解JDBC,能使用JDBC对MYSQL进行操作,并能够根据数据库表结构正确编写实体类和DAO类。