JDBC

2 분 소요

JDBC

  • 자바에서 DB 프로그래밍을 하기 위해 사용되는 API
    • DB 종류에 상관없음.(JDBC 드라이버를 사용하기 때문)
  • JDBC 흐름 : JDBC 드라이버 로드 > DB connection 객체 생성 > 쿼리문 생성 및 Statment 객체(PreparedStatement) 생성 > 쿼리전송(실행) - 결과값 > 트랜잭션 처리(commit, rollback) > 자원반납

  • JDBC driver 설치
    • [오라클 사이트 진입]
    • 설치되어있는 oracle 버전에 맞는 driver(.jar) 설치

SELECT

  • Class.forName(“oracle.jdbc.driver.OracleDriver”)
    • 드라이버를 로드
  • Connection con = DriverManger.getConnection(…);
    • 연결객체
  • Statement st = con.createStatement();
    • 실행도구 생성(SQL 문을 데이터베이스에 보내기위한 객체)
  • ResultSet res = st.executeQuery(sql);
    • 결과도구 생성(SQL 문장 실행 후 결과를 ResulSet으로 리턴)
  • ResultSet rs = st.excuteQuery(sql);
    • SQL 질의에 의해 생성된 테이블을 저장하는 객체
    • rs.next()를 이용해 커서 이동
    • rs.getString, getInt(“컬럼”)등 을 이용해 컬럼값 가져옴
// 리턴값에 제네릭을 사용해 Notice 만 오도록 지정
public List<Notice> getList() throws ClassNotFoundException, SQLException{
  String sql = "SELECT * FROM NOTICE";
  Class.forName(driver);
  Connection con = DriverManager.getConnection(url,user_id,pw);
  Statement st = con.createStatement();
  ResultSet rs = st.executeQuery(sql);

  // 새로운 ArrayList 를 생성해 담을 준비함.
  List<Notice> list = new ArrayList<Notice>();
 
  // rs.next 담겨있는 데이터만큼 반복해 데이터를 가져옴. 
  while(rs.next()) {
    int id = rs.getInt("id");
    String title = rs.getString("title");
    String writer_id = rs.getString("writer_id");
    String content = rs.getString("content");
    Date regdate = rs.getDate("regdate");
    int hit = rs.getInt("hit");
    String files = rs.getString("files");
    int pub = rs.getInt("pub");
  

    // 가져온 데이터를 새로운 Notice 객체에 담음.
    Notice notice = new Notice(id,title,writer_id, content, regdate, hit, files, pub);
    
    // 담은 객체를 새로운 list에 담음
    list.add(notice);
  }

  // 데이터를 담은 list객체를 리턴함.
  return list;
}

INSERT

  • String sql = “INSERT INTO NOTICE(title, writer_id, content, id) VALUES(?,?,?, SEQ_NOTICE_ID.NEXTVAL)”;
    • 다수의 값을 INSERT 시 ? 매개변수 사용
  • PreparedStatement st = con.prepareStatement(sql);
    • SQL문을 데이터 베이스에 보내기위한 객체
  • st.setString(index, value);
    • 값을 대입할때 사용
    • setString 은 데이터 타입에 따라 변동가능
    • index 값은 ? 매개변수에 값을 지정함.
  • int result = pre.executeUpdate();
    • sql 실행 후 변경된 row 수를 int 타입으로 리턴
    • SELECT 를 제외한 나머지 결과값 저장은 executeUpdate() 함수를 사용 후 result 값을 리턴
  // executeUpdate() 함수가 false면 0 true 면 1을 리턴하기 때문에 리턴값 int 설정 ,Notice 객체를 인자로 받음.
	public int insert(Notice notice) throws ClassNotFoundException, SQLException {
		String sql = "INSERT INTO NOTICE(title, writer_id, content, id)"
				+ "VALUES(?,?,?, SEQ_NOTICE_ID.NEXTVAL)";
				
		Class.forName(driver);
		Connection con = DriverManager.getConnection(url,user_id,pw);
    con.setAutoCommit(false); // 자동커밋 방지함.
		PreparedStatement pre = con.prepareStatement(sql);
		
    //Notice 에 담을 값을 연동
		pre.setString(1, notice.getTitle());
		pre.setString(2, notice.getWriter_id());
		pre.setString(3, notice.getContent());
		
		int result = pre.executeUpdate();
    //트랜잭션 처리
    if(result > 0) {
      con.commit();
    } else {
      con.rollback();
    }
			
		pre.close();
		con.close();
		
		return result;
	}

UPDATE

public int update(Notice notice) throws ClassNotFoundException, SQLException {
  Class.forName(driver);
  Connection con = DriverManager.getConnection(url,user_id,pw);
  con.setAutoCommit(false); // 자동커밋 방지함.
  String sql = "UPDATE NOTICE SET TITILE =?, WRITER_ID=?, CONTENT=?, WHERE ID =?";
  PreparedStatement pre = con.prepareStatement(sql);
  String title = notice.getTitle();
  String writer = notice.getWriter_id();
  String content = notice.getContent();
  int id = notice.getId();
  pre.setString(1, title);
  pre.setString(2, writer);
  pre.setString(3, content);
  pre.setInt(4, id);
  int result = pre.executeUpdate();
  //트랜잭션 처리
  if(result > 0) {
    con.commit();
  } else {
    con.rollback();
  }
			

  return result;
}

DELETE

public int delete(int id) throws ClassNotFoundException, SQLException {
  String sql = "DELETE NOTICE WHERE ID =?";
  
  Class.forName(driver);
  Connection con = DriverManager.getConnection(sql, user_id, pw);
  con.setAutoCommit(false); // 자동커밋 방지함.
  PreparedStatement pre = con.prepareStatement(sql);
  pre.setInt(1, id);
  int result = pre.executeUpdate();
  
  pre.close();
  con.close();
  
  return result;
}

카테고리:

업데이트: