package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
//이 예제를 위해서 데이타베이스에 테이블구조만 미리 만들어 놓음
public class jdbcTest04 {
public static void main(String[] args) {
// 은행 계좌 번호 정보를 추가하는 예제
Scanner scan = new Scanner(System.in);
//자바와 데이타베이스를 연결 Connection
Connection conn = null;
//select 문이 한번도 안 쓰이면 resultSet 은 객체생성할 필요가 없다.
Statement stmt = null; //실행하고 데이터베이스의 테이블 내용이 저장되는 것 까지
PreparedStatement pstmt = null ; //보안성이 더 좋다.
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//Referenced Libraries 에 보면 ojdbc6.jar 라이브러리를 다운받아놨다 ( 데이터베이스를
//자바에서 사용하려고 ) 거기에 oracle.jdbc.driver 패키지 안에 oracleDrever.class 라는게
//있다. !! Class 에서 괄호안에 있는 애를 불러들인것.
//드라이버연결
conn = DriverManager.getConnection(
// localhost는 ip 쓰는 곳 1521은 포트 번호xe는 버전
"jdbc:oracle:thin:@localhost:1521:xe", "Aurora", "java");
System.out.println("계좌 번호 정보 추가하기");
System.out.println("계좌번호 : ");
String bankNo = scan.next();
System.out.println("은행명 ");
String bankName = scan.next();
System.out.println("예금주 명 ");
String userName = scan.next();
//Statement 객체를 이용하여 추가하기
//가져올 문장 : insert into bankinfo (bank_no , bank_name , bank_user_name, bank_date)
//values ('123-456-78', '하나은행' , '홍길동' , sysdate );
/* String sql = "insert into bankinfo "
+ "(bank_no , bank_name , bank_user_name, bank_date) "
+ "values ( '" + bankNo + "', '" + bankName + "', '"
+ userName + "', sysdate )" ;
System.out.println(sql);
System.out.println();
stmt = conn.createStatement();
int cnt = stmt.executeUpdate(sql);
*/
//SQL 문이 select 문일 경우에는 executeQuery() 메서드를 사용했는데
//SQL 문이 select 문이 아닐 경우에는 executeUpdate() 메서드를 사용한다.
//executeUpdate() 메서드의 반환값 ==> 해당 작업에 성공한 레코드 수
//preparedStatement 객체를 이용하여 추가하기
//==> SQL문에서 데이터가 들어갈 자리를 물음표(?)로 표시하여 작성한다.
String sql = "insert into bankinfo "
+ "(bank_no , bank_name , bank_user_name, bank_date) "
+ "values ( ? , ? , ? , sysdate )" ;
//preparedStatement 객체 생성하기
// ==> 객체를 생성할 때 처리할 SQL 문을 넣어준다.
pstmt = conn.prepareStatement(sql);
//SQL 문의 물음표(?) 자리에 들어갈 데이터를 셋팅한다.
//(형식) pstmt.set 자료형이름(물음표 순번, 셋팅할데이터 )
pstmt.setString(1,bankNo); //컬럼명
pstmt.setString(2,bankName);
pstmt.setString(3,userName);
//데이터 셋팅이 완료되면 SQL 문을 실행하여 결과를 얻어온다.
int cnt = pstmt.executeUpdate();
System.out.println("반환값 cnt = " + cnt);
//내부적으로 prepareStatement 는 객체를 생성할때 쿼리문을 넣어서 생성해주는데 컴파일작업을 먼저 해놓는다.
//실행 -> 여러번 실행할때 쿼리문을 처음 객체만들때 기계어로 컴파일 -> 데이터만 setString 부분에서 처리하면 시간이 빠름
//실행할때마다 sql을 넣어줘서 매번 컴파일을 해줘야 한다. 반복적인 작업을 할때 preparedStatement 용이
//statement 는 해킹, 데이터를 뺴가는 일들을 당할 수 있다.
} catch (SQLException e) {
// TODO: handle exception
} catch (ClassNotFoundException e) {
// TODO: handle exception
} finally {
if(stmt != null) try {stmt.close(); } catch(SQLException e ) {}
if(pstmt != null) try {pstmt.close(); } catch(SQLException e ) {}
if(conn != null) try {conn.close(); } catch(SQLException e ) {}
}
}
}
댓글
댓글 쓰기