'Web/JDBC'에 해당되는 글 2건

JDBC-PrepareStatement 사용하기(Statement 대신) 2009.03.31
JDBC 기본설정 순서 2009.03.31

JDBC-PrepareStatement 사용하기(Statement 대신)

Published on: 2009.03.31 02:59 by krespo


JDBC-PrepareStatement 사용하기(Statement 대신)

Statement로 사용시 query 문을 String형식으로 해야 하기 때문에 , 또는 ' 때문에 에러가 나는 경우가 많다.
이러한 불편을 제거하기 위해 PrepareStatement를 사용한다.

<!-- 사용방법-->
//DB_Connection method
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, "scott", "tiger" );
  return conn;
 }


Connection conn = null;
PreparedStatement pstmt=null;                  //PrepareStatement를 사용하기 위해 Statement 대신 정의
ResultSet rs = null;
 

 try {
  conn = DB_Connection();
  conn.setAutoCommit(false);                   //autoCommit을 false로 설정

  
  pstmt=conn.prepareStatement("insert into TB_MEMBER_BOARD
                                             (SEQ,USER_ID,TITLE,REGIST_DATE,CONTENTS,READ_COUNT)
                                             values (?,?,?,sysdate,?,0)");              //다음과 같이 변수가 들어갈 곳은 ? 로 대신하고
                                                                                                  //PrepareStatement의 setInt,setString method를 사용하여 index로 물음
                                                                                                  //표에 접근할수 있다.(물론 set 순서가 뒤바뀌어도 상관없다) 
  pstmt.setInt(1,seq); 
  pstmt.setString(2,userId);
  pstmt.setString(3,title);
  pstmt.setString(4,contents);

  pstmt.executeUpdate();
     conn.commit();
     conn.setAutoCommit(true);  //트랜잭션 종료
 } catch( Exception e ) {
        conn.rollback();                               //에러발생할 경우 롤백 및 트랜잭션 종료
        conn.setAutoCommit(true);
  out.println( e.toString() );
 } finally {
     try { if( rs    != null ) rs.close();    } catch ( Exception e ) {}
     try { if( stmt  != null ) stmt.close();  } catch ( Exception e ) {}
     try { if( conn  != null ) conn.close();  } catch ( Exception e ) {}
 }

신고

'Web > JDBC' 카테고리의 다른 글

JDBC-PrepareStatement 사용하기(Statement 대신)  (1) 2009.03.31
JDBC 기본설정 순서  (0) 2009.03.31
지나가다 | 2010.05.30 10:48 신고 | PERMALINK | EDIT/DEL | REPLY
conn.setAutoCommit(true); 를 걍 finally 안에만 써주심 좋을거같네요..^^;
Name
Password
Homepage
Secret

JDBC 기본설정 순서

Published on: 2009.03.31 02:48 by krespo

JDBC 기본 설정순서
준비:


ojdbc14.jar 파일 추가(oracle 10g시 쓰는 jar 파일)

<oracle 설정>
url= "jdbc:oracle:thin:@127.0.0.1:1521:XE"
driver= "oracle.jdbc.driver.OracleDriver"
user="사용자에 맞게 설정"
password="사용자에 맞게 설정";


<!--JDBC 연결순서-->
Connection -> Statement -> ResultSet


<!--Connection 맺는 예제-->
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, "scott", "tiger" );
  return conn;
 }

<!--맺은 Connection으로 Statement 생성후 Query문 날리기-->
Connection conn = null;
Statement stmt = null;
//sql문은 String 형으로 선언
String sql = "update TB_MEMBER_BOARD set " +
   "TITLE='" + title + "', " +
   "CONTENTS='" + contents + "' " +
   "where " +
   "SEQ = " + seq;

conn = DB_Connection();                //Connection 생성
stmt = conn.createStatement();        //createStatement(); 사용하여 Statemene stmt를 생성
stmt.executeUpdate( sql );

<!--ResultSet으로 결과값 가져오기-->
ResultSet rs=stmt.executeQuery( sql );
if( rs.next() ) {                                           //검색된 테이블에서 다음 열로 이동 ↓
   board.setWriter(rs.getString(1));
   board.setEmail( rs.getString(2) );
   board.setHomepageUrl( rs.getString(3) );
   board.setTitle( rs.getString(4) );
   board.setContents( rs.getString(5) );
   board.setReadCount( rs.getInt(6) );
   board.setPassword(rs.getString(7));
  }

<!--::필수:: 사용후 항상 close() 사용하여 닫아 주기-->
try { if( stmt  != null ) stmt.close();  } catch ( Exception e ) {}
try { if( conn  != null ) conn.close();  } catch ( Exception e ) {}

<!--::::::::::::::::::::::팁::::::::::::::::::::::::-->
commit은 기본설정으로 true가 되어있음으로 false로 설정하고 나중에 쿼리문을 사용한다음에 commit을 날리는 습관을 들이자.
try {
   conn = DB_Connection();
   conn.setAutoCommit(false);                                          //오토로 설정되어있는것을 false로 줌으로서 auto를 풀어준다.
 
   String sql = "update TB_MEMBER_BOARD set " +
   "TITLE='" + title + "', " +
   "CONTENTS='" + contents + "' " +
   "where " +
   "SEQ = " + seq;
   
    
   stmt = conn.createStatement();
   stmt.executeUpdate( sql );
 
   conn.commit();                                   //커밋을 날린다.
   conn.setAutoCommit(true);                   //트랜잭션 종료
  } catch( Exception e ) {
         conn.rollback();                               //에러발생할 경우 롤백 및 트랜잭션 종료
         conn.setAutoCommit(true);
   out.println( e.toString() );
  } finally {
      try { if( stmt  != null ) stmt.close();  } catch ( Exception e ) {}
      try { if( conn  != null ) conn.close();  } catch ( Exception e ) {}
  }

신고

'Web > JDBC' 카테고리의 다른 글

JDBC-PrepareStatement 사용하기(Statement 대신)  (1) 2009.03.31
JDBC 기본설정 순서  (0) 2009.03.31
Name
Password
Homepage
Secret