package kr.or.didt.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import kr.or.didt.util.DBUtil;
public class jdbcTest05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;
try {
/*Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "JSG99", "java");*/
conn = DBUtil.getConnection();
System.out.println("계좌번호 정보 추가하기");
String bankNo = null;
int count = 0;
do{
System.out.print("계좌번호 : ");
bankNo = scan.next();
String sql2 = "select count(*) cnt from bankinfo "
+ " where bank_no = ? ";
pstmt2 = conn.prepareStatement(sql2);
pstmt2.setString(1, bankNo);
rs = pstmt2.executeQuery();
if(rs.next()){ // select문의 결과가 1개의 레코드일 경우 if문 사용가능
//count = rs.getInt(1);
count = rs.getInt("cnt"); // 컬럼의 alias로 설정하기
}
if(count>0){
System.out.println(bankNo + " 계좌번호는 이미 있는 번호입니다.");
System.out.println("다시 입력하세요");
System.out.println();
}
}while(count>0);
System.out.print("은행명 : ");
String bankName = scan.next();
System.out.print("예금주명 : ");
String bankUser = scan.next();
/*
// Statement객체를 이용한 처리 방법 -----
String sql = "insert into bankinfo (bank_no, bank_name, bank_user_name, bank_date)"
+ " values('" + bankNo + "', '" + bankName
+ "', '" + bankUser + "', sysdate)";
stmt = conn.createStatement();
// select문을 실행할 때는 executeQuery()메서드를 사용하고,
// insert, update, delete문과 같이 select문이 아닌 쿼리문을
// 실행할 때는 executeUpdate()메서드를 사용한다.
// executeUpdate()메서드의 반환값은 작업에 성공한 레코드 수를 반환한다.
int cnt = stmt.executeUpdate(sql);
/---------------------------------------------
*/
//----------------------------------------
// 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자료형이름(물음표번호, 셋팅할데이터)
// 물음표번호는 1번부터 시작...
pstmt.setString(1, bankNo);
pstmt.setString(2, bankName);
pstmt.setString(3, bankUser);
// 데이터의 셋팅이 완료되면 쿼리문을 실행한다.
int cnt = pstmt.executeUpdate();
//-----------------------------------------------
System.out.println("반환값 : " + cnt);
if(cnt>0){
System.out.println("insert 성공~~~");
}else{
System.out.println("insert 실패!!!");
}
} catch (SQLException e) {
e.printStackTrace();
/*} catch (ClassNotFoundException e) {
e.printStackTrace();*/
} finally {
if(rs!=null) try{ rs.close(); }catch(SQLException e){}
if(stmt!=null) try{ stmt.close(); }catch(SQLException e){}
if(pstmt!=null) try{ pstmt.close(); }catch(SQLException e){}
if(pstmt2!=null) try{ pstmt2.close(); }catch(SQLException e){}
if(conn!=null) try{ conn.close(); }catch(SQLException e){}
}
}
}