Java - JDBC

2020. 6. 29. 22:35Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package jdbc;
 
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class JDBC_Connect_4 {
 
    public static void main(String[] args) {
        /*
         * JDBC(Java Database Connetivity)
         * 자바를 사용하여 표준화 된 인터페이스로 DB에 접근하는 API
         * 각 DB제조사에서 제공하는 드라이버를 사용하여
         * 동일한 방법으로 파라미터만 변경하여 각 DB를 접근
         * 각 DB에 맞는 플그램을 별도로 개발하지 않고, 쉽게 컨버전 가능
         * 
         * <JDBC를 사용한 DB작업 4단계>
         * 1. 드라이버 클래스 연결
         * ->정적메서드    Class.forName()메서드 호출하여, 파라미터로 드라이버 클래스 위치를 문자열로 전달
         * ->DB 제조사 마다 드라이버 클래스 위치가 다름.ex) MYSQL : mysql-connector-XXX.jar
         * 2. DB연결
         * ->DriverMavager 클래스의 정적메서드 getConnection()메서드를 호출하여
         * ->DB접속에 필요한 URL,아이디, 패스워드 문자열을 파라미터로 전달
         * 1)MySQL URL 구성-"jdbc:mysql://DB접속주소:포트번호/DB명"
         * 2)아이디 -DB접속 시 사용할 계정
         * 3)패스워드 -2번의 계정에 대한 패스워드
         * ->DB연결 성공시,DB 연결 관련 정보가 Connection 
         * 
         * 3. SQL 구문 전달 및 실행
         * ->Connection 객체의 메서드 prepareStatement() 메서드를 호출하여
         * SQL구문을 미리 전달하며, PreparedStatement 객체 리턴됨
         * SQL 구문 작성 시 데이터를 미리 포함하지 않고, 만능문자(?)로 표시 후
         * PreparedStatement 객체의 setXXX() 메서드를 호출하여 데이터 교체
         * 3-2 전달된 SQL 구문 실행을 위해 PreparedStatement  객체의 executeXXX() 메서드 호출
         * 1)executeUpdate() : INSERT, UPDATE, DELETE 구문 실행을 위한 메서드
         * 실행 후 적용 된 레코드 수가 int 형으로 리턴
         * 
         * 2)executeQuery() : 
         * 4. 결과 처리
         * 
         * 
         * 
         */
        
        String driver="com.mysql.jdbc.Driver";//드라이버 클래스 위치
        String url="jdbc:mysql://localhost:3306/java5";//DB접속을 위한 URL
        String user="root";//DB 접속 계정명
        String password="1234";//DB 접속 패스워드
        
        //1단계 드라이버 클래스 로딩
        
            try {
                Class.forName(driver);
                System.out.println("드라이버 로드 성공");
                
                //2단계 DB연결
                Connection con=DriverManager.getConnection(url, user, password);
                System.out.println("DB 연결 성공!");
                //3단계 SQL 구문 전달 및 실행
                //3-1 SQL 구문 전달을 위해 Connection 객체의 prepareStatement()메서드 호출
                //전달할 SQL 구문 미리 생성
 
                String sql="SELECT * FROM test";
                PreparedStatement pstmt=con.prepareStatement(sql);
                
                
                //3-2 전달된 SQL 구문 실행을 위해 PreparedStatement 객체의 executeXXX()메서드 호출
                //SELECT 구문을 실행해야 하므로 executeQuery() 메서드 호출
                ResultSet rs=pstmt.executeQuery();
                
                //4단계 SQL 구문 실행에 대한 결과 처리
                //ResultSet 객체에 저장된 조회 결과(테이블 형태객체)를 사용하여
                //각 레코드 별 컬럼에 접근하여 데이터를 가져오기
                //while 문 또는 if 문을 사용하여 다음 레코드가 존재하면작업 수행(rs.next())
                                
                while(rs.next()) {//다음 레코드가 존재하는 동안 반복
                    //레코드가 존재할 경우 ResultSet 객체의 getXXX()메서드를 호출하여
                    //레코드 내의 각 컬럼에 접근 가능
                    //getXXX() 메서드이 XXX 은 가져올 데이터의 자바 데이터타입 이름
//                    int idx=rs.getInt(1);//1번 (첫번쨰) 컬럼 데이터 가져오기
                    int idx=rs.getInt("idx");//idx 라는 이름의 컬럼 데이터 가져오기
                    
//                    String name=rs.getString(2);
                    String name=rs.getString("name");
                    System.out.println("번호 : "+idx+", 이름 : "+name);
                }
                
                
                rs.close();
                pstmt.close();//PreparedStatement  객체 반환
                
                con.close();//DB 작업 완료후 Connection 객체 종료(자원반환)
            } catch (ClassNotFoundException e) {
                System.out.println("드라이버 연결 실패");
                e.printStackTrace();
            } catch (SQLException e) {
                System.out.println("DB연결 실패! - "+e.getMessage());
                e.printStackTrace();
            }
        
    }
 
}
cs

JDBC를 배웠는데 이 작업을 통해 DB에 연결되어 자바로 많은 작업을 할 수 있는 걸 알게 되었고

웹 개발의 시작이라는 걸 배웠다. 연결 자체는 금방 익혀졌고, 연결할 때마다 아직은 긴 문장들을 반복해서 적어야 한다.

이제 연결하는 법을 배웠으니 이걸 활용해 중복되는 연결 문장들을 따로 빼서 다른 곳에 만드는 모듈화를 시켜 끌어 쓰기만 하면 간편하게 연결하여 조금의 수정후  DB의 자료들을 조회, 삭제, 갱신, 삽입 등 많은 것을 할 수 있게 되니 

어떻게 해야 연결 후 다양한 작업들에 있어서 활용할 수 있는 것들을 자연스럽게 잘 활용할수 있을지 많은 고민을 해봐야 할 것 같다. 그리고 try~catch  구문을 통해 작업할 문장들을 적어놓고 작업이 성공한다면  try구문 안에 넣어 두고

catch 구문 안에는 try 구문에 작업할 문장들이 실패했을 경우에 할 작업들과 띄울 메시지들을 적어 놓으면

실패했을 경우 어떤 부문에서 실패했는지 바로 알 수 있기 때문에 빠른 유지보수가 가능할 것 같다.

까먹지 말고 잘 알아두자!

'Java' 카테고리의 다른 글

Java - DTO  (0) 2020.06.29
Java - JDBC-2  (0) 2020.06.29
Java - Set,List  (0) 2020.06.27
Java - toString(),equals()  (0) 2020.06.27
Java - 인터페이스, 마커(Marker)  (0) 2020.06.14