본문 바로가기
Java, JSP

[Java / 자바] JDBC로 Oracle SQL 사용법

by LasBe 2022. 2. 15.
반응형
 

m1 Mac 이클립스에서 오라클 클라우드로 JDBC 연동하기

m1 Mac에서 오라클 클라우드로 SQL developer 사용하기 m1 맥 환경에서는 일반적인 오라클 환경을 구성하기 어렵습니다. 기존 방식의 대안으로 오라클 클라우드를 사용하여 SQL developer 환경 구축하는

lasbe.tistory.com

우선 JDBC 연동에 관한 자세한 내용은 위 글을 참고해주세요.

 

 

DBMS 연결


// JDBC 드라이버 불러오기
Class.forName("oracle.jdbc.driver.OracleDriver"); 

// DBMS 서버 접속
String url = "jdbc:oracle:thin:@DB이름_medium?TNS_ADMIN=지갑폴더경로"; 
// localhost : String url = "jdbc:oracle:thin:@localhost:포트번호:데이터베이스_이름";
String user = "ADMIN"; 
String password = "데이터베이스 계정 비밀번호"; 

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

JDBC 드라이버 파일을 메모리에 불러오려면 Class.forName을 이용해

오라클 데이터베이스 드라이버를 불러오는 값을 전달인자 값으로 넣어줍니다.

 

저는 오라클 클라우드 데이터베이스를 사용해 url을 저러한 방식으로 넣어주었지만

로컬 호스트를 사용하시는 분이라면 주석으로 달아놓은 코드를 본인에 값에 맞게 수정해서 넣어주면 됩니다.

 

 

 

PreparedStatment, 데이터 삽입


자바에서 쿼리를 사용할 때 기존 Statement 클래스를 사용하였으나

캐시를 사용해 더 빠른 동작이 가능하고 보안에 더 좋은 PreparedStatement 클래스의 등장 이후로

Statement의 많은 단점이 드러나 사용하지 않도록 권고되고 있습니다.

 

이에 PreparedStatement 클래스 위주로 쿼리 사용법에 대해 설명드립니다.

 

// DBMS 접속
Connection con = DriverManager.getConnection(url, user, password);

PreparedStatement pstmt = null;

String sql = "insert into member values(?,?,?)";

try {
    pstmt = con.prepareStatement(sql);
    pstmt.setString(1, "id");
    pstmt.setString(2, "password");
    pstmt.setString(3, "name"); 
    
    pstmt.executeUpdate();
    
} catch (SQLException e) {
    e.printStackTrace();
} finally {
	pstmt.close(); con.close();
}

우선 DBMS에 접속한 후 PreparedStatement 타입 객체에

Connection 타입 객체의 prepareStatment() 메소드를 이용해 String 타입의 쿼리를 넣어줍니다.

 

그러다보면 쿼리에 눈에 띄는 "?"가 보이는데, 이게 바로 PrepareStatment만의 특이한 데이터 전달방법입니다.

 

이 물음표 표시된 전달할 데이터는 Member 테이블에

PreparedStatement의 메소드인 setString(물음표_순서, 데이터)에 의해 데이터베이스에 전송됩니다.

 

 

 

ResultSet, 데이터 불러오기


Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = null;
String sql = "select * from member where id = ?";
ResultSet rs = null;

try {
    pstmt = con.prepareStatement(sql);
    pstmt.setString(1, email);
    rs = pstmt.executeQuery();

    // primary key -> id   하나만 리턴받아서 if문 사용 
    if(rs.next()) {
        String id = rs.getString("id"),
        String password = rs.getString("password")
               
        System.out.println(m.id + "의 비밀번호 :" + m.password);
    }

} catch (SQLException e) {
    e.printStackTrace();
} finally {
    con.close(); pstmt.close(); rs.close();
}

ResultSet은 조회한 쿼리 값을 받아오는 역할을 합니다.

 

만약 테이블에서 여러개의 값을 반환 받았다면,

rs.next()에 의해 값이 없을 때 false를 반환하는 특성을 이용해 반복문으로 결과를 도출할 수 있습니다.

 

위 코드는 해당하는 name에 대한 id와 password를 반환하는 것으로

getString(컬럼명)으로 조회한 데이터를 받아왔습니다.

 

컬럼명 말고도 getString(컬럼_순서) 컬럼 순서 정수 값으로 데이터를 반환받을 수 있습니다.

 

만약 id가 첫번째, password가 두번째 컬럼이라면 아래와 같이 불러올 수 있습니다.

String id = rs.getString(1),
String password = rs.getString(2);

 

반응형

댓글


오픈 채팅