티스토리 뷰

728x90
반응형

JDBCJava DataBase Connectivity의 약어로, DataBase에 연결해서 SELECT, INSERT, UPDATE, DELETE을 작업하는 것이다.

Oracle 에 연결하기 위해서는 드라이버 클래스가 들어있는 ojdbc6.jar 파일을 사용할수 있도록 설정해야 한다.

 

 

순서는 다음과 같다.


1. DB 연결하기

1) 오라클 드라이버 클래스 로딩

2) 접속할 DB 정보 url에 넣기

3) DB 연결 객체의 참조값 얻어오기 

 //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보
String url="jdbc:oracle:thin:@localhost:1521:xe";
//DB 연결 객체의 참조값 얻어오기
Connection conn=DriverManager.getConnection(url, "scott", "tiger");
System.out.println("Oracle DB 접속 성공!");

 

2. SQL문 작성하기

String sql = "SQL문";

 

3. SQL문 실행할 객체의 참조값 얻어오기

PreparedStatement pstmt = conn.prepareStatement(sql);

 

4-1. SELECT 일 때 - QUERY문 수행하고 결과셋 객체 얻어오기

ResultSet rs = pstmt.executeQuery();

 

4-2. INSERT / UPDATE / DELETE일 때 - SQL문 실행하기

 pstmt.executeUpdate();

 

5. 예외처리, close( ) 해주기

try{

//코드 

}
catch(Exception e) {
	e.printStackTrace();
}finally {
	try {
    if(pstmt!=null)pstmt.close();
    if(conn!=null)conn.close();
    } catch (SQLException e) {}
}

 


"SELECT 문 실행하기"

 

예제1

 

EMP 테이블에서 사원번호, 사원이름, 급여를 SELECT하여 문자열로 출력해보자.


1. SQL문 작성하기

String sql = "SELECT empno, ename, sal FROM emp";

 

 

2. 위의 코드에 붙여넣기

try {
         //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //DB 연결 객체의 참조값 얻어오기
         Connection conn=DriverManager.getConnection(url, "scott", "tiger");
         System.out.println("Oracle DB 접속 성공!");
         //실행할 sql 문 
         String sql = "SELECT empno, ename, sal from emp";
         //sql 문을 실행해줄 객체의 참조값 얻어오기 
         PreparedStatement pstmt = conn.prepareStatement(sql);
         //query문 수행하고 결과셋 객체 얻어오기 
         ResultSet rs = pstmt.executeQuery();
         
} catch (Exception e) {
         e.printStackTrace();
}

 

 

3. 문자열로 출력하기

while(rs.next()){
	//empno라는 칼럼을 정수로 얻어내기
    int empno = rs.getInt("empno");
    String ename = rs.getString("ename");
    int sal = rs.getInt("sal");
        	 
    System.out.println(+empno+"  |  "+ename+"  |  "+sal);
}

 

rs.next()는 커서의 개념으로 생각하면 이해가 쉽다. 

커서는 처음에 맨 첫 값의 바로 위에 위치한다.

rs.next()를 하게되면, 커서는 커서의 위치에서 다음 값이 존재하는지 확인하고, 존재한다면 확인과 동시에 커서가 해당 값으로 넘어간다. 

첫번째 값은, 첫번째값 바로 위에 커서가 위치한다.

rs.next()에서 첫번째값이 존재하므로 커서가 첫번째값으로 옮겨간다.

따라서, rs에 대해 작업할 때, 첫번째 값에 대해 작업한다.

 

맨 마지막값을 확인할 때, 커서는 마지막에서 2번째 값에 위치한다.

따라서, rs.next()에서 다음값(마지막값)이 존재하므로 마지막값으로 넘어간다.

따라서, rs에 대해 작업할 때, 커서의 위치가 마지막값이므로 마지막값에 대해 작업한다(출력한다). 

 

위의 코드는 while문을 돌면서 처음부터 마지막까지의 row의 각각의 column값을 get하여 변수에 넣어 출력하는 코드이다.


 

전체 코드

MainClass01.java

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 MainClass01 {
   public static void main(String[] args) {
      
      try {
         //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
         Class.forName("oracle.jdbc.driver.OracleDriver");
         //접속할 DB 의 정보
         String url="jdbc:oracle:thin:@localhost:1521:xe";
         //DB 연결 객체의 참조값 얻어오기
         Connection conn=DriverManager.getConnection(url, "scott", "tiger");
         System.out.println("Oracle DB 접속 성공!");
         //실행할 sql 문 
         String sql = "SELECT empno, ename, sal from emp";
         //sql 문을 실행해줄 객체의 참조값 얻어오기 
         PreparedStatement pstmt = conn.prepareStatement(sql);
         //query문 수행하고 결과셋 객체 얻어오기 
         ResultSet rs = pstmt.executeQuery();
         
         while(rs.next()) {
        	 //empno라는 칼럼을 정수로 얻어내기
        	 int empno = rs.getInt("empno");
        	 String ename = rs.getString("ename");
        	 int sal = rs.getInt("sal");
        	 
        	 System.out.println(+empno+"  |  "+ename+"  |  "+sal);
         }
         
      } catch (Exception e) {
         e.printStackTrace();
      }
      //SELECT 작업을 하기 위해 필요한 객체 생성 
   }
}

예제 2

emp 테이블에서 사원의 이름에 대해서 오름차순 정렬해서 사원의 이름, 부서번호, 입사일을 출력해보자.


1. sql문 작성하기

String sql = "SELECT ename, deptno, hiredate from emp order by ename";

 

 

2. 위의 코드에 붙여넣기

try {
	         //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
	         Class.forName("oracle.jdbc.driver.OracleDriver");
	         //접속할 DB 의 정보
	         String url="jdbc:oracle:thin:@localhost:1521:xe";
	         //DB 연결 객체의 참조값 얻어오기
	         Connection conn=DriverManager.getConnection(url, "scott", "tiger");
	         System.out.println("Oracle DB 접속 성공!");
	         //실행할 sql 문 
	         String sql = "SELECT ename, deptno, hiredate from emp order by ename";
	         //sql 문을 실행해줄 객체의 참조값 얻어오기 
	         PreparedStatement pstmt = conn.prepareStatement(sql);
	         //query문 수행하고 결과셋 객체 얻어오기 
	         ResultSet rs = pstmt.executeQuery();
	         
	        
	         
	      } catch (Exception e) {
	         e.printStackTrace();
	      }

 

 

3. while문 돌며 emp 테이블의 모든 행 출력하기

while(rs.next()) {
	//empno라는 칼럼을 정수로 얻어내기
	String ename = rs.getString("ename");
	int deptno = rs.getInt("deptno");
	String hiredate = rs.getString("hiredate");
	        	 
	System.out.println(ename+"  |  "+deptno+"  |  "+hiredate);
}

 


전체 코드

MainClass02.java

package test.main;

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

public class MainClass02 {
	public static void main(String[] args) {
		/*
		 * emp 테이블에서
		 * 사원의 이름에 대해서 오름차순 정렬해서
		 * 사원의 이름, 부서번호, 입사일을 출력해보세요.
		 *  
		 */
		try {
	         //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
	         Class.forName("oracle.jdbc.driver.OracleDriver");
	         //접속할 DB 의 정보
	         String url="jdbc:oracle:thin:@localhost:1521:xe";
	         //DB 연결 객체의 참조값 얻어오기
	         Connection conn=DriverManager.getConnection(url, "scott", "tiger");
	         System.out.println("Oracle DB 접속 성공!");
	         //실행할 sql 문 
	         String sql = "SELECT ename, deptno, hiredate from emp order by ename";
	         //sql 문을 실행해줄 객체의 참조값 얻어오기 
	         PreparedStatement pstmt = conn.prepareStatement(sql);
	         //query문 수행하고 결과셋 객체 얻어오기 
	         ResultSet rs = pstmt.executeQuery();
	         
	         while(rs.next()) {
	        
	        	 String ename = rs.getString("ename");
	        	 int deptno = rs.getInt("deptno");
	        	 String hiredate = rs.getString("hiredate");
	        	 
	        	 System.out.println(ename+"  |  "+deptno+"  |  "+hiredate);
	         }
	         
	      } catch (Exception e) {
	         e.printStackTrace();
	      }
	      //SELECT 작업을 하기 위해 필요한 객체 생성 

        
	}
}

예제 3

emp 테이블에서 사원의 이름에 대해서 오름차순 정렬하여 사원의 이름, 부서번호, 입사일을 출력해보자.
입사일의 형식은 1980.10.10와 같은 형식으로 출력되도록 해라.


두 예문으로 익숙해졌으므로 반복되는 코드는 생략하도록 하겠다.

 

1. sql문 작성하기 (ALIAS 활용) 

String sql = "SELECT ename, deptno, to_char(hiredate,'YYYY.MM.DD') as hiredate from emp order by ename";

 

 

2. 칼럼 얻어내기 

rs.get~ 에는 int형도 넣을 수 있는데, 원하는 번째수의 칼럼을 리턴한다.

String ename = rs.getString("ename");
int deptno = rs.getInt("deptno");
//String hiredate = rs.getString(3);
String hiredate = rs.getString("hiredate");

 

 

3. SQL문 실행하기

pstmt.executeUpdate();

 


전체 코드

MainClass03.java

package test.main;

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

public class MainClass03 {
	public static void main(String[] args) {
		/*
		 * emp 테이블에서
		 * 사원의 이름에 대해서 오름차순 정렬하여
		 * 사원의 이름, 부서번호, 입사일을 출력해보세요.
		 * 입사일의 형식은 1980.10.10와 같은 형식으로 출력되도록 해보세요.
		 *  
		 */
		try {
	         //오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
	         Class.forName("oracle.jdbc.driver.OracleDriver");
	         //접속할 DB 의 정보
	         String url="jdbc:oracle:thin:@localhost:1521:xe";
	         //DB 연결 객체의 참조값 얻어오기
	         Connection conn=DriverManager.getConnection(url, "scott", "tiger");
	         System.out.println("Oracle DB 접속 성공!");
	         //실행할 sql 문 
	         String sql = "SELECT ename, deptno, to_char(hiredate,'YYYY.MM.DD') as hiredate from emp order by ename";
	         //sql 문을 실행해줄 객체의 참조값 얻어오기 
	         PreparedStatement pstmt = conn.prepareStatement(sql);
	         //query문 수행하고 결과셋 객체 얻어오기 
	         ResultSet rs = pstmt.executeQuery();
	         
	         while(rs.next()) {
	        	 //empno라는 칼럼을 정수로 얻어내기
	        	 String ename = rs.getString("ename");
	        	 int deptno = rs.getInt("deptno");
                 //String hiredate = rs.getString(3);
	        	 String hiredate = rs.getString("hiredate");
	        	 
	        	 System.out.println(ename+"  |  "+deptno+"  |  "+hiredate);
	         }
	         
	      } catch (Exception e) {
	         e.printStackTrace();
	      }
	      //SELECT 작업을 하기 위해 필요한 객체 생성 

        
	}
}

"INSERT DELETE UPDATE 문"  "물음표 ?" 


1) SELECT

예제 4

 

Oracle에 다음의 member 테이블과 시퀀스를 만들어보자.

CREATE TABLE member(num NUMBER PRIMARY KEY, name VARCHAR2(20), addr VARCHAR2(20));
CREATE SEQUENCE member_seq;

member 테이블에 새 멤버를 추가해보자.


 

1. 넣고자 하는  멤버의 정보를 지역변수로 선언하기

String name ="이유경";
String addr = "군자동";

 

 

2. sql문 작성하기

String sql = "INSERT INTO member(num,name,add) values(member_seq.NEXTVAL,?,?);

 

 

3. ? 에 필요한 값 바인딩하기

pstmt.setString(1, name);
pstmt.setString(2, addr);

첫번째 물음표에 name이, 두번째 물음표에 addr이 들어가야하므로 위와 같이 작성한다.

 

 

 

4. sql문 실행하기 (INSERT, UPDATE, DELETE)

pstmt.executeUpdate();

 

 

5. close( ) 해주기

finally {
	try {
		if(conn!=null) conn.close();
		if (pstmt!=null) pstmt.close();
				
	} catch (SQLException e) {
		e.printStackTrace();
	}
}

위에 작성하지 않았지만, conn과 pstmt도 close( )를 해주어야 한다.

null check 하는 것을 잊지 말아야 한다. 


전체 코드

MainClass05.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.util.DBConnect;

public class MainClass05 {
	public static void main(String[] args) {
		//member 테이블에 추가할 이름과, 주소
		String name ="이유경";
		String addr = "군자동";
		
		
		//필요한 객체를 담을 지역 변수 미리 만들기
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			//Connection 객체의 참조값 얻어오기
			conn = new DBConnect().getConn();
			String sql = "INSERT INTO member"
					+" (num,name,addr)"
					+" VALUES(member_seq.NEXTVAL,?,?)";
			//PreparedStatement 객체의 참조값 얻어오기
			pstmt = conn.prepareStatement(sql);
			//?에 필요한 값 바인딩하기 
			pstmt.setString(1, name);
			pstmt.setString(2, addr);
			
			//sql문 실행하기
			pstmt.executeUpdate();
			
			
			System.out.println("회원 한명의 정보를 추가 했습니다.");
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(conn!=null) conn.close();
				if (pstmt!=null) pstmt.close();
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

2) UPDATE

예제 5

 

1번 회원의 이름을 바꿔보자.


1. 수정할 회원 정보를 지역변수에 담기

  int num=1;
  String name="이정호";

 

 

2. sql문 작성하기

String sql="UPDATE member"
           + " SET name=?"
           + " WHERE num=?";

 

 

3. ? 에 필요한 값 바인딩하기 

pstmt.setString(1, name);
pstmt.setInt(2, num);

 

 

4, SQL문 실행하기

pstmt.executeUpdate();

전체 코드

MainClass05.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.util.DBConnect;

public class MainClass06 {
   public static void main(String[] args) {
      //수정할 회원의 정보 (1번 회원의 이름을 이정호로 바꾸고 싶다면)
      int num=1;
      String name="이정호";
      
      //필요한 객체를 담을 지역 변수 미리 만들기
      Connection conn=null;
      PreparedStatement pstmt=null;
      try {
         //Connection 객체의 참조값 얻어오기 
         conn=new DBConnect().getConn();
         //실행할 sql 문의 뼈대 미리 준비하기
         String sql="UPDATE member"
               + " SET name=?"
               + " WHERE num=?";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         //? 에 필요한값 바인딩하기 
         pstmt.setString(1, name);
         pstmt.setInt(2, num);
         //sql 문 실행하기 (INSERT, UPDATE, DELETE)
         pstmt.executeUpdate();
         System.out.println("회원 한명의 정보를 수정 했습니다.");
      }catch(Exception e) {
         e.printStackTrace();
      }finally {
         try {
            if(pstmt!=null)pstmt.close();
            if(conn!=null)conn.close();
         } catch (SQLException e) {}
      }
   }
}

예제 6

3번 회원의 이름을 신현호, 주소를 노량진으로 수정해보자.


위와 유사한 중간과정으로 생략한다. 


 

전체 코드

MainClass07.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.util.DBConnect;

public class MainClass07 {
   public static void main(String[] args) {
      /*
       *  3 번 회원의 이름을 신현호, 주소를 노량진 으로 수정해 보세요.
       */
      int num=3;
      String name="신현호";
      String addr="노량진";
      
      //필요한 객체를 담을 지역 변수 미리 만들기
      Connection conn=null;
      PreparedStatement pstmt=null;
      try {
         //Connection 객체의 참조값 얻어오기 
         conn=new DBConnect().getConn();
         //실행할 sql 문의 뼈대 미리 준비하기
         String sql="UPDATE member"
               + " SET name=?, addr=?"
               + " WHERE num=?";
         //PreparedStatement 객체의 참조값 얻어오기
         pstmt=conn.prepareStatement(sql);
         //? 에 필요한값 바인딩하기 
         pstmt.setString(1, name);
         pstmt.setString(2, addr);
         pstmt.setInt(3, num);
         //sql 문 실행하기 (INSERT, UPDATE, DELETE)
         pstmt.executeUpdate();
         System.out.println("회원 한명의 정보를 수정 했습니다.");
      }catch(Exception e) {
         e.printStackTrace();
      }finally {
         try {
            if(pstmt!=null)pstmt.close();
            if(conn!=null)conn.close();
         } catch (SQLException e) {}
      }
   }
}

"DELETE"

예제 7

 

3번 회원의 정보를 삭제해보자.


 

전체코드 

MainClass08.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.util.DBConnect;

public class MainClass08 {
	public static void main(String[] args) {
		/*
		 * 3번 회원의 정보 삭제하기 
		 */
		int num=3;
	      
	    //필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="DELETE from member"
	               + " WHERE num=?";
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	        
	       pstmt.setInt(1, num);
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       pstmt.executeUpdate();
	       System.out.println("회원 한명의 정보를 수정 했습니다.");
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	        } catch (SQLException e) {}
	    }
	}
}

"DTO 활용하기" 


MemberDto 클래스를 만들어보자.

 

1. 필드 지정하기

private int num;
private String name;
private String addr;

 

 

2. 디폴트 생성자 만들기

public MemberDto() {
		
}

 

 

3. 인자로 모든 값을 전달받는 생성자 만들기 (마우스 우클릭 - Source - Generate Constructor using Fields)

public MemberDto(int num, String name, String addr) {
	super();
    this.num = num;
    this.name = name;
    this.addr = addr;
}

 

 

4. 모든 필드에 setter, getter 메소드 만들기 (마우스 우클릭 - Source - Generate Getters and Setters)  

public int getNum() {
	return num;
}
public String getName() {
	return name;
}
public String getAddr() {
	return addr;
}
public void setNum(int num) {
	this.num = num;	
}
public void setName(String name) {
	this.name = name;
}
public void setAddr(String addr) {
	this.addr = addr;
}

예제 8

 

MemberDto 객체를 활용하여 회원을 추가해보자.


1. 추가할 회원의 정보를 MemberDto 객체에 담기

MemberDto dto = new MemberDto();
dto.setName("박ㅇㅇ");
dto.setAddr("부산시");
insertMember(dto);

MemberDto dto2 = new MemberDto();
dto2.setName("김ㅇㅇ");
dto2.setAddr("제주도");
insertMember(dto2);

 

 

2. MemberDto 타입을 전달받는 INSERT하는 메소드 생성하기

public static void insertMember(MemberDto dto) {
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="Insert into member(num,name,addr)"
	    		   +" values(member_seq.NEXTVAL,?,?)";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       pstmt.setString(1, dto.getName());
	       pstmt.setString(2,dto.getAddr());
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       pstmt.executeUpdate();
	       System.out.println("회원 한명의 정보를 수정 했습니다.");
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	        } catch (SQLException e) {}
	    }
		
	}

 


전체 코드

MainClass09.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnect;

public class MainClass09 {
	public static void main(String[] args) {
		//추가할 회원의 정보를 MemberDto 객체에 담기
		MemberDto dto = new MemberDto();
		dto.setName("박지찬");
		dto.setAddr("성남시");
		insertMember(dto);
		
		MemberDto dto2 = new MemberDto();
		dto2.setName("윤현하");
		dto2.setAddr("제주도");
		insertMember(dto2);
	}
	public static void insertMember(MemberDto dto) {
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="Insert into member(num,name,addr)"
	    		   +" values(member_seq.NEXTVAL,?,?)";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       pstmt.setString(1, dto.getName());
	       pstmt.setString(2,dto.getAddr());
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       pstmt.executeUpdate();
	       System.out.println("회원 한명의 정보를 수정 했습니다.");
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	        } catch (SQLException e) {}
	    }
		
	}

}

예제 9

 

새로운 멤버를 삽입하고, 작업의 성공여부를 리턴받아 성공 시에는 "성공!"을,

실패 시에는 "실패"를 콘솔에 출력하는 프로그래밍을 해보자.


 

1. 추가할 회원의 정보를 MemberDto 객체에 담기

MemberDto dto = new MemberDto();
dto.setName("누구게");
dto.setAddr("어디게");

 

 

2. boolean을 리턴하는 삽입 메소드 만들기

public static boolean insertMember(MemberDto dto) {

}

 

 

3. 작업 성공 여부 반환하기

flag = pstmt.executeUpdate();
//finally 절을 거쳐 여기까지 실행순서가 왔을 때 작업의 성패
if(flag>0) return true;
else return false;

 

executeUpdate( ) 메소드는 작업한 칼럼 갯수를 int로 반환한다.

따라서, 작업 실패 시 0을 반환한다.

작업 성공 여부를 받을 flag 변수에 담아준다. 이때, flag는 try문 밖에서 0으로 초기화 한다. 

예외 발생 시에도 작업은 실패이므로, try문 밖에서 0으로 초기화 하고 flag가 0이면 false를 반환하면 예외는 발생하지 않았지만 작업에 실패한 경우와 예외 발생으로 인한 작업실패를 모두 판별할 수 있다.

또한, finally 문 이후에 flag가 0인지 여부를 확인해야 작업의 성패가 확실히 판단된다.


전체 코드

MainClass10.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnect;

public class MainClass10 {
	public static void main(String[] args) {
		//추가할 회원의 정보를 MemberDto 객체에 담기
		MemberDto dto = new MemberDto();
		dto.setName("누구게");
		dto.setAddr("어디게");
		
		boolean isSuccess = insertMember(dto);
		if(isSuccess) {
			System.out.println("성공!");
		}
		else {
			System.out.println("실패");
		}
	}
	/*
	 * MemberDto 객체의 인자로 전달받아서 DB에 저장하고 
	 * 작업의 성공여부를 boolean으로 리턴해주는 메소드 
	 */
	public static boolean insertMember(MemberDto dto) {
	
		int flag=0;
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="Insert into member(num,name,addr)"
	    		   +" values(member_seq.NEXTVAL,?,?)";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       pstmt.setString(1, dto.getName());
	       pstmt.setString(2,dto.getAddr());
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       flag = pstmt.executeUpdate();
	       
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	    
	    //finally 절을 거쳐 여기까지 실행순서가 왔을 때 작업의 성패
	    if(flag>0) return true;
	    else return false;
		
	}

}

예제 10

 

MemberDto 객체를 활용하여 회원 한 명의 정보를 수정하고 성공 여부를 출력하세요.


전체 코드

MainClass11.java

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import test.dto.MemberDto;
import test.util.DBConnect;

public class MainClass11 {
	public static void main(String[] args) {
		
		MemberDto dto = new MemberDto(4,"홍길동","부산시");
		
		boolean isSuccess = updateMember(dto);
		if(isSuccess) {
			System.out.println("성공!");
			
		}
		else {
			System.out.println("실패");
		}
		
	}
	//회원 한명의 정보를 수정하고 리턴하는 메소드를 완성해보세요.
	public static boolean updateMember(MemberDto dto) {
		int flag=0;
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="update member"
	    		   +" set name = ?, addr = ?"
	    		   +" where num = ?";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       pstmt.setString(1, dto.getName());
	       pstmt.setString(2,dto.getAddr());
	       pstmt.setInt(3,dto.getNum());
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       flag = pstmt.executeUpdate();
	       
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	    
	    //finally 절을 거쳐 여기까지 실행순서가 왔을 때 작업의 성패
	    if(flag>0) return true;
	    else return false;
	
		
	}

}

예제 11 

다음의 메소드를 완성하고 호출해보자.

 

1. 회원 한 명의 번호를 전달받고 해당 회원의 정보를 select 해서 리턴하는 메소드 getData( )

2. 회원 전체 목록을 select해서 리턴하는 메소드 getList( )

3. 회원 한 명의 번호를 전달받고 해당 회원의 정보를 삭제하고 성공 여부를 리턴하는 메소드 deleteMember( )

4. 회원 한 명의 정보를 수정하고 리턴하는 메소드 updateMember( )


MainClass11.java 수정 

package test.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import test.dto.MemberDto;
import test.util.DBConnect;

public class MainClass11 {
	public static void main(String[] args) {
		MemberDto mem1 = getData(5);
		MemberDto mem2 = getData(6);
		//select된 정보가 없으면 null을 리턴한다
		MemberDto mem3 = getData(999);
		//select된 정보가 없으면 list.size()가 0이다.
		List<MemberDto> list = getList();
		
//		MemberDto dto = new MemberDto(4,"홍길동","부산시");
//		
//		boolean isSuccess = updateMember(dto);
//		if(isSuccess) {
//			System.out.println("업데이트 성공!");
//			
//		}
//		else {
//			System.out.println("업데이트 실패");
//		}
//		System.out.println();
//		boolean isSuccess2 = deleteMember(1);
//		if(isSuccess2) {
//			System.out.println("삭제 성공");
//		}
//		
//		else {
//			System.out.println("삭제 실패");
//		}
//		
		
	}
	//회원 한 명의 정보를 select 해서 리턴하는 메소드
	public static MemberDto getData(int num) {
		
		//dto에 담긴 정보를 DB에 저장하는 코드를 작성해보세요.
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    //MemberDto 객체의 참조값을 담을 지역변수 
	    MemberDto dto = null;
		ResultSet rs = null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="select name,addr from member where num = ?";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       
	       //? 에 필요한값 바인딩하기 
	       pstmt.setInt(1,num);
	       
	       //쿼리문 수행하고 결과를 resultset으로 받아오기
	       rs = pstmt.executeQuery();
	       
	       while(rs.next()) {
	    	   dto = new MemberDto();
	    	   dto.setNum(num);
	    	   dto.setName(rs.getString("name"));
	    	   dto.setAddr(rs.getString("addr"));
	       }
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	    		if(rs!=null)rs.close();
	    		if(pstmt!=null)pstmt.close();
	    		if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	    //select 된 회원 정보가 없으면 null을 리턴합니다.
	    return dto;
	}
	
	
	
	//회원 전체 목록을 select 해서 리턴하는 메소드
	public static List<MemberDto> getList(){
		
		//dto에 담긴 정보를 DB에 저장하는 코드를 작성해보세요.
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    List<MemberDto> list = new ArrayList<>();
		ResultSet rs = null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="select * from member order by num";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       
	       //쿼리문 수행하고 결과를 ResultSet으로 받아오기
	       rs = pstmt.executeQuery();
	       
	       while(rs.next()) {
	    	   //cursor가 위치한 곳의 칼럼 데이터 가져오기 
	    	   //회원정보를 MemberDto 객체를 생성해서 담는다.
	    	   MemberDto dto = new MemberDto();
	    	   dto.setNum(rs.getInt("num"));
	    	   dto.setName(rs.getString("name"));
	    	   dto.setAddr(rs.getString("addr"));
	    	   //MembeerDto 객체의 참조값을 가변 배열에 누적(추가)
	    	   list.add(dto);
	       }
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	    		if(rs!=null)rs.close();
	    		if(pstmt!=null)pstmt.close();
	    		if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	 
		return list;
		
	}
	//회원 한명의 정보를 삭제하고 성공 여부를 리턴하는 메소드를 완성해 뵤세요.
	public static boolean deleteMember(int num) {
		
		//dto에 담긴 정보를 DB에 저장하는 코드를 작성해보세요.
		//필요한 객체를 담을 지역 변수 미리 만들기
		int flag = 0;
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="delete from member where num = ?";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       
	       pstmt.setInt(1,num);
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       flag = pstmt.executeUpdate();
	       
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	    
	    //finally 절을 거쳐 여기까지 실행순서가 왔을 때 작업의 성패
	    if(flag>0) return true;
	    else return false;
		
		
	}
	//회원 한명의 정보를 수정하고 리턴하는 메소드를 완성해보세요.
	public static boolean updateMember(MemberDto dto) {
		int flag=0;
		//필요한 객체를 담을 지역 변수 미리 만들기
	    Connection conn=null;
	    PreparedStatement pstmt=null;
	    try {
	       //Connection 객체의 참조값 얻어오기 
	       conn=new DBConnect().getConn();
	       //실행할 sql 문의 뼈대 미리 준비하기
	       String sql="update member"
	    		   +" set name = ?, addr = ?"
	    		   +" where num = ?";
	            
	       //PreparedStatement 객체의 참조값 얻어오기
	       pstmt=conn.prepareStatement(sql);
	       //? 에 필요한값 바인딩하기 
	       pstmt.setString(1, dto.getName());
	       pstmt.setString(2,dto.getAddr());
	       pstmt.setInt(3,dto.getNum());
	       
	       //sql 문 실행하기 (INSERT, UPDATE, DELETE)
	       flag = pstmt.executeUpdate();
	       
	       
	    }catch(Exception e) {
	       e.printStackTrace();
	    }finally {
	    	try {
	          if(pstmt!=null)pstmt.close();
	          if(conn!=null)conn.close();
	          
	        } catch (SQLException e) {}
	    }
	    
	    //finally 절을 거쳐 여기까지 실행순서가 왔을 때 작업의 성패
	    if(flag>0) return true;
	    else return false;
	
		
	}

}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함