[JDBC] JDBC

zyan·2021년 9월 29일
1

Web

목록 보기
5/7
post-custom-banner

🍋 JDBC(Java Database Connectivity)

JDBC란, 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.

🟡 JDBC 프로그래밍의 전체적인 흐름

1. 실행중인 DB

사용하려는 DB가 실행중이어야 한다. 이는 윈도우 검색창에 '서비스'를 검색하고, 해당 DB를 찾아보면 실행 여부를 알 수 있다.

2. 드라이버 매니저를 통해 특정 DB에 접속 객체 생성

    public Connection getConnection() throws SQLException {
    	return DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","ora01","oracle_4U");
    }
  • ip : oracle 설치 ip
  • db 종류 : oracle
  • id/pw : 각각 2,3번째 파라미터 값

3. sql문장이 실행 가능한 객체 생성

    Statement stmt = null;
    stmt = con.createStatement(); //oracle db에 접속된
    				  //Connection객체로 부터 획득

4. sql문장 실행 (메소드 호출)

    ResultSet rset = null;
    rset = stmt.executeQuery("select * from dept");

5. 결과 활용

    while(rset.next()) {
    	System.out.println(rset.getInt("deptno") + "/" 
    			   + rset.getString("dname") + "/" 
    			   + rset.getString("loc"));
    }

6. 자원 반환

public void close(Connection con, Statement stmt, ResultSet rset) {
    try {
    	if (rset != null) {
    		rset.close();
    		rset = null;
    	}
    	if (stmt != null) {
    		stmt.close();
    		stmt = null;
    	}
    	if (con != null) {
    		con.close();
    		con = null;
    	}
    } catch (SQLException e) {
    	e.printStackTrace();
    }
}

public void close(Connection con, Statement stmt) {
    try {
         if (stmt != null) {
               	 stmt.close();
                 stmt = null;
         }
         if (con != null) {
                 con.close();
                 con = null;
         }
    } catch (SQLException e) {
         e.printStackTrace();
    }
}

❗❗ 자원 반환 순서 매우 중요 ❗❗

ResultSet → Statment → Connection

🟡 dept table crud작업

  • deleteOne()
public void deleteOne() {
    Connection con = null;
    Statement stmt = null;
    		
    try {
    	con = getConnection();
    	stmt = con.createStatement();
    			
    	int result = stmt.executeUpdate
        	     ("DELETE FROM dept WHERE deptno=60");
    			
    	if (result == 1) {
    		System.out.println("삭제 성공");
    	} else {
    		System.out.println("삭제 실패");
    	}
    			
    	if (stmt != null) {
    		stmt.close();
    		stmt = null;
    	}
    	if (con != null) {
    		con.close();
    		con = null;
    	}
    } catch (SQLException e) {
    	e.printStackTrace();
    }
}
  • updateOne()
public void updateOne() {
    Connection con = null;
    Statement stmt = null;
    		
    try {
    	con = getConnection();
    	stmt = con.createStatement();
    		
    	//executeUpdate : insert/update/delete sql문장 처리 메소드
    	int result = stmt.executeUpdate
        	    ("UPDATE DEPT SET loc='평양' WHERE deptno=60");
    			
    	if (result == 1) {
    		System.out.println("수정 성공");
    	} else {
    		System.out.println("수정 실패");
    	}
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	close(con, stmt);
    }
}
  • inserOne()
public void insertOne() {
    Connection con = null;
    Statement stmt = null;
    	
    try {
    	con = getConnection();
    	stmt = con.createStatement();
    			
    	//executeUpdate : insert/update/delete sql문장 처리 메소드
    	int result = stmt.executeUpdate("insert into dept values 
        				(60, '교육부', '남부')");
    			
    	if (result == 1) {
    		System.out.println("저장 성공");
    	} else {
    		System.out.println("deptno 중복 저장 불허");
    	}
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	close(con, stmt, null);
}
  • selectOne()
public void selectOne() {
    Connection con = null;
    Statement stmt = null;
    ResultSet rset = null;
    try {
    	con = getConnection();
    	stmt = con.createStatement();
    	rset = stmt.executeQuery("select * from dept where 
        			  deptno=10");
    			
    	if(rset.next()) { 
    		System.out.println(rset.getInt("deptno") + "/" 
    		                  + rset.getString("dname") + "/" 
    				  + rset.getString("loc"));
    	}
    			
    } catch (SQLException e) {
    	e.printStackTrace();
    } finally {
    	close(con, stmt, rset);
    }
}
post-custom-banner

0개의 댓글