자바 기반 JDBC 데이터베이스 연결 및 기본 작업

1.JDBC 개요
  • JDBC 는 자바 Database Connectivity 라 고 부 릅 니 다.특정한 데이터 베이스 관리 시스템 에 독립 되 고 통용 되 는 SQL 데이터 베 이 스 를 액세스 하고 조작 하 는 공공 인터페이스 로 데이터 베 이 스 를 방문 하 는 표준 자바 라 이브 러 리 를 정 의 했 습 니 다.이 라 이브 러 리 를 사용 하면 표준 적 인 방법 으로 데이터 베이스 자원
  • 을 편리 하 게 방문 할 수 있 습 니 다.
  • 쉽게 말 하면 JDBC 는 자바 를 통 해 JDBC 드라이버 를 제공 하 는 모든 데이터 베이스 시스템 을 연결 하 라 는 것 이다.예 를 들 어 저 는 SQLServer 데이터 와 Mysql 데이터 베 이 스 를 가지 고 있 습 니 다.저 는 자바 의 JDBC 를 통 해 앞에서 SQL 의 모든 조작 을 배 울 수 있 고 명령 행 에서 각각 두 개 를 연결 하지 않 아 도 됩 니 다.이렇게
  • 在这里插入图片描述  
    2.JDBC 조작 데이터베이스,조작 표 절차
    JDBC 가 데이터베이스 와 표를 조작 하 는 절 차 를 정리 한 후에 그것들 을 상세 하 게 소개 하 겠 습 니 다.
    1.드라이버 등록(한 번 만)
    2.연결 만 들 기(연결)
    3.SQL 을 실행 하 는 문 구 를 만 듭 니 다(Statement)
    4.실행 문
    5.실행 결과 처리(ResultSet)
    6.자원 방출
    여기 보시 면 익숙 하 시 죠?맞아요.앞에서 Mysql 을 배 운 것 처럼 먼저 JDBC 의 구조 와 데이터 베 이 스 를 연결 하 는 것 을 소개 하 겠 습 니 다.
    3.JDBC 시스템 구조 와 JDBC API
    JDBC 시스템 구 조 는 아래 두 부분 으로 구성 된다.
  • 응용 을 위 한 API:Java API,추상 인터페이스,공급 용 프로그램 개발 자가 사용(데이터베이스 연결,SQL 문장 실행,결과 획득).
  • 데이터 베 이 스 를 위 한 API:Java Driver API,개발 업 체 가 데이터베이스 드라이버 를 개발 하여 사용 할 수 있 도록 제공
  • JDBC API
  • JDBC API 는 일련의 인터페이스 로 응용 프로그램 이 데이터 베 이 스 를 연결 하고 SQL 문 구 를 실행 하 며 결 과 를 되 돌려 줍 니 다
  • .
    在这里插入图片描述  
    4.등록 및 로드 드라이브
    드라이버 인터페이스
  • java.sql.Driver 인 터 페 이 스 는 모든 JDBC 드라이버 가 실현 해 야 할 인터페이스 입 니 다.이 인 터 페 이 스 는 데이터베이스 업 체 에 제공 되 는 것 으로 서로 다른 데이터베이스 업 체 에 서로 다른 실현 을 제공 합 니 다
  • 프로그램 에서 드라이버 인 터 페 이 스 를 실현 하 는 클래스 에 직접 접근 하지 않 고 드라이버 관리자 클래스(java.sql.DriverManager)에서 드라이버 를 호출 합 니 다
  • Oracle 의 구동:Oacle.jdbc.driver.Oracle Driver
  • mySql 의 구동:com.mysql.jdbc.Driver
  • JDBC 드라이브 불 러 오기 및 등록
    앞에서 말 했 듯 이 JDBC 는 하나의 인터페이스 와 서로 다른 데이터 베 이 스 를 통 해 JDBC 의 구동 을 제공 하여 데 이 터 를 완성 하 는 것 입 니 다.따라서 우 리 는 구동 을 JDBC 에 불 러 오고 로드 구동 은 두 가지 방식 이 있 습 니 다.
    방식 1:JDBC 드라이브 를 불 러 오 려 면 Class 류 의 정적 방법 forName()을 호출 하여 불 러 올 JDBC 드라이브 의 클래스 이름 을 전달 해 야 합 니 다.
    
    Class.forName(“com.mysql.jdbc.Driver”);
    방식 2:DriverManager 클래스 는 드라이버 관리자 클래스 로 드라이버 관 리 를 담당 합 니 다.
    
    DriverManager.registerDriver(com.mysql.jdbc.Driver);
    드라이버 인터페이스의 드라이버 클래스 에 정적 코드 블록 이 포함 되 어 있 기 때문에 드라이버 클래스 의 인 스 턴 스 를 명시 적 으로 호출 하지 않 습 니 다.이 정적 코드 블록 에 서 는 드라이버 Manager.registerDriver()방법 으로 자신의 인 스 턴 스 를 등록 합 니 다.
    5.연결 구축(연결)
  • 우리 가 드라이버 를 등록 하고 불 러 오 면 데이터 베 이 스 를 연결 할 수 있 습 니 다.방법 은 앞에서 우리 가 Mysql 을 배 운 것 과 마찬가지 로 먼저 계 정,비밀번호 등 정 보 를 입력 해 야 합 니 다
  • .
  • JDBC 에서 DriverManager 류 의 getConnection()방법 을 데이터베이스 연결
  • 에 호출 해 야 합 니 다.
  • user,password 는'속성 명=속성 값'방식 으로 데이터 베 이 스 를 알려 줄 수 있 습 니 다.
  • JDBC 에서 데이터 베 이 스 를 연결 하려 면 특수 한 속성 이 필요 합 니 다.JDBC URL 은 우리 가 조작 해 야 할 데이터 베 이 스 를 연결 하 는 데 사 용 됩 니 다
  • .
  • JDBC URL 의 기준 은 세 부분 으로 구성 되 며 각 부분 간 에 콜론 으로 구분 된다.
  • 
    jdbc:   :   
      :JDBC URL      jdbc 
       :                
       :          。               ,                      。     (      ip  ),   ,    
    다음은 제 가 흔히 볼 수 있 는 JDBC URL 을 몇 개 열거 하 겠 습 니 다.여러분 이 사용 하 실 때 바로 복사 하 시 면 됩 니 다.
    
    //    Oracle      ,      : 
    jdbc:oracle:thin:@localhost:1521:DatabaseName
    //    SQLServer      ,      :
    jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid
    //    MYSQL      ,      :   
    jdbc:mysql://localhost:3306/DatabaseName
    //        ,  url     
    jdbc:mysql://localhost:3306/     ?useUnicode=true&characterEncoding=UTF-8
    
    얘 들 아,우리 가 자바 를 사용 하여 데이터베이스 에 데 이 터 를 삽입 할 때 중국어 라면 먼저 데이터베이스 와 표 의 인 코딩 은 utf 8 이 고,그 다음 에 우 리 는 URL 에서 인 코딩 이 UTF-8 이 라 고 성명 해 야 한다.그렇지 않 으 면 데 이 터 를 삽입 하 는 것 은?이다.만약 에 이 문제 에 부 딪 히 면 무시 해 야 한다.
    자,다음은 데이터 베 이 스 를 연결 하 는 예제 코드 입 니 다.여 기 는 Mysql 데이터 베 이 스 를 조작 합 니 다.
    
    package com.company;
    //      
    import org.junit.Test;
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.Driver;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class Demo1 {
    /*
    *  connect     
    *  */
        public static void main(String[] args) {
            System.out.println("JDBC Test...");
        }
    	
    	//   Driver        
        @Test
        public void test1() throws SQLException {
    		// 
            Driver driver=new com.mysql.jdbc.Driver();
            Properties p1 = new Properties();
            p1.setProperty("user", "root");
            p1.setProperty("password", "mysql123");
            Connection connect = driver.connect("jdbc:mysql://localhost:3306/myemployees", p1);
            System.out.println("connect = " + connect);
    
        }
    	
    	//   DriverManager        
        @Test
        public void test2() throws SQLException {
            com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
            Properties p1 = new Properties();
            p1.setProperty("user", "root");
            p1.setProperty("password", "mysql123");
            DriverManager.registerDriver(driver);
            Connection connection = DriverManager.getConnection
                    ("jdbc:mysql://localhost:3306/myemployees", p1);
    
            System.out.println("connection = " + connection);
    
        }
    	//              ,   IO               
        @Test
        public void test3() throws Exception {
            Properties p = new Properties();
    
            FileInputStream fis = new FileInputStream("p.properties");
            p.load(fis);
            fis.close();
            Class.forName(p.getProperty("driverClass"));
            Connection connection = DriverManager.getConnection(p.getProperty("url"),
                    p.getProperty("user"), p.getProperty("password"));
            System.out.println("connection = " + connection);
    
        }
    }
    
    properties 파일 내용
    
    url=jdbc:mysql://localhost:3306/myemployees
    user=root
    password=mysql123
    driverClass=com.mysql.jdbc.Driver
    6.Prepared Statement 사용
    등록 드라이브 와 데이터 베 이 스 를 연결 하 는 것 을 소개 합 니 다.다음은 SQL 을 조작 하 는 것 입 니 다.JDBC 에서 SQL 을 조작 하려 면 Connection 대상 의 prepared Statement()방법 으로 prepared Statement 대상 을 가 져 와 야 합 니 다.
    Prepared Statement 인 터 페 이 스 는 Statement 의 하위 인터페이스 로 미리 편 역 된 SQL 문 구 를 표시 합 니 다.
    Prepared Statement 대상 이 대표 하 는 SQL 문장의 매개 변 수 는 물음표(?)를 사용 합 니 다.이 매개 변 수 를 설정 하려 면 Prepared Statement 대상 의 setXxx()방법 을 사용 하 십시오.setXxx()방법 은 두 개의 매개 변수 가 있 습 니 다.첫 번 째 매개 변 수 는 설정 할 SQL 문장의 매개 변수의 색인(1 부터)이 고 두 번 째 는 설 정 된 SQL 문장의 매개 변수의 값 입 니 다.
    SQL 을 조작 하기 전에 데이터 형식 을 설명해 야 합 니 다.SQL 과 자바 의 데이터 형식 이름 이 다르다 는 것 을 알 고 있 기 때문에 인 코딩 할 때 주의해 야 합 니 다.
    자바 형식
    SQL 형식
    boolean
    BIT
    byte
    TINYINT
    short
    SMALLINT
    int
    INTEGER
    long
    BIGINT
    String
    CHAR,VARCHAR,LONGVARCHAR
    byte array
    BINARY , VAR BINARY
    java.sql.Date
    DATE
    java.sql.Time
    TIME
    java.sql.Timestamp
    TIMESTAMP
    Prepared StatementSQL 을 사용 하 는 작업 절차
    1.연결 대상 의 preparedStatement 방법 을 호출 하여 preparedStatement 대상 을 만 듭 니 다.
    2.사전 컴 파일 된 SQL 문 구 를 완성 합 니 다.
    3.SQL 문장의 자리 표시 자 에 값 을 부여 합 니 다.
    4.SQL 문 구 를 제출
    5.자원 방출
    다음은 SQL 첨삭 과 검 사 를 위 한 예제 코드 입 니 다.
    
    //   PreparedStatement            
    package com.company.jdbc;
    
    import org.junit.Test;
    
    import java.io.FileInputStream;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    /*
            , , ,    
     */
    public class CRUDDemo {
    
        /*
                  
    
            CREATE TABLE student(
            sid INT,
            sname VARCHAR(20),
            sage INT
            )
         */
        @Test
        public void test() throws SQLException {
            //1.         
            Connection connection = JDBCUtils.getConnection();
            //2.   
            // ? :    (                 )
            String sql = "insert into student(sid,sname,sage) values(?,?,?)";
            PreparedStatement ps = connection.prepareStatement(sql);
            //3.      
            /*
            setInt(int parameterIndex, int x)
            parameterIndex :     (      )
            x :   
             */
            ps.setInt(1,100);
            //                   
            ps.setString(2,"longge");
            ps.setInt(3,20);
            //4.  sql
            //    :          
            int result = ps.executeUpdate();// , ,         
            System.out.println(" "+result+"       ");
            //5.   
            JDBCUtils.close(ps,connection);
        }
    
        /*
             
         */
        @Test
        public void test2() throws SQLException {
            //1.         
            Connection connection = JDBCUtils.getConnection();
            //2.   
            String sql = "update student set sid=? where sid=?";
            PreparedStatement ps = connection.prepareStatement(sql);
            //3.      
            ps.setInt(1,10);
            ps.setInt(2,100);
            //4.  sql  
            int result = ps.executeUpdate();
            System.out.println(" "+result+"       ");
            //5.    
            JDBCUtils.close(ps,connection);
        }
    
        /*
                
         */
        @Test
        public void test3() throws SQLException {
            //1.         
            Connection connection = JDBCUtils.getConnection();
            //2.   
            String sql = "delete from student where sid=?";
            PreparedStatement ps = connection.prepareStatement(sql);
            //3.      
            ps.setInt(1,10);
            //4.  sql  
            int i = ps.executeUpdate();
            System.out.println(" "+i+"       ");
            //5.    
            JDBCUtils.close(ps,connection);
        }
    
        /*
                
         */
        @Test
        public void test4() throws Exception {
            List<Student> students = getStudent();
            for (Student s : students) {
                System.out.println(s);
            }
    
        }
    
        public List<Student> getStudent() throws Exception {
            //1.         
            Connection connection = JDBCUtils.getConnection();
            //2.   
            PreparedStatement ps = connection.prepareStatement("select sid,sname,sage from student");
            //3.  sql  
            ResultSet resultSet = ps.executeQuery();//          
    
            List<Student> list =  new ArrayList<>();
            //4.  ResultSet
            while(resultSet.next()){//     
                /*
                    getInt(String columnLabel) :            
                    getInt(int columnIndex) :              
                 */
                int sid = resultSet.getInt("sid");
                String sname = resultSet.getString("sname");
                int sage = resultSet.getInt("sage");
    
                //System.out.println(sid + " " + sname + " " + sage);
                list.add(new Student(sid,sname,sage));
            }
            //5.    
            JDBCUtils.close(ps,connection,resultSet);
    
            return list;
        }
    
    }
    
    
    JDBCutils 데이터베이스 연결 도구 클래스
    
    //JDBCUtils ,                 
    package com.company.jdbc;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    
    public class JDBCUtils {
        private static String driverClass;
        private static String url;
        private static String username;
        private static String password;
    
        static{
            FileInputStream fis = null;
            try {
                //1.         
                //  Properties    
                //1.  Properties  
                Properties p = new Properties();
                //2.   
                fis = new FileInputStream("jdbc.properties");
                p.load(fis);
                driverClass = p.getProperty("driverClass");
                url = p.getProperty("url");
                username = p.getProperty("username");
                password = p.getProperty("password");
            }catch (Exception e){
                //       
                e.printStackTrace();
                //              
                throw new RuntimeException("xxxxxxxx");
            }finally {
                if (fis != null){
                    //3.   
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        /*
                  
         */
        public static Connection getConnection(){
            try {
                Class.forName(driverClass);
                //         
                Connection connection = DriverManager.getConnection(url, username, password);
                return connection;
            }catch (Exception e){
                e.printStackTrace();
                throw new RuntimeException("      ");
            }
        }
    
        /*
                
         */
        public static void close(PreparedStatement ps, Connection connection) {
            if (ps != null){
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
    
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    
        public static void close(PreparedStatement ps, Connection connection, ResultSet resultSet) {
            close(ps,connection);
            if (resultSet != null){
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    
    
    7.ResultSet 에 대한 설명
    앞에서 데 이 터 를 삭제 하고 검사 하 는 작업 에서 조회 작업 은 비교적 복잡 하 다.왜냐하면 우 리 는 데이터 베 이 스 를 되 돌려 주 는 결 과 를 받 아야 하기 때문에 우 리 는 ResultSet 인 터 페 이 스 를 알 아야 한다.이것 은 데이터 베이스 업 체 에 의 해 이 루어 진다.
    조 회 는 Prepared Statement 의 executeQuery()방법 을 호출 해 야 합 니 다.조회 결 과 는 ResultSet 대상 입 니 다.
    ResultSet 대상 은 현재 데이터 줄 을 가리 키 는 커서 를 유지 합 니 다.처음에 커서 는 첫 줄 전에 ResultSet 대상 의 next()방법 으로 다음 줄 로 이동 할 수 있 습 니 다.구체 적 인 방법 은 바 이 두 를 스스로 정할 수 있 습 니 다.
    ResultSet:결과 집합 을 대표 합 니 다.JDBC 를 사용 하여 조회 한 결 과 를 봉 인 했 습 니 다.Prepared Statement 대상 의 executeQuery()를 호출 하면 결과 집합 을 얻 을 수 있 습 니 다.ResultSet 이 되 돌아 오 는 것 은 사실상 데이터 시트 입 니 다.데이터 시트 의 첫 번 째 기록 앞 을 가리 키 는 지침 이 있 습 니 다.
    在这里插入图片描述  
    8.총화
    이 장 에 서 는 주로 JDBC 와 JDBC 가 데이터 베 이 스 를 어떻게 연결 하고 데이터 의 첨삭 과 수정 작업 을 실현 하 는 지 소개 한다.다음 장 은 JDBC 의 확장 지식 이다.>우리 가 실현 한 데이터 베 이 스 를 연결 하 는 도구 류 는 그렇게 엄밀 하지 않 기 때문에 다음 장 은 하나의 구 조 를 소개 하 는 것 이다.앞으로 데이터 베 이 스 를 연결 하 는 데 이렇게 번 거 롭 지 않 아 도 된다.
    자바 기반 의 JDBC 데이터베이스 연결 과 기본 작업 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JDBC 와 관련 된 데이터베이스 연결 과 기본 작업 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기