jdbc 일괄 처리 & 사무 개념 및 성질
13062 단어 Java 기반
####복습
Class.forName("com.sql.jdbc.Driver");
2. 연결 대상을 어떻게 얻는가
DriverManager.getConnection(url,name,password);
url : url
mysql url :jdbc:myql:///mydb
Statement st=conn.createStatement();
st.executeQuery();
st.executeUpdate();
st.execute();
PreparedStatement pst=conn.prepareStatement(sql); // ?
setXXX()
executeQuery();
pst.executeUpdate();
4. 질의 문을 실행하면 ResultSet을 받을 수 있습니다.
ResultSet rs=st.executeQuery(sql);
rs.next();
getObject()
getInt();
5. 자원 닫기
rs.close();
st.close();
conn.close();
###다중 데이터 처리 정보. ###일괄 처리 일괄 처리 응용 프로그램: 한 번에 여러 개의 ql 문장을 실행할 수 있습니다
1.Statement
addBatch(String sql) // sql
cleaarBatch(); // sql
executetBatch(); // sql
2.PreparedStatement
addBatch(); // SQL
executeBaatch(); // sql
###Statement와 PreparedStatement의 차이점 1.Statement는 서로 다른 ql문장을 실행하기에 적합합니다PreparedStatement는 같은 ql문장을 실행하기에 적합합니다.2.Statement는 실행할 때PreParedStatement보다 효율이 낮습니다. 1 #### 두 개의 데모를 보세요. 제가 먼저 jdbc를utils에 봉인할게요.
package cn.lawfree.JDBC.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class JdbcUtil {
private static String DRIVER;
private static String URL;
private static String USERNAME;
private static String PASSWORD;
// private static final ThreadLocal tl = new
// ThreadLocal();
static {
//
ResourceBundle bundle = ResourceBundle.getBundle("db");
DRIVER = bundle.getString("driver");
URL = bundle.getString("url");
USERNAME = bundle.getString("username");
PASSWORD = bundle.getString("pwd");
}
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
throw new RuntimeException(" ");
}
}
// Connection
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
// throw new RuntimeException(" ");
e.printStackTrace();
}
return conn;
}
// Connection
public static void closeConnection(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
// Statement
public static void closeStatement(Statement st) throws SQLException {
if (st != null) {
st.close();
}
}
// ResultSet
public static void closeResultSet(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
}
}
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import cn.lawfree.JDBC.util.JdbcUtil;
//statement
public class Demo1 {
public static void main(String[] args) throws SQLException {
String sql0 = "use t_testpatch";
String sql1 = "create table user(id int,name varchar(20),sex varchar(10),age int )";
String sql2 = "insert into user values(1,'tom','male','20')";
String sql3 = "insert into user values(2,'fox','male','30')";
String sql4 = "update user set age=40 where id=1";
// 1. Connection
Connection conn = JdbcUtil.getConnection();
// 2. Statement
Statement st = conn.createStatement();
// 3. sql st
st.addBatch(sql0);
st.addBatch(sql1);
st.addBatch(sql2);
st.addBatch(sql3);
st.addBatch(sql4);
// 4.
st.executeBatch();
// 5.
st.close();
conn.close();
}
}
package cn.lawfree.JDBC.batch;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import cn.lawfree.JDBC.util.JdbcUtil;
//PreparedStatement
public class demo2 {
public static void main(String[] args) throws SQLException {
Connection conn = JdbcUtil.getConnection();
String sql = "insert into user values(?,?,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);
for (int i = 1; i < 10; i++) {
pst.setInt(1, i);
pst.setString(2, "name" + i);
pst.setString(3, "male");
pst.setInt(4, 20 + (int) (Math.random() * 10));
//
pst.addBatch();
}
//
pst.executeBatch();
pst.close();
conn.close();
conn.close();
}
}
##사무는 통속적으로 말하면 사무란 한 조의 조작을 가리키는데 이 조의 조작을 구성하는 기능을 말한다. 모두 성공하지 않으면 모두 성공하지 못한다.데이터베이스 본의식이 업무를 제공한다.2. jdbc는 사무에 대한 처리를 제공한다.
###1.데이터베이스에서 사무 처리 mysql 사무는 자동으로 제출됩니다. ------기본적으로, 사무는 자동으로 제출되고, 하나의 sql 문장은 하나의 단독 사무oracle 사무는 수동으로 제출됩니다.commit
start transaction ------
rollback ------
commit ------
mysql에서 제출 방식을 설정할 수 있습니까?show variables like ‘%commit’; 제출 방식 set autocomit=off/on 보기;자동 커밋 해제
start transaction rollback commit 사용 시연
create table acount(
id int,
name varchar(10),
money int
)
insert into account values(1,'aaa',1000);
insert into account values(2,'bbb',1000);
insert into account values(3,'ccc',1000);
aaa-- -->bbb 500
update acount set money=money-500 where name='aaa'; aaa 500.
update acount set money=money+500 where name='bbb'; bbb 500.
트랜잭션 작업 1.start transcation. 2.
update acount set money=money-500 where name='aaa'; aaa 500.
update acount set money=money+500 where name='bbbb'; bbb 500.
3. 데이터에 문제가 있음 발견 – >rollback;4. commit
###2.jdbc 사무 처리
Connection에서 제공
setAutoCommit(boolean f); //-----
rollback(); //-----
commit(); //-----
이 세 가지 방법은 jdbc에서 업무를 처리하는 세 가지 방법입니다. Savepoint 스크롤 포인트 con.setSavepoint(); 가져오기(롤백 포인트 설정)
rollback(Savepoint) ;//
데모 하나 보실래요?
package cn.lawfree.JDBC.transaction;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//
// ,
public class AccountDao {
//
public void save(double money, String name, Connection conn)
throws SQLException {
String sql = "update account set money=money+? where name=? ";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setDouble(1, money);
pst.setString(2, name);
int row = pst.executeUpdate();
if (row == 0) {
throw new RuntimeException(" ");
}
pst.close();
}
//
public void get(double money, String name, Connection conn)
throws SQLException {
String sql = "update account set money=money-? where name=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setDouble(1, money);
pst.setString(2, name);
int row = pst.executeUpdate();
if (row == 0) {
throw new RuntimeException(" ");
}
pst.close();
}
}
package cn.lawfree.JDBC.transaction;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Savepoint;
import cn.itcast.lawfree.util.JdbcUtil;
// service ,
//
public class AccountService {
public void hk() {
AccountDao dao = new AccountDao();
Connection conn = JdbcUtil.getConnection();
// ------setAutoCommit(false);
Savepoint point = null;
try {
conn.setAutoCommit(false);
// 1. a 500
dao.get(500, "aaa", conn);
//
point = conn.setSavepoint();
// 2. 500;
dao.save(500, "bbb", conn);
} catch (SQLException e) {
//
// rollback
try {
conn.rollback(point);
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
// commit
conn.commit();
// conn
JdbcUtil.closeConnection(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
### 트랜잭션의 특성(ACID) 1.원자성(Atomicity) 원자성이란 사무는 분할할 수 없는 작업 단위로 사무 중의 조작이 모두 발생하거나 발생하지 않는 것을 가리킨다.Consistency(Consistency) 트랜잭션 전후 데이터의 무결성이 일치해야 합니다.격리성(Isolation) 사무의 격리성은 여러 사용자가 데이터베이스에 동시 방문할 때 한 사용자의 사무가 다른 사용자의 사무소에 의해 방해될 수 없고 여러 개의 사무 간의 데이터는 서로 격리되어야 한다는 것을 말한다.지속성(Durability) 지속성은 하나의 업무가 일단 제출되는 것을 가리킨다.그것은 데이터베이스에서의 데이터에 대한 변화가 영구적이기 때문에 다음에 데이터베이스에 고장이 발생하더라도 그에 아무런 영향을 주어서는 안 된다
사무의 격리성을 중점적으로 소개하는데 사무의 격리성을 고려하지 않으면 문제를 일으킬 수 있다
A B 100,
B 100
A
B 100
Read committed.
데모 읽기 불가:
A B 100,
B ( : Read committed )
A , 100
, .
####mysql 기본 격리 레벨은 무엇입니까?격리 레벨은 어떻게 설정합니까?
mysql 기본 격리 레벨은 Repeatable read 레벨입니다
select @@tx_isolation
set session transaction isolation level
set session transaction isolation level Read uncommitted;
serializable
,
다음은 mysql로 서로 다른 사무 격리 단계에서 무슨 일이 일어날지 구체적으로 살펴봅시다.
connection
setTransactionIsolation(int level)
소결:1.Statementment와PreparedStatement가 일괄 처리를 실행하는 특징Statement는 여러 가지 다른 sqlPreparedStatement를 실행하기에 적합하고 같은 sql2를 실행하기에 적합하다.사무 1조 조작은 모두 성공하든지 아니면 모두 성공하지 못하든지.mysql의 사무관리 1.start transcation rollback commit. 2. mysql의 사무는 기본적으로 autocommit=on입니다. autocommit=offoracle 데이터베이스에서 수동으로 수정할 수 있습니다. 사무는 수동으로 제출해야 합니다.jdbc 관리 업무
Connection
1.setAutoCommit(boolean flag)
2.rollback
3.commit
4.Savepoint
5. 트랜잭션 특성(중점)
ACID
gelixing
6. 격리성은 격리성을 고려하지 않으면 어떤 문제가 발생합니까?
1. 2. 3 ( )
7. 격리 단계
1.Serializable: .( )
2.Repeatable read: ( commit ) .( )
3.Read committed: ( )
4.Read uncommitted: , ( )
8.jdbc는 업무의 격리 단계를 어떻게 설정합니까
setTranscationIsolation(int level)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
FTP의 액티브 모드 및 패시브 모드로그인에 성공한 후list 목록이나 데이터를 읽을 때 클라이언트는 랜덤으로 하나의 포트(1024 이상)를 개방하고 포트를 FTP 서버에 보내서 서버 클라이언트에게 주동 모드를 사용하고 개방하라고 알려준다 FTP 서버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.