20201027黄春跃

20201027黄春跃

知识点总结

注册驱动

Class.forName("com.mysql.jdbc.Driver");
Class.forName(Driver.class.getName());

两种方法选其一

获取连接

Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/company_info","root","");

定义SQL语句

String sql = "sql语句";

创建执行sql对象

1.Statement stat = conn.createStatement();

//创建一个 执行 sql 的对象

2.PreparedStatement ps = conn.prepareStatement(sql)

Connection常用方法

Statement createStatement() :创建一个 Statement 对象,用于将SQL语句发送到数据库
PreparedStatement prepareStatement(String sql) :创建一个 PreparedStatement 对象,
用于将参数化的SQL语句发送到数据库。
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) :创建一个
默认的 PreparedStatement 对象,该对象获取自动生成的键, autoGeneratedKeys 值可以是:
Statement.RETURN_GENERATED_KEYS / Statement.NO_GENERATED_KEYS
void setAutoCommit(boolean autoCommit) :将此连接的自动提交模式设置为给定状态,默认为
自动提交
void commit() :使自上次提交/回滚以来所做的所有更改都将永久性,并释放此 Connection对象
当前持有的任何数据库锁。
void rollback() :撤消在当前事务中所做的所有更改,并释放此 Connection对象当前持有的任
何数据库锁。
void rollback(Savepoint savepoint) :撤消在给定的 Savepoint对象设置后进行的所有更改
Savepoint setSavepoint() :在当前事务中创建一个未命名的保存点,并返回代表它的新的
Savepoint对象。
Savepoint setSavepoint(String name) :在当前事务中创建具有给定名称的保存点,并返回代
表它的新的 Savepoint对象。
boolean isClosed() :检索此 Connection对象是否已关闭
void close() :Connection释放此Connection对象的数据库和JDBC资源,而不是等待它们自动
释放。 在已关闭的Connection对象上调用方法close是无操作的

Statement常用方法

boolean execute(String sql) :执行给定的SQL语句,这可能会返回多个结果
boolean execute(String sql, int autoGeneratedKeys) : 执行给定的 SQL 语句(该语句
可能返回多个结果),并通知驱动程序所有自动生成的键都应该可用于获取。
autoGeneratedKeys 值可以是:
Statement.RETURN_GENERATED_KEYS / Statement.NO_GENERATED_KEYS
ResultSet getGeneratedKeys() :检索由执行此Statement对象而创建的任何自动生成的密钥。
如果此Statement对象未生成任何键,则返回空的ResultSet对象
ResultSet getResultSet() :检索当前结果为ResultSet对象。 每个结果应该只调用一次这个方
法。
int getUpdateCount() :将当前结果作为更新计数检索; 如果结果是ResultSet对象或没有更多的
结果,则返回-1。 每个结果应该只调用一次这个方法。
int executeUpdate(String sql) :执行给定的SQL语句,这可能是 INSERT , UPDATE ,或
DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。
int executeUpdate(String sql, int autoGeneratedKeys) :执行给定的 SQL 语句,并用给
定标志通知驱动程序由此 Statement 生成的自动生成键是否可用于获取
ResultSet executeQuery(String sql) :执行给定的SQL语句,该语句返回单个 ResultSet对象
boolean isClosed() :如果这个Statement对象关闭,则为true; 如果它仍然开放,则为false
void close() :Statement释放此Statement对象的数据库和JDBC资源,而不是等待其自动关闭
时发生。调用已关闭的Statement对象上的方法close不起作用。当一个Statement对象关闭时,
其当前的ResultSet对象(如果存在)也被关闭

PreparedStatement常用方法

该接口继承自 Statement 接口,扩展了以下常用方法:
void setObject(int parameterIndex, Object x) :使用给定对象设置指定参数的值
ResultSet executeQuery() :执行此 PreparedStatement对象中的SQL查询,并返回查询
PreparedStatement的 ResultSet对象
int executeUpdate() :执行在该SQL语句PreparedStatement对象,它必须是一个SQL数据操纵
语言(DML)语句,如INSERT , UPDATE或DELETE ; 或不返回任何内容的SQL语句,例如DDL语

ResultSet常用方法

boolean next() :将光标从当前位置向前移动一行。 ResultSet光标最初位于第一行之前; 第一次
调用方法next使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。返回值true如果
新的当前行有效; false如果没有更多的行
Object getObject(int columnIndex) :获取此的当前行中指定列的值ResultSet作为对象Object
在Java编程语言。第一列是 1
Object getObject(String columnLabel) :获取此的当前行中指定列的值ResultSet作为对象
Object在Java编程语言。使用SQL AS子句指定的列的标签
void close() :ResultSet发布此ResultSet对象的数据库和JDBC资源,而不是等待此事件在自动
关闭时发生。
boolean isClosed() :检索此 ResultSet对象是否已关闭

操作事务

MYSQL中可以通过以下两种方式进行控制事务的操作:

  1. 自动提交事务
  2. 手动提交事务
    MySQL默认开启自动提交事务,意思是在MySQL的每一条DML(增删改)语句都是一个单独的事务,每条
    语句都会自动开启一个事务,执行完毕自动提交事务。

手动提交事务

start transaction; #开启事务
commit; #提交事务
rollback; #回滚事务

自动提交事务

Mysql 中默认开启自动提交事务,通过修改 MySQL 全局变量"autocommit",取消自动提交事务。

  1. 使用SQL语句: show variables like '%commit%'; 查看MySQL是否开启自动提交事务
  2. 取消自动提交事务,设置自动提交的参数为OFF,执行SQL语句: set autocommit = 0;

回滚点

在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作都
已经成功,可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回所
有操作,这个点称之为回滚点。
设置回滚点语法: savepoint 回滚点名字 ; 回到回滚点语法: rollback to 回滚点名字 ;

事务的特性

事务具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID 特性。
原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的所有SQL语句,要么都执
行,要么都不执行。原子性是事务最根本的特性。
一致性(Consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态(事务前后数
据的完整性必须保持一致)。一致性与原子性是密切相关的。
隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并
发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(Durability):持久性是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
接下来的其他操作或故障不应该对其有任何影响。

脏读(读取未提交数据)

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这
时,另外一个事务也访问这个数据,然后使用了这个数据。

解决脏读的方式是:将全局的隔离级别进行提升。

不可重复读:(前后多次读取数据内容不一致)

是指在一个事务内,多次读同一数据。数据内容不一致,要求的是一个事务中多次读取时数据是一致
的,这是事务 update 时引发的问题。在这个事务还没有结束时,另外一个事务也访问该同一数据。那
么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可
能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即
不能读到相同的数据内容)

解决不可重复读的方式是:将全局的隔离级别进行提升为: repeatable read

幻读:(前后多次读取,数据总量不一致)

一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是
insert 或 delete 时引发的问题

标签

评论

this is is footer