JDBC 의 확장 지식 포인트 총화
1.1 사무 개요
트 랜 잭 션 의 ACID(acid)속성
연결 대상 이 생 성 되 었 을 때 기본 값 으로 자동 으로 업 무 를 제출 합 니 다.SQL 문 구 를 실행 할 때마다 실행 에 성공 하면 데이터베이스 에 자동 으로 제출 되 며 스크롤 백 할 수 없습니다.
여러 SQL 문 구 를 하나의 사무 로 실행 하기 위해 서:
1.Connection 대상 의 setAutoCommit(false)를 호출 합 니 다.자동 제출 취소
2.모든 SQL 문 구 를 성공 적 으로 실행 한 후 commt()를 호출 합 니 다.방법 제출 사무
3.이상 이 발생 했 을 때 rollback()을 호출 합 니 다.방법 스크롤 백 트 랜 잭 션
4.이때 Connection 이 닫 히 지 않 으 면 자동 제출 상 태 를 회복 해 야 합 니 다.
1.4 데이터베이스 트 랜 잭 션 사용 과정
데이터 베 이 스 를 사용 하 는 사무,우 리 는 이상 처리 try 에 협조 해 야 합 니 다.
public void testJDBCTransaction() {
Connection conn = null;
try {
// 1.
conn = JDBCUtils.getConnection();
// 2.
conn.setAutoCommit(false);
// 3.
// 4. ,
conn.commit();
} catch (Exception e) {
e.printStackTrace();
// 5. ,
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}} finally {
JDBCUtils.close(null, null, conn); } }
1.5 데이터베이스 사용 의 장점COMMIT 와 ROLLBACK 문 구 를 사용 하면 다음 과 같이 할 수 있 습 니 다.
제출 또는 스크롤 백 전 데이터 상태
제출 후 데이터 상태
package com.company.jdbcDemo;
import com.company.jdbcDemo.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/*
AA CC 1000
AA 2000
CC 2000
try{
AA -= 1000
System.out.println(1/0);
CC += 1000
( ( ))
}catch(Exception e){
( )
}
CREATE TABLE account(
NAME VARCHAR(20),
balance INT
)
*/
public class AccountDemo {
public static void main(String[] args) throws SQLException {
//1.
Connection connection = JDBCUtils.getConnection();
PreparedStatement ps = null;
try {
//2. --
connection.setAutoCommit(false);
//-------------------------------------------------------------------
//3. --- sql
//
String sql = "update account set balance=? where name=?";
ps = connection.prepareStatement(sql);
//
ps.setInt(1, 1000);
ps.setString(2, "aa");
// sql
ps.executeUpdate();
System.out.println(1 / 0);
//
ps.setInt(1, 3000);
ps.setString(2, "cc");
// sql
ps.executeUpdate();
//-------------------------------------------------------------------
//4.
connection.commit();
}catch (Exception e){
e.printStackTrace();
//5.
connection.rollback();
}finally {
//6.
connection.setAutoCommit(true);
//7. ----
JDBCUtils.close(ps,connection);
}
}
}
2.데이터베이스 연결 탱크개술
앞에서 우리 의 예제 코드 에서 내 가 쓴 JDBCutils 류 를 호출 하여 데이터 베 이 스 를 연결 해 왔 다.만약 에 우리 가 다른 프로젝트 에서 나의 그 종 류 를 복사 해 야 한다.그리고 내 가 쓴 것 도 엄밀 하지 않다.내 가 앞에서 실현 한 데이터 베이스 연결 방식 에 다음 과 같은 문제 가 존재 한다.
데이터베이스 연결 풀 사용
2.1 데이터베이스 연결 탱크 기술 의 장점
3.드 루이 드(드 루이)
3.1 델 루이 의 사용
아 리 드 루이 연결 탱크 기술 은 먼저 두 단계 로 나 뉜 다.
1.jar 가방 가입
druid-1.1.10.jar
2.코드 단계
첫 번 째 단계:데이터베이스 연결 탱크 만 들 기
두 번 째 단계:연결 탱크 의 매개 변 수 를 설정 합 니 다.
STEP 3:연결 가 져 오기
델 루이 를 데이터베이스 에 연결 하 는 방법 1
//1、 ( )
DruidDataSource ds =new DruidDataSource();
//2、
//(1)
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUsername("root");
ds.setPassword("mysql123");
//3、
Connection conn = ds.getConnection();
// ,
conn.close();
델 루이 로 데이터베이스 연결 하 는 방법 2
// druid.properties
url=jdbc:mysql://localhost:3306/0319db ?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
:
Properties pro = new Properties();
pro.load(TestDruid2.class.getClassLoader().getResourceAsStream("druid.properties"));
DataSource ds=
DruidDataSourceFactory.createDataSource(pro);
Connection conn = ds.getConnection();
여기 주의 하 세 요.드 루이 프로필 에 있 는 key 는 제 아래 와 같 아야 합 니 다.그렇지 않 으 면 연결 이 되 지 않 습 니 다.
// druid.properties
url=jdbc:mysql://localhost:3306/demo
username=root
password=123321
driverClassName=com.mysql.jdbc.Driver
4.DBUtils 도구 류내 가 직접 조작 할 게.여 기 는 내 앞에서 이 루어 진 JDCUtils 류 를 사용 해.게 으 름 피 워..
package com.company.jdbc2;
import com.company.jdbc.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
/*
DBUtils , , ,
*/
public class DBUtilsDemo {
@Test
public void test() throws SQLException {
//1.
QueryRunner queryRunner = new QueryRunner();
//2. , ,
/*
update(Connection conn, String sql, Object param)
conn :
sql : sql
param :
*/
String sql = "insert into student(sid,sname,sage) values(?,?,?)";
// :
int i = queryRunner.update(JDBCUtils.getConnection(),
sql, 10, "kongkong", 18);
System.out.println(" " + i + " ");
}
@Test
public void test2() throws SQLException {
QueryRunner queryRunner = new QueryRunner();
/*
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
conn :
sql : sql
*/
String sql = "select sid a,sname,sage from student where sid=?";
// : 。 sql
// Student student = queryRunner.query(JDBCUtils.getConnection(), sql,
// new BeanHandler<Student>(Student.class), 10);
sql = "select sid a,sname,sage from student";
List<Student> list = queryRunner.query(JDBCUtils.getConnection(), sql,
new BeanListHandler<Student>(Student.class));
for (Student s : list) {
System.out.println(s);
}
}
}
일괄 처리 사용우리 가 대량의 데이터 조작 을 해 야 할 때 일괄 처리 기술 을 사용 할 수 있 고 간단 하 며 url 에 일괄 처리 파 라 메 터 를 추가 할 수 있 습 니 다.
jdbc:mysql://localhost:3306/Demo?rewriteBatchedStatements=true
예제 코드,(크 크 크,여전히 내 JDBCutils 가 연결 을 실현 하 는 도구 류...)
package com.company.jdbc3;
import com.company.jdbc.JDBCUtils;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/*
:
*/
public class BatchDemo {
/*
:
1.mysql 5.1.3x
2. url
jdbc:mysql://localhost:3306/Demo?rewriteBatchedStatements=true
3. API:
//
ps.addBatch();
//
ps.executeBatch();
//
ps.clearBatch();
*/
@Test
public void test2() throws SQLException {
//1.
Connection connection = JDBCUtils.getConnection();
//2.
PreparedStatement ps = connection.prepareStatement(
"insert into student(sid,sname,sage) values(?,?,?)");
//3.
for (int i = 1; i <= 100000 ; i++) {
ps.setInt(1,i);
ps.setString(2,"aaa"+i);
ps.setInt(3,i);
//
ps.addBatch();
if (i % 1000 == 0){
// sql
ps.executeBatch();//
//
ps.clearBatch();
}
}
//4.
JDBCUtils.close(ps,connection);
}
@Test
public void test() throws SQLException {
//1.
Connection connection = JDBCUtils.getConnection();
//2.
PreparedStatement ps = connection.prepareStatement(
"insert into student(sid,sname,sage) values(?,?,?)");
//3.
for (int i = 1; i <= 100000 ; i++) {
ps.setInt(1,i);
ps.setString(2,"aaa"+i);
ps.setInt(3,i);
// sql
ps.executeUpdate();
}
//4.
JDBCUtils.close(ps,connection);
}
}
JDBC 의 확장 지식 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JDBC 지식 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 시각화 도구 FineReport와 AWS RedShift 연결(JDBC 방법)Amazon Redshift는 클라우드의 완전 관리형, 페타바이트 규모 데이터 웨어하우스 서비스입니다. 수백 기가바이트의 데이터로 시작하여 페타바이트 이상까지 확장할 수 있습니다. 이렇게 하면 고객의 비즈니스와 고객...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.