Java 개념

JDBC 연동

ron_nie 2023. 9. 4. 16:37
728x90

1. 기본개념

1-1.  db 동작 원리

오라클이 설치 됐을 때 우리 pc에 리스너라는 것이 작동하는데 이때 포트가 하나 열린다 그 포트가 1521번 포트이다

이때 어디에 접속할건가 (localhost) 포트번호가 몇번인가(1521) sid는 무엇인가(xe)라는 것을 볼 수 있다. 이걸 통해서 결과를 보내고 얻어오고 할 수 있는 tool이 sql 디벨로퍼이다

이 개념 그대로 자바에 통신을 할 수있다. 하지만 두개는 다른 프로그램이기 때문에 오라클에서 제공하고 있는 드라이버가 필요하다

1-1-1. dirver??

오라클에서는 자신의 데이터베이스 시스템을 사용할 수 있도록 자바 코드로 미리 오라클을 사용할 수 있는 시스템을 만들어놨다 즉 드라이버의 역할은 서로 다른 시스템간의 인터페이스 역할이라고 볼 수 있다.

우리가 삼성 노트북을 사용한다고 가정할때 hp사의 프린터기를 사면 드라이버를 설치해야한다. 서로 다른 제조사 제품을 연결해주는 인터페이스를 설치하는 개념이 그게 바로 ojdbc이다

 

2. connection

2-1. 필요한 정보

String user = "유저이름";
String password = "비밀번호";
String url = "jdbc:oracle:thin:@localhost:1521:xe";

오라클 db에 접속할대 아이디와 비밀번호를 적으면 된다 아래 url은 오라클에서 정해준 url 이다

다음 드라이버 클래스를 로딩한다

Class.forName("oracle.jdbc.OracleDriver");

다운로드 받은 ojdbc에 들어있는 파일이다

그리고 드라이버에 커넥션을 한다

Connection con = DriverManager.getConnection(url,user,password);

그래서 try catch 까지 한 최종 코드가

String user = "scott";
String password = "1234";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
try{
	Class.forName("oracle.jdbc.OracleDriver");
    
    Connection con = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
	e.printStackTrace();
} catch(SQLExcpetion e) {
	e.printStackTrace();
}

만약 커넥션이 되지 않는다면 SQLException이 발생한다

3. select 쿼리 사용

3-1. StringBuffer??
문자열을 가변적으로 바꿀 수 있는 참조타입이다
append 혹은 연산자로 기존의 문자열에 추가를 자유롭게 할 수 있다.
Connection  conn = null;
Statement stmt = null;
REsultSEt rs = null;

// 스트링 버퍼 사용
StringBuffer sql = new StringBuffer();
// 문자열 추가, 쿼리문 사용
sql.append("select * from \"INFO\"");
// 드라이버와 커넥션
conn = DriverManager.getConnection(url, user, password); 
// statement 객체 생성
stmt = conn.createStatement();
// statement 객체를 사용하여 위에 만들었던 sql구문 전송
rs = stmt.excuteQuery(sql.toString());

// resultset(여기선 table 요소들)을 순회해서 있으면 true, 없으면 false 반환
// 컬럼 명을 써도 괜찮고 컬럼 위치(숫자)를 써도 된다 (자료형만 잘 쓰자)
while(rs.next()){
	System.out.println(rs.getLong(1)); // 데이터 꺼내기
    	System.out.println(rs.getString("NAME")); // NAME컬럼에 있는 값 꺼내기
    	System.out.println(rs.getDate(3)); // 세번째 컬에 있는 값을 꺼내기
    	System.out.println(rs.getString("PHONE")); // ADRESS컬럼에 있는 값 꺼내기
	System.out.println();
}

3. insert(update, delete 동일) 쿼리 사용

Connection conn = null;
PreparedStatement pstmt = null;

String user = "scott";
String password = "tiger";
String url = "jdbc:oracle:thin:@localhost:1521:xe:;
try{
	Class.forName("oracle.jdbc.OracleDriver");
    
    StringBuffer sql = new StringBuffer();
    sql.append("insert into \"info"\(\"num\", \"name\", \"birth\". \"phone\")");
    sql.append("values (\"info_seq\", nextval, ?, sysdate, ?)");
    
    String name = in.nextLine();
    String phone = in.nextLine();
	
    conn = DriverManager.getConnection(url, user, password);
    pstmt = conn.prepareStatement(sql.toString());
    pstmt.setString(1, name);
    pstmt.setString(3, phone);
    
    int result = pstmt.executeUpdate(); // insert, update, delete
} catch() {

} catch() {

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형