package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//JDBC (Java DataBase Connectivity) 라이브러리를 이용한 DB 자료 처리하기
부연 설명 ( From 블로그 ) : 자바와 오라클을 연동하기 위해 JDBC (JAVA DATABASE CONNECTIVITY) 가 필요하다. JDBC 는 데이터베이스(oracle, mysql 등등 )를 자바를 이용하여 조작하기 위한 자바 라이브러리이다.
public class JdbcTest01 {
/*
데이터베이스 처리 순서 ==> JDBC 라이브러리를 프로젝트에 등록한 후 (BUILD PATH ojdbc6.jar)
1. 드라이버 로딩 ==> 라이브러리를 사용할 수 있게 메모리에 읽어 들이는 작업
Class.forName("oracle.jdbc.driver.OracleDriver");
2. DB에 접속하기 ==> 접속이 성공하면 Connection 객체가 반환된다.
DriverManager.getConnection() 메서드를 이용한다.
3. 질의 ==> SQL 문장을 DB 서버로 보내서 결과를 얻어오는 작업
(Connection 객체를 이용해서 Statement 객체 또는 PreparedStatement객체를 구한 후
이 두 객체 중 하나를 이용하여 작업을 수행한다. )
4. 처리결과 ==> 질의 결과를 받아서 원하는 작업을 수행한다.
1) SQL 문이 select 문일 경우에는 select 한 결과가 ResultSet 객체에 저장되어 반환된다.
2) SQL 문이 select 문이 아닐 경우(insert문 , update문, delete 문 등)에는 정수값을 반환한다. ->
이유 : select 문은 조회이기 때문에 조회된 결과를 자바에서 읽어와야 하기 때문에 ResultSet 객체에 반환되는거고 insert 문, update 문, delete 문등은 sql에서 변경이 되는것이고 이것이 자바로 돌아올 데이터는 없다. 그냥 자바가 변경된것.
(이 정수값은 SQL문이 실행에 성공한 레코드 수이다. )
5. 사용한 자원을 반납한다. ==> 사용한 객체의 close() 메서드 이용
*/
public static void main(String[] args) {
//DB 작업에 필요한 객체
Connection conn = null ; //접속이 성공되면 Connect 객체 반환
Statement stmt = null;
ResultSet rs = null; // -> select 문으로 조회된거 저장되는 부분
try {
// 1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. DB 연결 ==> Connection 객체 생성
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe",
"Aurora",
"java");
//참고 : jdbc:oracle:thin:@localhost:1521:xe
-JDBC 드라이버가 thin 타입을 의미한다. ( 자바용 오라클 JDBC 드라이버는 두가지
타입이 있는데 하나는 JAVA jdbc thin 드라이버이고, 다른 하나는 OCI 기반의 드라이버라고 한다.
username/password 는 option 이다. 반드시 명기할 필요는 없다.
1521 은 오라클 listener 의 포트번호이다.
//골뱅이 뒤에 자기ip 주소를 쓰면됨 java 는 비밀번호
// 3-1. 실행할 SQL 문 작성
String sql = "select * from lprod"; //; 은 빼야한다.
//참고 : sql 문을 작성할때 주의할 점은 띄어쓰기를 주의해야 한다.
// 3-2. Statement객체 생성 ==> Connection 객체를 이용한다.
stmt = conn.createStatement();
// 4. SQL 문을 DB 서버로 전송해서 실행하고 결과를 얻어온다.
// (지금은 실행할 SQL 문이 select 문이기 때문에 결과가 ResultSet 객체에 저장되어 반환된다. )
rs = stmt.executeQuery(sql);
//executeUpadate 는 insert, update, delete 등이 실행될때 사용한다.
// 5.결과 처리하기 ==> 한 레코드씩 화면에 출력하기
// ==> ResultSet 에 저장된 데이터(select 문 실행 했을때 )를 차례로 꺼내오려면 반복문과 next() 메서드를 이용한다.
System.out.println("==처리 결과 출력 ==");
/*
* rs.next 는 ResultSet 객체의 데이터를 가리키는 포인터를 다음 레코드 자리로 이동시키고 그 곳에
* 데이터가 있으면 true , 없으면 false 를 반환한다.
*/
while(rs.next()) { //iterator 에서 처럼 커서(포인터)가 그 데이터 전에 위치한다.
//포인터가 가리키는 곳의 데이터를 가져오는 방법 // ( 한 행을 전체를 가리켜서 컬럼별로 나눠줘야 한다. )
// 형식1) rs.get자료형이름("컬럼명")
// 형식2) rs.get자료형이름(컬럼번호) // 컬럼 왼쪽부터순서대로 1, 2, 3, /... 컬럼개수만큼
// 형식3) rs.get자료형이름("컬럼의 alias 명" )
System.out.println("Lprod_id : " + rs.getInt("lprod_id"));
System.out.println("Lprod_gu : " + rs.getString(2));
System.out.println("Lprod_nm : " + rs.getString("lprod_nm"));
//get뒤에있는 Int 와 String 은 가져올 데이터의 타입
System.out.println("--------------------------------------------------");
}
System.out.println("전체 자료 출력 끝....");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//6. 사용했던 자원 반납하기 시작한 순서와 반대로 닫아준다.
if(rs != null) try { rs.close(); } catch (SQLException e ) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e ) {}
if(conn != null) try { conn.close(); } catch (SQLException e ) {}
}
}
}
댓글
댓글 쓰기