jdbcTest05 - 계좌번호 정보 추가 : PreparedStatement

조수경·2021년 11월 19일
0

고급자바

목록 보기
57/97
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){}
		}
		

	}

}
profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보