자바 원생 조작 JDBC 연결 및 원리 상세 설명

8830 단어 자바원생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 연결 및 원리 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기