예제 준비물 : Oracle sqldeveloper , sts tool , ojdbc6.jar


1. sqldeveloper 에 존재하는 데이터베이스에 연동을 할것이기 때문에 사용자계정이 있어야한다.

만들어보자.


먼저 모든 권한을 갖고있는 system 계정에 로그인을 한 뒤 아래 명령어를 실행한다.


-- 앞으로 사용할 사용자이름 , 비밀번호

CREATE USER superuser IDENTIFIED BY 1234; -- 사용자를 만들면 데이터베이스가 같이 만들어짐

GRANT CREATE SESSION TO superuser;

GRANT CREATE TABLE TO superuser;

GRANT CREATE TABLESPACE TO superuser;

GRANT UNLIMITED TABLESPACE TO superuser;



2. Ojdbc6.jar를 다운받아서 buildpath를 한다.


https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6/11.2.0.4 


여기서 다운받으면 아마 될 지도 ?


oracle developer 가있다면 이 경로에 가면 jar파일이 있을것이다. 나는 여기 있는걸 복붙해서 썼다.

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib



Build Path 성공한 사진







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
package config;
 
import java.sql.Connection;
import java.sql.DriverManager;
 
public class DBConnection {
    //커넥션을 리턴하는게 목적입니다
    //PC의 서버에 연결할것입니다
    public static Connection getinstance() {
        Connection conn = null;
        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //고정
        String user = "superuser"; //사용자계정
        String password = "1234";
        
        //OracleDriver 클래스를 메모리에 로드, 알집파일 안에 있음
        //패키지 경로
        try {
            //문자열에 오류가 있을수도있으니 자체적으로 try문을 권장함
            //reflection 메모리에떠있는 타입을 찾아낸다 (getconnection 컨트롤 클릭 해보시오)
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("DB연결 성공이요");
            return conn;
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("연결 실패");
        return null;
    } // end of getinstance 
}
 
cs


문자열에서 오타가 발생하거나 인터넷이 끊겨있지 않은 이상 연결 성공 할것이다.




3. 자바로 데이터 INSERT 해보기


새 클래스를 만들고 메인함수를 만듭니다.


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
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
import config.DBConnection;
 
public class MainApp {
 
    public static void main(String[] args) {
        String sql = "INSERT INTO test1(id) VALUES(1)";
        Connection conn = DBConnection.getinstance();
        // Byte Stream  (?)
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        
    }
 
}
 
cs


아 지금 보니 id필드를 갖고있는 test1 이라는 테이블이 있어야한다 알아서 만드십쇼



4. 함수로 모듈화

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
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
import config.DBConnection;
 
public class MainApp {
 
    public static void main(String[] args) {
        추가(9);
        삭제(1);
    }
    //함수로 모듈화
    public static void 추가(int id) {
//        String sql = "INSERT INTO test1(id) VALUES("+id+")"; //이렇게하면 인젝션 뚫림
        String sql = "INSERT INTO test1(id) VALUES(?)";
        Connection conn = DBConnection.getinstance();
        // Byte Stream  (?)
        
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id); // 첫번째 '?' 부분에 id를 넣겠다.
            int result = pstmt.executeUpdate(); // 변경된 row count를 리턴, 오류 시 -1를 리턴
            System.out.println("result : " + result);
//            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    //함수로 모듈화
        public static void 삭제(int id) {
//            String sql = "INSERT INTO test1(id) VALUES("+id+")"; //이렇게하면 인젝션 뚫림
            String sql = "DELETE FROM test1 WHERE id = ?";
            Connection conn = DBConnection.getinstance();
            // Byte Stream  (?)
            
            try {
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setInt(1, id); // 첫번째 '?' 부분에 id를 넣겠다.
                int result = pstmt.executeUpdate(); // 변경된 row count를 리턴, 오류 시 -1를 리턴
                System.out.println("result : " + result);
//                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
 
}
 
cs



ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

pstmt를 알고있다면 코드이해에 조금 도움이 될것입니다...

하지만 저는 아직 모르겠네요 알게되면 추가하겠습니다.


+ Recent posts