🌴 2022.5.24 早八
文章目录
- 前言
- 7.1 MySQL数据库
- 7.2 JDBC
- 7.2.1 JDBC是什么
- 7.2.2 JDBC驱动程序
- 7.3 JDBC中的常用接口
- 7.3.1 驱动程序接口Driver
- 7.3.2 驱动程序管理器DriverManager
- 7.3.3 数据库连接接口Connection
- 7.3.4 执行SQL语句接口Statement
- 7.3.5 执行动态SQL语句接口PreparedStatement
- 7.3.6 执行存储过程接口CallableStatement
前言
🎬本文章是 【JAVA WEB开发技术】 专栏的文章,主要是上课的随堂笔记与练习
🔗JAVA WEB开发技术专栏 传送门 💻提示:目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
7.1 MySQL数据库
MySQL官网下载并配置Mysql和驱动
7.2 JDBC
7.2.1 JDBC是什么
JDBC是Java Data Base Connectivity的缩写,意思是Java程序连接和存取数据库的应用程序接口(API)。此接口是Java核心API的一部分
JDBC连接数据库实现了与平台无关的客户机/服务器的数据库应用。由于JDBC是针对“与平台无关”设计的,所以只要在Java数据库应用程序中指定使用某个数据库的JDBC驱动程序,就可以连接并存取指定的数据库。而且,当要连接几个不同的数据库时,只需修改程序中的JDBC驱动程序,无需对其他的程序代码做任何改动
JDBC由一群类和接口组成,通过调用这些类和接口所提供的成员方法,可以方便地连接各种不同的数据库,进而使用标准的SQL命令对数据库进行查询、插入、删除、更新等操作。
JDBC不能直接访问数据库,必须依赖于数据库厂商提供的JDBC驱动,使用JDBC可以实现
- 同数据库建立连接
- 向数据库发送SQL语句
- 处理从数据库返回的结果
JDBC优点:
- JDBC与ODBC十分相似,便于软件开发人员理解
- JDBC使软件开发人员从复杂的驱动程序编写工作中解脱出来,可以完全专注于业务逻辑的开发
- JDBC支持多种关系型数据库,大大增加了软件的可移植性
- JDBC API是面向对象的,软件开发人员可以将常用的方法进行二次封装,从而提高代码的重用性
JDBC缺点:
- 通过JDBC访问数据库时速度将受到一定影响
- JDBC是面向对象的,但所访问数据库依然是面向关系的
- JDBC提供了对不同厂家产品的支持,将对数据源带来影响
7.2.2 JDBC驱动程序
JDBC访问数据的基本结构由Java程序、JDBC管理器、驱动程序和数据库四部分组成,如图所示。在这四部分中,根据数据库的不同,相应的驱动程序又可分为四种类型
JAVA应用程序
JDBC_API
JDBC_DriverManager
JDBC-ODBC_Bridge
JDBC-Native_API_Bridge
JDBC-Middleware
Pure_JDBC_Driver
ODBC_Driver
特定驱动器
网络服务器中间件
数据库1
数据库2
数据库3
数据库4
7.3 JDBC中的常用接口
7.3.1 驱动程序接口Driver
Driver接口由数据库厂家的驱动程序实现,对于Java开发者而言,只需要使用Driver接口就可以了
在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法
驱动:就是各个厂商实现Java中所提出的JDBC接口,即对相关接口的实现类的jar文件
7.3.2 驱动程序管理器DriverManager
通常通过Class.forName()
方法加载要连接数据库的Driver类,该方法的入口参数为要加载Driver类的完整包名
成功加载后,会将Driver类的实例注册到DriverManager类中,如果加载失败,将抛出异常
Class.forName(“com.mysql.jdbc.Driver”); //装载mysql驱动
Class.forName(“com.jdbc.driver.OracleDriver”); //装载oracle驱动
DriverManager类常用方法
getConnection方法
方法名:getConnection(String url, String user, String password)
说明:为静态方法,用来获得数据库连接,有3个入口参数,依次为要连接数据库的URL、用户名和密码,返回值类型为Connection
setLoginTimeout方法
方法名:setLoginTimeout(int seconds)
说明:为静态方法,用来设置每次等待建立数据库连接的最长时间
setLogWriter方法
方法名:setLogWriter(java.io.PrintWriter out)
说明:为静态方法,用来设置日志的输出对象
println方法
方法名:println(String message)
说明:为静态方法,用来输出指定消息到当前的JDBC日志流
7.3.3 数据库连接接口Connection
java.sql.Connection类负责建立与指定数据库的连接。当获得了与数据库的连接后,就可以与数据库进行交互了
常用方法
createStatement方法
方法名:createStatement()
说明:创建并返回一个Statement实例,通常在执行无参数的SQL语句时创建该实例
prepareStatement方法
方法名:prepareStatement()
说明:创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理
prepareCall方法
方法名:prepareCall()
说明:创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该实例
setAutoCommit方法
方法名:setAutoCommit()
说明:设置当前Connection实例的自动提交模式,默认为true,即自动将更改同步到数据库中,如果设为false,需要通过执行commit()或rollback()方法手动将更改同步到数据库中
getAutoCommit方法
方法名:getAutoCommit()
说明:查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则返回false
setSavepoint方法
方法名:setSavepoint()
说明:在当前事务中创建并返回一个Savepoint实例,前提条件是当前的Connection实例不能处于自动提交模式,否则将抛出异常
releaseSavepoint方法
方法名:releaseSavepoint()
说明:从当前事务中移除指定的Savepoint实例
setReadOnly方法
方法名:setReadOnly()
说明:设置当前Connection实例的读取模式,默认为非只读模式,不能在事务当中执行该操作,否则将抛出异常,有一个boolean型的入口参数,设为true则表示开启只读模式,设为false则表示关闭只读模式
isReadOnly方法
方法名:isReadOnly()
说明:查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回false
isClosed方法
方法名:isClosed()
说明:查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回false
commit方法
方法名:commit()
说明:将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection实例当前拥有的所有数据库锁定
rollback方法
方法名:rollback()
说明:取消当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定;该方法只能在非自动提交模式下使用,如果在自动提交模式下执行该方法,将抛出异常;有一个入口参数为Savepoint实例的重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库锁定
close方法
方法名:close()
说明:立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接
7.3.4 执行SQL语句接口Statement
java.sql.statement接口用来执行静态的SQL语句,并返回执行结果
常用方法
executeQuery方法
方法名:executeQuery(String sql)
说明:执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate方法
方法名:executeUpdate(String sql)
说明:执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
clearBatch方法
方法名:clearBatch()
说明:清除位于Batch中的所有SQL语句,如果驱动程序不支持批量处理将抛出异常
addBatch方法
方法名:addBatch(String sql)
说明:将指定的SQL命令添加到Batch中,String型入口参数通常为静态的INSERT或UPDATE语句,如果驱动程序不支持批量处理将抛出异常
close方法
方法名:close()
说明:立即释放Statement实例占用的数据库和JDBC资源,即关闭Statement实例
executeBatch方法
方法名:executeBatch()
说明:执行Batch中的所有SQL语句,如果全部执行成功,则返回由更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应。数组元素有以下几种情况:
①大于或等于零的数,说明SQL语句执行成功,为影响数据库中行数的更新计数
②-2,说明SQL语句执行成功,但未得到受影响的行数
③-3,说明SQL语句执行失败,仅当执行失败后继续执行后面的SQL语句时出现
如果驱动程序不支持批量,或者未能成功执行Batch中的SQL语句之一,将抛出异常
7.3.5 执行动态SQL语句接口PreparedStatement
java.sql.preparedStatement接口继承statement接口,是statement接口的扩展,用来执行动态(含有参数)的SQL语句
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率
PreparedStatement 对象通过setXXX 方法为Sql语句中的参数赋值, setXXX 方法中的 XXX 是 Java 类型
常用方法
executeQuery方法
方法名: executeQuery()
说明:执行前面包含参数的动态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate方法
方法名: executeUpdate()
说明:执行前面包含参数的动态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
clearParameters方法
方法名: clearParameters()
说明:清除当前所有参数的值
close方法
方法名: close()
说明:立即释放Statement实例占用的数据库和JDBC资源,即关闭Statement实例
7.3.6 执行存储过程接口CallableStatement
CallableStatement接口继承了PreparedStatement接口。主要是调用数据库中的存储过程
CallableStatement对象为所有的DBMS提供了一种标准的形式去调用数据库中已存在的存储过程
对数据库中存储过程的调用是CallableStatement对象所含的内容。有两种形式,1:形式带结果参数;2:形式不带结果参数
ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
ResultSet对象具有指向其当前数据行的光标。最初,光标位于第一行之前。使用next方法可以将光标移动到下一行,并且在ResultSet对象中没有更多行时返回false ,所以可以通过while循环遍历结果集中的数据
默认的ResultSet对象不可更新,并且具有仅向前移动的光标。因此,只能遍历一次,并且只能从第一行到最后一行。可以生成ResultSet可滚动或可更新的对象
ResultSet接口提供了 getter
方法(getBoolean,getLong等等),用于从当前行检索列值。有两种不同形式:
- 使用列的索引号。使用列索引会更有效。列从1开始编号
- 使用列的名称。列名不区分大小写。当多个列具有相同名称时,将返回第一个匹配列的值
常用方法
first方法
方法名: first()
说明:移动指针到第一行;如果结果集为空则返回false,否则返回true;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
last方法
方法名: last()
说明:移动指针到最后一行;如果结果集为空则返回false,否则返回true;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
previous方法
方法名: previous()
说明:移动指针到上一行;如果存在上一行则返回true,否则返回false;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
next方法
方法名: next()
说明:移动指针到下一行;指针最初位于第一行之前,第一次调用该方法将移动到第一行;如果存在下一行则返回true,否则返回false