자바 원생 조작 JDBC 연결 및 원리 상세 설명
JDBC 는 자바 DataBase Connectivity 라 고도 부른다.즉,자바 데이터베이스 연결 이다.말하자면 자바 언어 로 데이터 베 이 스 를 조작 하고 통 일 된 API 액세스 데이터 베 이 스 를 제공 하 는 것 이다.
원리
JDBC 는 주로 자바 가 데이터 베 이 스 를 연결 하 는 데 사용 되 는데 어떤 데이터 베 이 스 를 연결 할 수 있 는 지 고정 되 지 않 습 니 다.사실은 여러 가지 데이터 베 이 스 를 연결 할 수 있 습 니 다.그리고 일반적으로 Oacle 과 my sql 을 연결 할 수 있 습 니 다.보통 이 두 가지 입 니 다.그러나 JDBC 가 이렇게 많은 데이터 베 이 스 를 연결 할 수 있 는 이상 개발 하기 가 너무 번 거 로 웠 다.그래서 sun 회사 사람들 은 방법 을 생각해 냈 다.나 는 규범 을 정의 했다.모두 이 규범 에 따라 자신의 회사 가 데이터 베 이 스 를 방문 하 는 실현 을 실현 했다.이 규범 은 JDBC 로 JDBC 규범 에 따라 자신의 데이터 베 이 스 를 방문 할 수 있 는 API 를 데이터베이스 구동 이 라 고 부른다.
3.데이터베이스 조작
데이터베이스 작업 은 6 단계(추가,삭제,변경 은 5 단 계 를 뛰 어 넘 고 6 단 계 를 볼 수 있 음)로 나 뉜 다.
1.우선,프로젝트 에서 mysql 연결 jar 패 키 지 를 가 져 왔 는 지 확인 합 니 다.예 를 들 어 mysql-connector-java-5.1.6-bin.jar
2.반사 등록 데이터베이스 드라이버,Class.forName(name)을 사용 합 니 다.
3.DriverManager.getConnection(url,username,password)구조 기 를 통 해 데이터베이스 연결 가 져 오기
4.Connection 연결 대상 을 통 해 데이터베이스 작업 대상 을 가 져 옵 니 다.PrepareStatement 또는 Statement
5.가 져 온 Statement 대상 을 통 해 executeQuery()작업 을 수행 하고 ResultSet 결과 집합 으로 돌아 가 며 비어 있 는 지 여 부 를 판단 해 야 합 니 다.
6.획득 한 Statement 대상 이 executeUpdate()작업 을 수행 하여 영향 을 받 은 줄 수 를 되 돌려 주 고 성공 여 부 를 판단 합 니 다.
7.연결 자원 을 방출 하고 닫 는 순 서 는 ResultSet->PrepareStatement/Statement->Connection 입 니 다.
설명 관건 클래스:
(1)DriverManager:데이터베이스 드라이버 를 관리 합 니 다.
(2)Connection:데이터베이스 에 만들어 진 연결 을 관리 합 니 다.
(3)Statement:실행 할 sql 체 를 데이터베이스 에 제출 하 는 것 을 책임 집 니 다.
(4)ResultSet:sql 조회 문 구 를 실행 하여 되 돌아 오 는 결과 집합 입 니 다.
(5)Prepared Statement:미리 컴 파일 된 SQL 을 사용 하여 SQL 주입 을 방지 할 수 있 으 며,Statment 는 정적 SQL 만 사용 할 수 있 습 니 다.
Prepared Statement 과 Statment 의 차이 점:
문법 이 다 릅 니 다:Prepared Statement 은 사전 컴 파일 된 sql 을 사용 할 수 있 고 Statment 은 정적 sql 만 사용 할 수 있 습 니 다.
효율 이 다 릅 니 다:Prepared Statement 은 sql 캐 시 영역 을 사용 할 수 있 습 니 다.효율 은 Statment 보다 높 습 니 다.
안전성 이 다 릅 니 다:Prepared Statement 은 sql 주입 을 효과적으로 방지 할 수 있 으 며,Statment 은 sql 주입 을 방지 할 수 없습니다.
4.데이터 뱅 크 의 증가,삭제,수정,사례 조사
도구 클래스(상대 적 으로 유연 하 게 교체 할 수 있 음):
package com.bnd.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
/**
* @author mbql:
* @version :2021 1 10 5:14:16
* JDBC
*/
public class JdbcUtils {
private static final String driverName = "com.mysql.jdbc.Driver"; //
private static final String url = "jdbc:mysql://39.108.146.20:3307/jsp?useUnicode=true&characterEncoding=utf-8"; // url
private static final String userName = "root"; //
private static final String password = "123456"; //
private static Connection conn = null; //
private static PreparedStatement preparedStatement = null; //
static {
try {
Class.forName(driverName); // 2、
conn = DriverManager.getConnection(url, userName, password); // 3、
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @return
*/
public static ResultSet queryData() {
ResultSet result = null;
String sql = "select id, name, pwd from user"; // SQL
try {
preparedStatement = conn.prepareStatement(sql); // 4、 SQL
result = preparedStatement.executeQuery(); // 5、
while (result.next()) {
int id = result.getInt(1);
String name = result.getString(2);
String pwd = result.getString(3);
System.out.println("id:" + id + "--> name:" + name + "--> pwd:" + pwd);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7、
close(conn, preparedStatement, result);
}
return result;
}
/**
*
* @return
*/
public static int addData() {
String sql = "insert into user(name,pwd) values(?, ?)";
try {
preparedStatement = conn.prepareStatement(sql); // 4、 SQL
preparedStatement.setString(1, "tom");
preparedStatement.setString(2, "abc123");
int count = preparedStatement.executeUpdate(); // 6、
if (count > 0) {
return count;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7、
close(conn, preparedStatement, null);
}
return -1;
}
/**
*
* @return
*/
public static int updateData() {
String sql = "update user set name = ?, pwd = ? where id = ?";
try {
preparedStatement = conn.prepareStatement(sql); // 4、 SQL
preparedStatement.setString(1, "sueno");
preparedStatement.setString(2, "qwe123");
preparedStatement.setInt(3, 10);
int count = preparedStatement.executeUpdate(); // 6、
if (count > 0) {
return count;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7、
close(conn, preparedStatement, null);
}
return -1;
}
/**
*
* @return
*/
public static int deleteData() {
String sql = "delete from user where id = ?";
try {
preparedStatement = conn.prepareStatement(sql); // 4、 SQL
preparedStatement.setInt(1, 11);
int count = preparedStatement.executeUpdate(); // 6、
if (count > 0) {
return count;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7、
close(conn, preparedStatement, null);
}
return -1;
}
/**
*
* @param conn
* @param statement
* @param rs
*/
public static void close(Connection conn, Statement statement, ResultSet rs) {
if (Objects.nonNull(rs)) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (Objects.nonNull(statement)) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (Objects.nonNull(conn)) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
테스트 클래스:
package com.bnd.util;
import java.sql.ResultSet;
/**
* @author mbql:
* @version :2021 1 10 6:00:30
*
*/
public class TestJdbc {
public static void main(String[] args) {
//
// ResultSet rs = JdbcUtils.queryData();
// System.out.println(rs);
//
// int count = JdbcUtils.addData();
// if (count > 0) {
// System.out.println(" !");
// }
//
// int count = JdbcUtils.updateData();
// if (count > 0) {
// System.out.println(" !");
// }
//
// int count = JdbcUtils.deleteData();
// if (count > 0) {
// System.out.println(" !");
// }
}
}
총화1.간단 한 Jdbc 로 데이터 베 이 스 를 연결 하여 CRUD 를 교묘 하 게 실현 했다.사실 실현 은 어렵 지 않 습 니 다.데이터베이스 연결 절 차 를 기록 하면 됩 니 다.
2.데이터 베이스 작업 자체 가 하나의 데이터 베이스 규범 으로 서로 다른 구동 에 따라 서로 다른 데이터 베 이 스 를 연결 하고 실행 가능 한 작업 을 실현 할 수 있다.
3.드라마 에서 상기 한 연결 을 통 해 알 수 있 듯 이 데이터 뱅 크 연결 은 성능 을 소모 하고 빈번 한 데이터 뱅 크 작업 을 하 며 자원 을 신속하게 방출 하지 않 으 면 IO 가 막 힐 수 있다.
자바 네 이 티 브 작업 JDBC 연결 및 원리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.자바 네 이 티 브 작업 JDBC 연결 및 원리 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.