자바 개발 기초(3)-JDBC 연결 풀
9258 단어 Java
프롤로그
흔히 볼 수 있 는 연결 탱크DBCP 연결 풀C3P 0 연결 풀총화
링크 주소
머리말
데이터베이스 연결 이 매우 비싸다.데이터베이스 와 의 연결 을 가 져 옵 니 다.전체 시스템 은 뒤에서 자원 을 소모 하 는 일 을 많이 해 야 합 니 다.대부분의 경우 sql 문 구 를 실행 하 는 것 보다 연결 을 만 드 는 시간 이 더 깁 니 다.그래서 자바 는 직접 연결 을 만 드 는 방식 대신 연결 탱크 체 제 를 사용 했다.
흔 한 연결 풀
자바 는 데이터베이스 연결 탱크 에 공공 인 터 페 이 스 를 제공 합 니 다:javax.sql.dataSource,각 업 체 는 자신의 연결 탱크 가 이 인 터 페 이 스 를 실현 하도록 해 야 합 니 다.이렇게 하면 응용 프로그램 은 서로 다른 제조 업 체 의 연결 탱크 를 편리 하 게 전환 할 수 있 습 니 다!주:
연결 탱크 는 등록 구동 과 연결 두 부분 기능 을 실현 합 니 다.
DBCP 연결 풀
Properties ps = new Properties();
ps.load(new FileInputStream("dbcpconfig.properties"));
방식 2:dbcpconfig.properties 가 src 디 렉 터 리 에서 사용 할 때
//
ps.load(DBCPUtils02.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
작성 도구 클래스
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCPUtils {
// :
private static DataSource ds = null;
// , ds
static{
Properties ps = new Properties();
try {
// dbcpconfig.properties
// ps.load(new FileInputStream("dbcpconfig.properties"));
// dbcpconfig.properties src
ps.load(DBCPUtils02.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
ds = BasicDataSourceFactory.createDataSource(ps);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
// , DriverManager ,
return ds.getConnection();
}
//
public static void closeAll(Connection conn, Statement st, ResultSet rs){
//
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBCPUtilsTestDemo {
public static void main(String[] args) throws SQLException {
// insert();
// update();
query();
}
public static void insert() throws SQLException{
// 1.
Connection conn = DBCPUtils.getConnection();
// 2.
String sql = "insert into users (username,passwd) values (?, ?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setObject(1, "coco");
pst.setObject(2, "2426");
// 3.
int rows = pst.executeUpdate();
System.out.println(rows);
DBCPUtils.closeAll(conn, pst, null);
}
public static void update() throws SQLException{
// 1.
Connection conn = DBCPUtils.getConnection();
// 2.
Statement st = conn.createStatement();
// 3. sql
int rows = st.executeUpdate("update users set passwd = 'co' where uid = 6");
System.out.println(rows);
DBCPUtils.closeAll(conn, st, null);
}
public static void query() throws SQLException{
// 1.
Connection conn = DBCPUtils.getConnection();
// 2.
Statement st = conn.createStatement();
// 3.
ResultSet rs = st.executeQuery("select * from users where username = 'coco'");
// 4.
while(rs.next()){
System.out.println(rs.getObject("uid") + "\t" + rs.getObject("username") + "\t"
+ rs.getObject("passwd"));
}
DBCPUtils.closeAll(conn, st, rs);
}
}
# ,
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db02
username=root
password=root
#
initialSize=10
#
maxActive=50
#
maxIdle=20
#
minIdle=5
#
maxWait=60000
#JDBC :[ =property;]
# :"user" "password" , 。
connectionProperties=useUnicode=true;characterEncoding=utf8
# (auto-commit) 。
defaultAutoCommit=true
#driver default (read-only) 。
# , “setReadOnly” 。( , :Informix)
defaultReadOnly=
#driver default (TransactionIsolation)。
# :( javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
C3P 0 연결 탱크
사용 절차:
jar 패키지 c3p0-0.9.1.2.jar mchange-commons-java-0.2.11.jar c3p 0 다운로드 주소 추가
작성 도구 클래스
/**
* C3P0 javax.sql.DataSource :
* ComboPooledDataSource
*/
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
// C3P0-config.xml
// static
static{
}
public static Connection getConnection() throws SQLException{
// , C3P0
return ds.getConnection();
}
//
public static void closeAll(Connection conn, Statement st, ResultSet rs){
//
if(conn != null){
try {
conn.close(); // ,
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class C3P0UtilsTestDemo {
public static void main(String[] args) throws Exception {
// insert();
// delete();
query();
}
public static void insert() throws Exception{
//1.
Connection conn = C3P0Utils.getConnection();
//2.
Statement st = conn.createStatement();
//3. sql
int rows = st.executeUpdate("insert into users (username, passwd) values ('lanna', 'summer')");
System.out.println(rows);
//4.
C3P0Utils.closeAll(conn, st, null);
}
public static void delete() throws SQLException{
//1.
Connection conn = C3P0Utils.getConnection();
//2.
String sql = "delete from users where username = ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setObject(1, "coco");
int rows = pst.executeUpdate();
System.out.println(rows);
// 4.
C3P0Utils.closeAll(conn, pst, null);
}
public static void query() throws SQLException{
//1.
Connection conn = C3P0Utils.getConnection();
//2.
String sql = "select * from users";
PreparedStatement pst = conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while(rs.next()){
System.out.println(rs.getObject("uid")+"\t"+rs.getObject("username")
+"\t"+rs.getObject("passwd"));
}
// 4.
C3P0Utils.closeAll(conn, pst, rs);
}
}
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/db02
root
root
10
총결산
본 고 는 JDBC 의 두 가지 연결 풀 DBCP 와 C3P 0 을 소개 한다.코드 가 많이 봉 해 져 있어 서 일부 못 알 아 봐 도 쓸 수 있 지만 좀 힘 들 어 요.예전 에 C 언어 를 많이 봤 나 봐 요.
링크 주소
Apache 홈 페이지 다운로드 주소 c3p 0 다운로드 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.