java

Step17_JBDC (ojdbc8.jar, DB연동하기, DML사용)

bono.html 2022. 8. 5. 12:47

 

 

사용한 interface 및 class

Interface Connection

특정 DB의 연결 세션이다.

Interface PreparedStatement

SQL문을 대신 실행시켜주는 기능을 한다.

Class ResultSet 

일반적으로 DB 결과 정보를 담아두는 역할을 한다.

Interface DriverManager 

JDBC drivers 모음을 관리하기 위한 서비스이다.

 

executeQuery()

SELECT 작업을 할때 사용한다. SELECT 된 정보를 리턴한다.

next()

 cursor 밑에 row의 존재 유무를 확인하고 존재한다면 true를 리턴하고 cursor가 한칸 밑으로 이동한다. 존재하지 않으면 false를 리턴한다.

getInt("칼럼명")

해당 cursor가 위치한 곳에서 인자의 칼럼에 있는 정수 얻어낸다.

getString("칼럼명")

해당 cursor가 위치한 곳에서 인자의 칼럼에 있는 문자열 얻어낸다.

 

executeUpdate()

insert update delete 작업을 할때 사용한다. 

이때 실행하며 업데이트 된 행의 갯수를 int type리턴해준다.

prepareStatement()

insert update delete select 작업을 할때 동작을 준비해주는 메소드이다.

setStirng(), setInt()

각각 문자열과 숫자열을 해당 내용으로 세팅하도록 명령한다. 앞의 숫자는 물음표 순서이고 나머지는 칼럼명이다

 

 

ojbc6.jar 이클립스에 담기

 

java app 과 oracle app을 연동시키려면 driver class가 필요한데 보통 오라클 사에서 제공하는 ojbc6.jar 파일을 사용한다.

ojbc6.jar 파일을 다운받고 원하는 위치에 저장해놓는다.

바탕 화면, 새폴더 등 한글이나 띄어쓰기가 들어가는 경로에 저장하는 것은 좋지 않다.

 

DB연동하기에 앞서 ojbdc6.jar 파일을 이클립스에서 활용할 수 있게 준비해두자.

 

 

MainClass01 (DB와 연결하여 SELECT 해서 콘솔창에 출력하기)

package test.main;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class MainClass01 {
	public static void main(String[] args) {
	      //DB 연결객체를 담을 지역 변수 만들기
	      Connection conn=null;
	      
	      try {
	         //오라클 드라이버 로딩
	         Class.forName("oracle.jdbc.driver.OracleDriver");
	         //접속할 DB 의 정보 @아이피주소:port번호:db이름
	         String url="jdbc:oracle:thin:@localhost:1521:xe";
	         //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
	         conn=DriverManager.getConnection(url, "scott", "tiger");
	         //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
	         System.out.println("Oracle DB 접속 성공");
	      } catch (Exception e) {
	         e.printStackTrace();
	      }
	      
	      //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역변수 미리 만들기
	      PreparedStatement pstmt=null;
	      ResultSet rs=null;
	      try {
	    	  //실행할 sql 문
	    	  String sql="SELECT num,name,addr FROM member"
	    	  			+ " ORDER BY num ASC";
	    	  //PreparedStatement 객체의 참조값 얻어오기
	    	  pstmt=conn.prepareStatement(sql);
	    	  //PreparedStatement 객체를 이용해서 query 문 수행하고 결과를
	    	  //ResultSet 객체로 받아오기
	    	  rs=pstmt.executeQuery();
	    	  /*
	    	   *  ResultSet 객체의 .next() 메소드는 cursor 밑에 row 가 존재하는지 확인해서
	    	   *  만일 존재한다면 true를 리턴하고 cursor가 한칸 밑으로 이동한다.
	    	   *  만일 존재하지 않으면 false를 리턴한다.
	    	   */
	    	  while(rs.next()) {
	    		  //현재 cursor가 위치한 곳에서 num 이라는 칼럼의 정수 얻어내기
	    		  int num=rs.getInt("num");
	    		  //현재 corsor 가 위치한 곳에서 name 이라는 칼럼의 문자열 얻어내기
	    		  String name=rs.getString("name");
	    		  //현재 corsor 가 위치한 곳에서 address 이라는 칼럼의 문자열 얻어내기
	    		  String addr=rs.getString("addr");
	    		  //콘솔창에 출력해보기
	    		  System.out.println(num+" | "+name+" | "+addr);
	    	  }
	      }catch(Exception e) {
	    	  e.printStackTrace();
	      }
	      
	      System.out.println("main 메소드가 종료 됩니다.");
	      
	}
}

MainClass01 console

Connection, PreparedStatement, ResultSet 3가지 객체의 사용법을 익혀야한다.

Connection 객체의 참조값을 얻어오는 작업이다.

 

executeQuery();

SELECT 문을 수행한 후 결과를 저장한다.

next()

 cursor 밑에 row의 존재 유무를 확인하고 존재한다면 true를 리턴하고 cursor가 한칸 밑으로 이동한다. 존재하지 않으면 false를 리턴한다.

getInt("칼럼명")

해당 cursor가 위치한 곳에서 인자의 칼럼에 있는 정수 얻어낸다.

getString("칼럼명")

해당 cursor가 위치한 곳에서 인자의 칼럼에 있는 문자열 얻어낸다.

 

 

MainClass02 (DB와 연결하여 INSERT 사용하기)

package test.main;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class MainClass02 {
   public static void main(String[] args) {
      //DB 연결객체를 담을 지역 변수 만들기
      Connection conn=null;
      
      try {
         //오라클 드라이버 로딩
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보 @아이피주소:port번호:db이름
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
         conn=DriverManager.getConnection(url, "scott", "tiger");
         //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
         System.out.println("Oracle DB 접속 성공");
      } catch (Exception e) {
         e.printStackTrace();
      }
      
      //member 테이블에 추가할 회원의 정보라고 가정
      int num=4;
      String name="주뎅이";
      String addr="봉천동";
      
      //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역변수 미리 만들기 
      PreparedStatement pstmt=null;
      try {
         //실행할 미완성의 sql 문
         String sql="INSERT INTO member"
               + " (num, name, addr)"
               + " VALUES(?, ?, ?)";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         // ? 에 값을 바인딩해서 미완성의 sql 문을 완성 시킨다.
         pstmt.setInt(1, num);
         pstmt.setString(2, name);
         pstmt.setString(3, addr);
         //sql 문 실행하기
         pstmt.executeUpdate();
         System.out.println("회원 정보를 저장했습니다.");
      }catch(Exception e) {
         e.printStackTrace();
      }
      
   }
}

executeUpdate()

추가, 수정 사항을 DB에 업데이트 해준다.

이때 실행하며 업데이트 된 행의 갯수를 리턴해준다.

 

 

MainClass03 (update를 사용하여 일부 정보를 수정하기)

package test.main;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/*
 *  JDBC ( Java DataBase Connectivity )
 *  
 *  DataBase 에 연결해서 SELECT, INSERT, UPDATE, DELETE 작업하기
 *  
 *  Oracle 에 연결하기 위해서는 드라이버 클래스가 들어있는 ojdbc6.jar 파일을
 *  사용할수 있도록 설정해야 한다.
 */
public class MainClass03 {
   public static void main(String[] args) {
      // 3 번 회원의 주소를 동물원으로 수정하고자 한다.
      int num=3;
      String addr="동물원";
      
      //DB 연결객체를 담을 지역 변수 만들기
      Connection conn=null;
      
      try {
         //오라클 드라이버 로딩
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보 @아이피주소:port번호:db이름
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
         conn=DriverManager.getConnection(url, "scott", "tiger");
         //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
         System.out.println("Oracle DB 접속 성공");
      } catch (Exception e) {
         e.printStackTrace();
      }
      
      //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역변수 미리 만들기 
      PreparedStatement pstmt=null;
      try {
         //실행할 미완성의 sql 문
         String sql="UPDATE member"
               + " SET addr=?"
               + " WHERE num=?";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         //sql 문 완성하기 
         pstmt.setString(1, addr);
         pstmt.setInt(2, num);
         
         //sql 문 실행하기 
         pstmt.executeUpdate();
         System.out.println("회원 정보를 수정 했습니다.");
      }catch(Exception e) {
         e.printStackTrace();
      }
      System.out.println("main 메소드가 종료 됩니다.");
   }
}

prepareStatement()

insert update delete select 작업을 할때 동작을 준비해주는 메소드이다.

setStirng(), setInt()

각각 문자열과 숫자열을 해당 내용으로 세팅하도록 명령한다. 앞의 숫자는 물음표 순서이고 나머지는 칼럼명이다

executeUpdate()

insert update delete 를 실행한다

 

 

MainClass04 (UPDATE를 사용하여 행의 내용을 전체 수정하기)

package test.main;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class MainClass04 {
   public static void main(String[] args) {
      // 1번 회원의 정보를 수정하고자 한다.
	   int num=1;
	   String name="Acorn";
	   String addr="강남역";
      
      //DB 연결객체를 담을 지역 변수 만들기
      Connection conn=null;
      
      try {
         //오라클 드라이버 로딩
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보 @아이피주소:port번호:db이름
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
         conn=DriverManager.getConnection(url, "scott", "tiger");
         //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
         System.out.println("Oracle DB 접속 성공");
      } catch (Exception e) {
         e.printStackTrace();
      }
      
      //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역변수 미리 만들기 
      PreparedStatement pstmt=null;
      try {
         //실행할 미완성의 sql 문
         String sql="UPDATE member"
               + " SET name=?, addr=?"
               + " WHERE num=?";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         //sql 문 완성하기 
         pstmt.setString(1, name);
         pstmt.setString(2, addr);
         pstmt.setInt(3, num);
         
         
         //sql 문 실행하기 
         pstmt.executeUpdate();
         System.out.println("회원 정보를 수정 했습니다.");
      }catch(Exception e) {
         e.printStackTrace();
      }
      System.out.println("main 메소드가 종료 됩니다.");
   }
}

MainClass03 과 방식은 동일하다. setStirng(), setInt() 작성법에 유의하자

 

 

MainClass05 (DELETE를 사용하여 행 삭제하기)

package test.main;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class MainClass05 {
   public static void main(String[] args) {
      /*
       *  run 했을때 member 테이블에서 1번 회원의 정보를 삭제 해 보세요.
       */
      int num=1;
      //DB 연결객체를 담을 지역 변수 만들기
      Connection conn=null;
      
      try {
         //오라클 드라이버 로딩
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보 @아이피주소:port번호:db이름
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
         conn=DriverManager.getConnection(url, "scott", "tiger");
         //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
         System.out.println("Oracle DB 접속 성공");
      } catch (Exception e) {
         e.printStackTrace();
      }
      
      //DELETE 작업을 위해서 필요한 객체의 참조값을 담을 지역변수 미리 만들기 
      PreparedStatement pstmt=null;
      try {
         //실행할 sql 문
         String sql="DELETE FROM member"
               + " WHERE num=?";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         //? 에 바인딩(연결)할 내용이 있으면 연결하고  
         pstmt.setInt(1, num);
         //sql 문 실행하기 
         pstmt.executeUpdate();
         
      }catch(Exception e) {
         e.printStackTrace();
      }
      
      System.out.println("main 메소드가 종료 됩니다.");
   }
}

 

MainClass02~05의 과정은 전부 흡사하다. insert update delete는 executeUpdate()메소드를 사용하여 실행한다