a、存储过程是什么?
将一组SQL组合在一起,类似于java代码里面的函数 现实当中SQL命令不可能一条一条调用。 目的为了打包存储调用。 放在服务器上,已经编译好。 买烟的例子(一次买一根还是买一包?)b、代码:如何操作?
这些代码可以用java代码类比。 在代码框架里可以调用多行sql语句。 在代码中可以定义结束符号。 以后接触需要输入代码的机会少,因为别人需要程序员做的就是提供给程序员接口,给过程输入代码。 二、批处理Statement和PreparedStatement都可以做批量处理
首先使用Statement来处理:Statement中的addBatch()方法:用来放入批量SQL语句 然后执行呢?executeBatch()方法批量执行 最后clearBatch(),清空此Statement对象的当前SQL命令列表 这是整个处理流程。使用Statement实现批处理的特点
1、可以执行不同的sql语句 2、但参数是必须确定的使用PreparedStatement实现
特点:执行的SQL相同,但参数不同,通常用于批量添加,或删除。 三、事务1、事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。
2、用sql语言怎么控制事务?
例如:A——B转帐,对应于如下两条sql语句
update account set money=money-100 where name=‘a’; update account set money=money+100 where name=‘b’;最后确然语句是否成立?
rollback;//该句让以上的语句无效,即不提交那么如何提交?
commit();数据库开启事务命令DTL
start transaction 开启事务 Rollback 回滚事务 Commit 提交事务3、那么在jdbc中怎么控制事务的?
利用prepareStatement来编程
st = con.prepareStatement(update account set money = money-? where id = ?); st.setInt(1,100); st.setInt(2,1); int i = 1/0;//为了抛出异常,去执行回滚 st.executeUpdate(); st = con.prepareStatement(update account set money = money+? where id = ?); st.setInt(1,100); st.setInt(2,2); st.executeUpdate();以上如何开事务?
查文档:Connection去找开启事务的方法
setAutoCommit()在以上代码前开启事务:
con.setAutoCommit(false);//不自动提交,开启事务如没有问题,就在代码最后提交事务:
con.commit();如果有问题,
那么就在就在catch(Exception e){con.rollback();}//因为如果以上代码异常了,那么con.commit()也执行不了了。如果以上代码不加事务机制,那么会怎样?
那么会-100的代码执行了,而+100的代码没执行,因为有异常。所以该处能体现事务机制的好处4、事务的特性和隔离级别(必须清楚:数据安全):涉及多线程
多线程同时操作同一事务。引起操作数据冲突。
那么事务有什么特性呢?
a.原子性:处于同一个事务中的多条语句,要么全都成功,要么全都不成成功。 b.一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账:转账前a+b=2000,转账后a+b=2000 c.隔离性:多线程并发时,一个事务不能被其他事务所干扰。 d.持久性:数据应该被永久性的保存起来。(硬盘,而不是内存)如果不考虑事务的隔离性,会导致以下不正确的问题:
a、脏读:指一个事务读到了另外一个事务中未提交的数据 b、不可重复读:指一个事务读到了另外一个事务update后(事务提交了)的数据 c、虚读:指一个事务读到了另外一个事务insert的数据数据库有四个隔离级别:
READ UNCOMMITTED:脏读、不可重复读、虚读都有可能发生。 READ COMMITTED:防止脏读发生;不可重复读、虚读都有可能发生。 REPEATABLE READ:(MySQL默认级别)防止脏读、不可重复读;虚读有可能发生。 SERIALIZABLE:防止脏读、不可重复读、虚读的发生 特点:从上到下,隔离级别越高,数据越安全,但是效率越低在SQL中如何输入代码?
select @@tx_isolation; 查看当前数据库的隔离级别 set transaction isolation level 四个级别之一;更改当前事务的隔离级别 各种不同的数据库的默认隔离级别不一样。实验:项目架构:day1600procedure
jdbccfg.properties
TestBatch.java
package com.itheima.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import com.itheima.utils.JdbcUtil; public class TestBatch { public static void main(String[] args) { //testBatch1(); //testBatch2(); testBatch3(); } private static void testBatch3() { Connection con = null; PreparedStatement st = null; try { con = JdbcUtil.getConnection(); st = con.prepareStatement(insert into usersw values(?,?)); //使用PreparedStatement实现批处理特点: 1.可以执行相同的SQL语句,2.但参数是不同的,通常用于实现批量添加,或删除 for (int i = 0; i <38; i++) {//这是个坑 st.setInt(1, i+100); st.setString(2, aj+i); //用于将参数加入到批处理命令中 st.addBatch(); if(i%10==0){ st.executeBatch(); st.clearBatch(); } } //2.执行批处理 st.executeBatch(); //3.清空命令列表 st.clearBatch(); } catch (Exception e) { e.printStackTrace(); } finally{ JdbcUtil.release(null, st, con); } } private static void testBatch2() { Connection con = null; PreparedStatement st = null; try { con = JdbcUtil.getConnection(); st = con.prepareStatement(insert into usersw values(?,?)); //使用PreparedStatement实现批处理特点: 1.可以执行相同的SQL语句,2.但参数是不同的,通常用于实现批量添加,或删除 for (int i = 0; i <10000000; i++) {//这是个坑 st.setInt(1, i+10); st.setString(2, aj+i); //用于将参数加入到批处理命令中 st.addBatch(); } //2.执行批处理 st.executeBatch(); //3.清空命令列表 st.clearBatch(); } catch (Exception e) { e.printStackTrace(); } finally{ JdbcUtil.release(null, st, con); } } private static void testBatch1() { Connection con = null; Statement st = null; try { con = JdbcUtil.getConnection(); st = con.createStatement(); //使用Statement实现批处理特点: 1.可以执行不同的SQL语句,2.但参数是必须确定的 st.addBatch(create table usersw(id int primary key,name varchar(20))); st.addBatch(insert into usersw values(1,'cgx')); st.addBatch(update usersw set name='aj' where id=1); //2.执行批处理 st.executeBatch(); //3.清空命令列表 st.clearBatch(); } catch (Exception e) { e.printStackTrace(); } finally{ JdbcUtil.release(null, st, con); } } }企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设公司哪家好 https://www.feimao666.com
一家五口误食毒菇住进医院 3岁小孙... | 07-25 |
卡汀财经分享—如果我想5年后年薪百... | 02-22 |
微芯片存身份信息 宠物走失7年终与... | 01-06 |
日本借原子弹爆炸70周年纪念展示受害... | 08-20 |
四种方式可查询高考录取通知书投递状... | 07-07 |
广西柳州四县市区污染减排不力 分|... | 11-17 |
大学生就业报告解析“最吃香”|罪域... | 07-27 |
今天福州最低温跌至10℃以下 闽局部... | 01-08 |
冤案当事人要求道歉 警方:很少有人... | 08-21 |
南京多地段淹水 多家单位通知放假 | 07-29 |
短期理财产品 只是看上去很美|白月... | 10-21 |
97岁抗战老兵胥继武 曾亲手打捞跳黄... | 07-18 |
为911家中小企业放款19亿 “税融通... | 12-30 |
杜家毫:要为经济社会发展创造良好法... | 08-10 |
英国女王或搬出白金汉宫以配合翻新工程| | 07-06 |
抗战老兵为战友守陵数十年 骨灰撒于... | 06-26 |
美称伊朗威胁美基地是虚张声势 中国... | 09-28 |
flash中通过XMLSocket监控生产系统(1-2) | 09-09 |
菲律宾外长称无法阻止中国宣示南海主... | 10-09 |
71年前美军飞机坠毁在此|聂文星 | 11-10 |