大数据处理
大数据也称之为LOB(Large Objects),LOB又分为:clob和blob。clob用于存储大文本Text。blob用于存储二进制数据,例如图像声音等。
对MySQL而言,只有blob,没有clob,它存储大文本采用的是Text。
处理大文本调用的方法是:PreparedStatemnet.setCharacterStream(index,reader,length)
处理二进制数据调用的方法:PreparedStatement.setBinarySteam(i,inputStream,length)
批处理
采用Statement.addBatch(sql)来实现批处理。实现批处理的第二种方式:PreparedStatement.addBatch()
executeBatch()方法,执行批处理命令。
clearBatch()方法,清除批处理命令。
存储过程处理
首先要在mysql文档中编写存储过程,之后得到CallableStatement,并调用存储过程:CallableStatement cstmt = con.prepareCall("{call 存储过程名(?,?)}")
设置参数,注册返回值,得到输出cStmt.setString(1, "abcdefg");
cStmt.registerOutParameter(2, Types.VARCHAR);
cStmt.execute();
System.out.println(cStmt.getString(2));
事务处理
事务指逻辑上的一组操作,组成这组操作的哥哥单元,要不全部执行成功,要不全部不成功。
数据库开启事务命令:start transaction (开启事务) Rollback (回滚事务) Commit (提交事务)
当jdbc程序向Connection对象时,默认情况下这个对象会向数据库提交在它上面发送的sql语句。想关闭这种默认方式,让多条SQL语句在一个事务中执行,可用Connection,setAutoCommit(false)取消自动提交。
设置事务回滚点,Savepoint sp = con.setSavepoint(); Con.rollback(sp); con.commit(); (回滚后必须提交);
创建JDBC的事务主要分以下步骤
1.设置事务的提交方式为非自动提交:
conn.setAutoCommit(false);
2.将需要添加事务的代码放入try,catch块中。
3.在try块内添加事务的提交操作,表示操作无异常,提交事务。
conn.commit();
4.在catch块内添加回滚事务,表示操作出现异常,撤销事务:
conn.rollback();
5.设置事务提交方式为自动提交:
conn.setAutoCommit(true);
事务特性
原子性
一致性
隔离性
持久性
脏读:一个事务读取了另一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。 虚读(幻读):在一个事物内读到别的事务插入的数据,导致前后读取不一致。
数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)(序列化)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)
Read committed:可避免脏读情况发生(读已提交)。
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)
set transaction isolation level 设置事务隔离级别
select @@tx_isolation 查询当前事务隔离级别