Back-end/JAVA,Spring

JDBC Java DataBase Connectivity

cheersHena 2018. 7. 7. 22:19
반응형

JDBC 

Java DataBase Connectivity

Java에서 DBdㅔ 접근하여 DML을 사용가능하게 하는 것. 

즉, 자바가 데이터베이스를 사용할 수 있도록 연결해주는 JAVA API이다.


JDBC 커넥션은 명령문 SQL query를 만들고 실행하는 것을 지원한다. 



 JDBC API 소스코드 

package com.jdbc.util;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySqlConnection {
    
    //DB 커넥션 양식 DB별로 정해져있음.
    private final String DB_DRIVER = "com.mysql.jdbc.Driver"; // Mysql
    private final String DB_CONNECTION = "jdbc:mysql://localhost:3306/tourist_statistic?serverTimezone=UTC";
    private final String DB_USER = "root"; // mysql user id
    private final String DB_PASSWORD = "admin"; // mysql password
    
    
    public Connection getDBConnection() { //db접속

        Connection dbConnection = null;
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }

        try {
            dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
                            //db(연결만해줌)
            
            return dbConnection;//연결해준 db가 db커넥션에 담김.
            
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return dbConnection;
    }

}




명령문 (INSERT) 소스코드 

public class JDBCStatementInsert {
    private MySqlConnection mConnection = null;

    public void insertRawDataUsingProcedure() throws SQLException {
        
        // 1. csv 읽어오기
        File f = new File("/Users/hyesuelee/eclipse-workspace/jdbc_exam/src/com/jdbc/dao/jn_2013.csv"); //파일 생성 및 지정.
        ArrayList<String> data = new ArrayList<String>(); // 제네릭<타입>:
        
        try {
            FileInputStream fis = new FileInputStream(f); // 파일을 읽어오기 위해 파일에 빨대 꽂아주는 작업(아직 읽어들이진 않음.).
            InputStreamReader isr = new InputStreamReader(fis) ; //빨대로 읽어들일수 있도록 reader에 넣어줌.

            //파일 일부분 잘라내서 잠시 어딘가에 보관하기위해 버퍼 필요.
            BufferedReader br = new BufferedReader(isr); //읽어들일때 buffer 방식으로 읽어들인다. 이제 내용 읽을 수 있음..
            
            //한줄 읽어와 저장할 변수 line
            String line = null;
            //반복 횟수 모를때는 while 반복.
            while((line = br.readLine()) != null) { //br readline: 파일 한줄씩 읽어오는 것.. 파일 내용 끝나면 null값 들어가므로 반복 종료.
                data.add(line);
                //System.out.println(line);
            }
            
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        for(int i=0; i<data.size(); i++) {
            System.out.println(data.get(i)); // 데이터사이즈만큼 반복> 모든 데이터 출력.
        }
        
        
        //System.exit(0);
        
    
        
        // 2. org_data 테이블에 입력하기
        mConnection = new MySqlConnection(); //연결정보
        
        Connection dbConnection = null; //생성만.
        Statement statement = null;//기본쿼리성하는 기본클래스
        
        String insertTableSQL =null;
        int cnt =0;
        
        
    
        try {
            
            dbConnection = mConnection.getDBConnection();
            statement = dbConnection.createStatement();
            
            dbConnection.setAutoCommit(false); //오토커밋 막기: false로 셋팅. > 작업후, 커밋해주어야함.
            
            for(int i=0; i<data.size();i++) { // 데이터사이즈만큼 반복,
                
                String[] values = data.get(i).split(","); // 데이터값을 배열에 담기. split함수 사용하여 콤마로 자르기.
                
                insertTableSQL = "INSERT INTO org_data(idx,prvn_name,distc_name,attrc_name,attrc_type,"
                + "visitor_type,year,jan,feb,mar,apr,may,june,july,aug,sept,oct,nov,`dec`)"; // sql쿼리문 입력.
                
                insertTableSQL = insertTableSQL.concat("VALUES(");
                insertTableSQL = insertTableSQL.concat(values[0]);
                insertTableSQL = insertTableSQL.concat(", '"+ values[1] + "'"); // 문자열열인 경우 홑따옴표 필요하므로 concat함수사용
                insertTableSQL = insertTableSQL.concat(", '"+ values[2] + "'");
                insertTableSQL = insertTableSQL.concat(", '"+ values[3] + "'");
                insertTableSQL = insertTableSQL.concat(", '"+ values[4] + "'");
                insertTableSQL = insertTableSQL.concat(", '"+ values[5] + "'");
                insertTableSQL = insertTableSQL.concat(", "+ values[6]);
                insertTableSQL = insertTableSQL.concat(", "+ values[7]);
                insertTableSQL = insertTableSQL.concat(", "+ values[8]);
                insertTableSQL = insertTableSQL.concat(", "+ values[9]);
                insertTableSQL = insertTableSQL.concat(", "+ values[10]);
                insertTableSQL = insertTableSQL.concat(", "+ values[11]);
                insertTableSQL = insertTableSQL.concat(", "+ values[12]);
                insertTableSQL = insertTableSQL.concat(", "+ values[13]);
                insertTableSQL = insertTableSQL.concat(", "+ values[14]);
                insertTableSQL = insertTableSQL.concat(", "+ values[15]);
                insertTableSQL = insertTableSQL.concat(", "+ values[16]);
                insertTableSQL = insertTableSQL.concat(", "+ values[17]);
                insertTableSQL = insertTableSQL.concat(", "+ values[18] + ")");
                
                
                System.out.println(insertTableSQL);
                cnt += statement.executeUpdate(insertTableSQL); //바꿔야할 쿼리 넣어 업뎃 : 할때마다 cnt(삽입데이터개수)증가
                //insert/update/delete 익스큐드업데이트로 실행.
        }


    

            System.out.println(cnt+" data are inserted into org_data table!");
            dbConnection.commit(); //성공적으로 완료되었을경우: 커밋. (DB에 성공적인 데이터가 들어감. )

        } catch (SQLException e) {
            System.out.println(e.getMessage());
            dbConnection.rollback(); // 실패하였을 경우 롤백 (DB에 데이터가 들어가지 않음)

        }
        
        
        // 3. 프로시저 호출
        Savepoint sp = dbConnection.setSavepoint(); // 롤백 할 시점 저장(세이브). .
        try {
            /*
            String sql = "UPDATE org_data SET attrc_nme = '사도,낭도' WHERE idx = 27";
            statement.executeUpdate(sql);
            sql = "UPDATE org_data SET attrc_nm = '화양, 장등지구' WHERE idx = 32";
            statement.executeUpdate(sql);
            */
            
            statement.execute("call sp_add_missed_attrc_cd()"); // 프로시저 실행.
            System.out.println("finish sp_add_missed_attrc_cd");
            
            statement.executeQuery("call _sp_dynamic_add_figure('2010')"); //프로시저 실행.
            System.out.println("finish _sp_dynamic_add_figure");
            
        dbConnection.commit();// 커밋
            
        }catch(Exception e) {
            e.printStackTrace();
            dbConnection.rollback();
            
        }finally { // 실패하든 성공하든 실행되는 구간.
            dbConnection.releaseSavepoint(sp);//세이브 포인트 풀림.
            
            if (statement != null) {
                statement.close();
            }

            if (dbConnection != null) {
                dbConnection.close();
            }
        }
    }
}


반응형

'Back-end > JAVA,Spring' 카테고리의 다른 글

HTML 이란  (0) 2018.08.07
프로시저 예제.  (0) 2018.07.08
[JAVA] Collections Framework 자바 컬렉션 프레임 워크란?  (0) 2018.07.05
데이터 검증하기 - 값 보정방법 및 쿼리  (0) 2018.07.02
SQL - CURSOR 커서  (0) 2018.07.01