티스토리 뷰

JDBC / 오라클 연동 / SELECT

 

 

 

4 1 (자바에서 쿼리를 통해 DB정보 불러오기)

 

import java.sql.Connection;

 

 

import java.sql.DriverManager;

 

import java.sql.PreparedStatement;

 

import java.sql.ResultSet;

 

import java.sql.SQLException;

 

 

 

 

 

//Dept테이블조회

 

 

 

public class SelectTest {

 

 

 

public static void main(String[] args) {

 

 

 

//1. DB 접속 정보

 

//드라이버정보

 

String driver = "oracle.jdbc.driver.OracleDriver"; //cracle.jdbc.driver : 패키지이름 , OracleDriver: 클래스이름

 

//커넥션용 3가지

 

String url="jdbc:oracle:thin:@localhost:1521:xe";

String userid="scott";

 

String pwd="tiger";

 

 

//2.드라이버 로딩 (드라이버 클래스 객체생성)

 

 

try {

 

Class.forName(driver); // driver << 문자열로 되있는 클래스를 메모리에 올림 (예외처리 해줘야함) - 컴파일체크드에러

 

} catch (ClassNotFoundException e) {

 

e.printStackTrace();

 

}

 

 

Connection con = null;

 

PreparedStatement pstmt=null;

 

ResultSet rs=null;

try {

 

//3. 연결 (java.sql.Connection)

con = DriverManager.getConnection(url, userid, pwd); // CMD에서 C:>> sqlplus scott/tiger ; << 여기까지 한거라고 보면됨 (연결)

 

 

 

//4. SQL문 작성

 

String sql = "select deptno, dname, loc from dept"; // CMD 에서는 select * from dept; <<처럼 마지막에 " ; " 세미콜론 주지만 자바에

서는 안줘야함, 주면에러

 

 

//5. SQL문 전송 객체 (PreparedStatement) << 얘도 java.sql패키지에있음

 

pstmt= con.prepareStatement(sql); //sql문 전송준비

 

 

//6. sql문 전송

 

//우리가 전송하는 sql문이 뭐냐에 따라서 사용하는 것이 다름

//(insert/delete/update) -> 리턴타입이 int 이므로(쿼리문 실행후 row 12.... 실제 적용된 레코드 개수 리턴) -> pstmt.executeUpdate();

 

// (select) -> 리턴타입이 테이블인데 자바에서는 테이블을 표현할수 없어서 클래스로 표현 (결과Set : ResultSet) ->

pstmt.executeQuery(); (일반적으로쿼리문 하면 select를 의미)

 

//ResultSet은 처음에 헤더 (ResultSet rs ; ) (컬럼명 을 가리기 때문에 데이터값이 들어있는 (한줄밑으로)다음행으로 옮겨주는 작업이필

 -> rs.next (값 있나없나boolean리턴) while(rs.next())로 사용

 

// 컬럼이 숫자면 (int형이면) : rs.getInt(컬럼명) // 컬럼이 문자 string이면 rs.getString(컬럼명)

 

rs= pstmt.executeQuery(); //sql쿼리 결과값 받았음

 

 

//7.결과값 출력

 

while(rs.next()){

 

 

//컬럼인덱스사용

 

//int depto = rs.getInt(0);

 

//컬렴명

 

 

int deptno = rs.getInt("deptno"); // rs.getInt() 두개함수가있음 하나는 컬럼인덱스(0,1,2) / 하나는 컬렴명 : 컬럼명을 주는게 가독성이 좋

기때문에 컬럼명 쓰는게 일반적

 

String dname= rs.getString("dname");

 

String loc=rs.getString("loc");

 

System.out.println(deptno+"\t"+dname+"\t"+loc);

 

}

 

 

 

 

} catch (SQLException e) {

 

// TODO Auto-generated catch block

 

e.printStackTrace();

 

}finally{

 

 

 

//8.자원반납 (역순으로) (충돌,에러방지)

 

//선언은 Connection-PreparedStatement-ResultSet 순이었지만 닫을때는 반대로!

 

//Connection con = null;

 

//PreparedStatement pstmt=null;

 

//ResultSet rs=null;

 

// 닫을때는 순서 거꾸로 닫아줘야함

 

try {

if(rs!=null)rs.close();

 

if(pstmt!=null)pstmt.close();

 

if(con!=null)con.close();

 

} catch (Exception x) {

 

x.printStackTrace();

 

}

 

}

 

}//end main

 

}// end class

댓글