본문 바로가기
Backend/JAVA_JDBC

04. JDBC, 변수를 이용한 행추가 & 연습문제

by 개발개발빈이 2022. 6. 16.

○ 변수를 이용해서 JDBC  행추가 SQL 작성

    ⓛ SQL 작성 : ? → 특정값(변수)으로 대입할 수 있는 표식

StringBuilder sql=new StringBuilder();
sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, addr, wdate) ");
sql.append(" VALUES(sungjuk_seq.nextval, ?, ?, ?, ?, ?, sysdate) ");

 

    ② SQL형식으로 변환 및 변수 대입 : ?의 개수, 순서, 자료형이 일치해야 한다

PreparedStatement pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, "김연아"); // 1→ 첫번째 물음표, uname칼럼
pstmt.setInt(2, 90);          // 2→ 두번째 물음표, kor칼럼
pstmt.setInt(3, 100);         // 3→ 세번째 물음표, eng칼럼
pstmt.setInt(4, 85);          // 4→ 네번째 물음표, mat칼럼
pstmt.setString(5, "Jeju");   // 5→ 다섯번째 물음표, addr칼럼

 

    ③ SQL문 실행 

int result = pstmt.executeUpdate();

 

○ sungjuk테이블 행추가 전체 소스

import java.sql.*;

public class Test04_insert {

    public static void main(String[] args) {

        try {
            String url     ="jdbc:oracle:thin:@localhost:1521:xe";
            String user    ="system";
            String password="1234";
            String driver  ="oracle.jdbc.driver.OracleDriver"; 
            Class.forName(driver);
            Connection con =DriverManager.getConnection(url, user, password);		
            System.out.println("오라클 DB 서버 연결 성공");
			
            StringBuilder sql=new StringBuilder();
            sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, addr, wdate) ");
            sql.append(" VALUES(sungjuk_seq.nextval, ?, ?, ?, ?, ?, sysdate) ");
			
            PreparedStatement pstmt = con.prepareStatement(sql.toString());
            pstmt.setString(1, "김연아");
            pstmt.setInt(2, 90);
            pstmt.setInt(3, 100);
            pstmt.setInt(4, 85);
            pstmt.setString(5, "Jeju");
			
            int result = pstmt.executeUpdate();
            if(result==0) {
                System.out.println("행 추가 실패");
            }else {
                System.out.println("행 추가 성공");	
            }
            pstmt.close();
            con.close();
			
        } catch (Exception e) {
            System.out.println("오라클 DB 연결 실패 : " + e);
        }
		
    }//main() end

}//class end

 

● Practice 연습문제

sungjuk 테이블

    Q) sno=22행의 데이터를 아래의 내용으로 수정하시오

int sno=22;
String uname="JSPark";
int kor=90, eng=85, mat=100;
int tot=(kor+eng+mat);
int aver=tot/3;
String addr="Suwon";

 

 

        - SQL문 작성 (DB연결 생략)

StringBuilder sql=new StringBuilder();
sql.append(" UPDATE sungjuk ");
sql.append(" SET uname=? ");	
sql.append(" ,kor=? ");			
sql.append(" ,eng=? ");			
sql.append(" ,mat=? ");			
sql.append(" ,tot=? ");			
sql.append(" ,aver=? ");			
sql.append(" ,addr=? ");			
sql.append(" WHERE sno=? ");

 

        - SQL문 변환, 변수대입, 실행

PreparedStatement pstmt = con.prepareStatement(sql.toString());

pstmt.setString(1, uname);
pstmt.setInt(2, kor);		
pstmt.setInt(3, eng);		
pstmt.setInt(4, mat);
pstmt.setInt(5, tot);		
pstmt.setInt(6, aver);		
pstmt.setString(7, addr);	
pstmt.setInt(8, sno);		

int result = pstmt.executeUpdate();

 

댓글