2020.11.12 고급자바 수업 데이터베이스 연결 : update 문

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 ) {}
}

}

}

댓글