본문 바로가기

코딩 공부/DataBase

[DataBase] 12_SQL 구문 실행하기

SQL 구문 실행하기

#01. 데이터 입력, 수정, 삭제

  • 데이터 입력, 수정, 삭제 처리 절차

데이터입력수정삭제처리절차

예제 - 입력하기

  • department 테이블에 데이터를 추가하기 위한 SQL구문을 변수에 정의하고 DBHelper를 사용하여 접속/해제를 구현한다.
// 'department' 테이블에 '컴퓨터정보과' 추가하기위한 SQL
        String sql = "INSERT INTO department (deptno, dname, loc) VALUES (301, '컴퓨터정보과', '5호관')";

        /** DBHelper를 통한 DB 접속 처리 */
        DBHelper db = DBHelper.getInstance();
        Connection conn = db.open();
  • SQL 구문을 실행하기 위한 Statement 객체의 활용
// SQL문을 실행할 수 있는 객체
        Statement stmt = null;
        //결과값 (저장된 데이터의 수)
        int result = 0;

        try {
            //SQL 문을 실행할 수 이쓴ㄴ 객체 생성 (예외처리 요구됨)
            stmt = conn.createStatement();
            // SQL문 실행하기 --> 결과 행 리턴됨 (예외처리 요구됨)
            result = stmt.executeUpdate(sql);
        } catch (SQLException e) {
            System.out.println("MySQL SQL Fail : " + e.getMessage());
        } finally {
            // SQL 구문의 에러 여부에 상관 없이 stmt 객체를 닫기 위하여 finally 블록 사용.
            // --> 객체의 유효범위 설정을 위해서 stmt 객체는 try 블록 밖에 선언되었다.
            if (stmt != null) {
                // 객체 닫기
                try {
                    stmt.close();
                } catch (SQLException e) { }
            }
        }
  • 예제 결과
=== DATABASE Connect Success ===
1 Record Insert
=== DATABASE Disconnect Success ===
  • 에러발생시
    • PK에 대한 중복 데이터 방지 제약에 따른 에러메시지 출력화면
=== DATABASE Connect Success ===
MySQL SQL Fail : Duplicate entry '301' for key 'PRIMARY'
0 Record Insert
=== DATABASE Disconnect Success ===

예제 - 수정하기

  • INSERT, UPDATE, DELETE를 위한 Java 코드의 처리 절차는 동일하다. SQL 구문의 수행만 바꿔주면된다.
String sql = "UPDATE department SET loc='6호관' WHERE deptno=300";
  • 예제 결과
=== DATABASE Connect Success ===
1 Record Update
=== DTABASE Disconnect Success ===

예제 - 삭제하기

  • 위와 같이 SQL구문만 바꾸어 주면 된다.
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import study.java.helper.DBHelper;

public class Main03 {
    public static void main(String[] args) {
        // 'department' 테이블에 '컴퓨터정보과' 추가하기위한 SQL
                String sql = "DELETE FROM department WHERE deptno=300";

                /** DBHelper를 통한 DB 접속 처리 */
                DBHelper db = DBHelper.getInstance();
                Connection conn = db.open();

                /** SQL 구문 실행하기 */
                // SQL문을 실행할 수 있는 객체
                Statement stmt = null;
                //결과값 (저장된 데이터의 수)
                int result = 0;

                try {
                    //SQL 문을 실행할 수 있는 객체 생성 (예외처리 요구됨)
                    stmt = conn.createStatement();
                    // SQL문 실행하기 --> 결과 행 리턴됨 (예외처리 요구됨)
                    result = stmt.executeUpdate(sql);
                } catch (SQLException e) {
                    System.out.println("MySQL SQL Fail : " + e.getMessage());
                } finally {
                    // SQL 구문의 에러 여부에 상관 없이 stmt 객체를 닫기 위하여 finally 블록 사용.
                    // --> 객체의 유효범위 설정을 위해서 stmt 객체는 try 블록 밖에 선언되었다.
                    if (stmt != null) {
                        // 객체 닫기
                        try {
                            stmt.close();
                        } catch (SQLException e) { }
                    }
                }
                //결과출력
                System.out.println(result + " Record Delete");
                /** DB 접속 해제 */
                db.close();
    }
}
  • 예제 결과
=== DATABASE Connect Success ===
0 Record Delete
=== DATABASE Disconnect Success ===

#02. 단일행 데이터 조회하기

  • 단일행 조회 처리 절차

단일행조회절차

예제 - 단일행처리1

  • 주석으로 설명을 써놓음
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import study.java.helper.DBHelper;

public class Main05 {
    public static void main(String[] args) {
        // 4학년 학생의 수
        String sql = "SELECT count(studno) FROM student WHERE grade=4";

        /** DBHelper를 통한 DB 접속 처리 */
        DBHelper db = DBHelper.getInstance();
        Connection conn = db.open();

        /** SQL 구문 실행하기 */
        Statement stmt = null;

        // SELECT 결과를 저장할 객체
        // --> import java,sql.ResultSet;
        ResultSet rs = null;

        try {
            //SQL 문을 실행할 수 있는 객체 생성 (예외처리 요구됨)
            stmt = conn.createStatement();
            // SELECT 구문을 싱행한 후, 결과셋을 리턴받는다.
            rs = stmt.executeQuery(sql);

            // 조회 결과의 첫 번째 줄로 이동
            boolean first = rs.next();

            if (first) {
                // SELECT절에 명시된 '1'번째 항목을 int 형으로 추출하기
                int count = rs.getInt(1);

                // 결과 출력
                System.out.println("4학년 학생은 " + count + "명 입니다.");
            }
        } catch (SQLException e) {
            System.out.println("MySQL SQL Fail : " + e.getMessage());
        } finally {
            // SQL 구문의 에러 여부에 상관 없이 stmt 객체를 닫기 위하여 finally 블록 사용.
            // --> 객체의 유효범위 설정을 위해서 stmt 객체는 try 블록 밖에 선언되었다.
            if (rs != null) {
                // 객체 닫기
                try {
                    stmt.close();
                } catch (SQLException e) { }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {}
            }
        }
        //결과출력
        System.out.println(rs + " Record Delete");
        /** DB 접속 해제 */
        db.close();
    }
}
  • 예제 결과
=== DATABASE Connect Success ===
4학년 학생은 2명 입니다.
Result set representing update count of -1 Record Delete
=== DATABASE Disconnect Success ===

예제 - 단일행 조회2

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import study.java.helper.DBHelper;

public class Main06 {
    public static void main(String[] args) {
        // 4학년 학생의 수
        String sql = "SELECT profno, name, userid, position, sal, hiredate, comm, deptno FROM professor WHERE name = '김도훈'";

        /** DBHelper를 통한 DB 접속 처리 */
        DBHelper db = DBHelper.getInstance();
        Connection conn = db.open();

        /** SQL 구문 실행하기 */
        Statement stmt = null;

        // SELECT 결과를 저장할 객체
        // --> import java,sql.ResultSet;
        ResultSet rs = null;

        try {
            // SQL 문을 실행할 수 있는 객체 생성 (예외처리 요구됨)
            stmt = conn.createStatement();
            // SELECT 구문을 싱행한 후, 결과셋을 리턴받는다.
            rs = stmt.executeQuery(sql);

            // 조회 결과의 첫 번째 줄로 이동
            boolean first = rs.next();

            if (first) {
                // SELECT절에 명시된 '1'번째 항목을 int 형으로 추출하기
                int profNo = rs.getInt("profno");
                String name = rs.getString("name");
                String userId = rs.getString("userid");
                String position = rs.getString("position");
                int sal = rs.getInt("sal");
                String hiredate = rs.getString("hiredate");
                int comm = rs.getInt("comm");
                int deptno = rs.getInt("deptno");
                // 결과 출력
                System.out.printf("교수번호: %d\n", profNo);
                System.out.printf("이름: %s\n", name);
                System.out.printf("아이디: %s\n", userId);
                System.out.printf("직급: %s\n", position);
                System.out.printf("급여: %d\n", sal);
                System.out.printf("입사일: %s\n", hiredate);
                System.out.printf("보직수당: %d\n", comm);
                System.out.printf("학과번호: %d\n", deptno);
            } else {
                System.out.println("조회 결과가 없습니다.");
            }
        } catch (SQLException e) {
            System.out.println("MySQL SQL Fail : " + e.getMessage());
        } finally {
            // SQL 구문의 에러 여부에 상관 없이 stmt 객체를 닫기 위하여 finally 블록 사용.
            // --> 객체의 유효범위 설정을 위해서 stmt 객체는 try 블록 밖에 선언되었다.
            if (rs != null) {
                // 객체 닫기
                try {
                    stmt.close();
                } catch (SQLException e) {
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                }
            }
        }
        // 결과출력
        System.out.println(rs + " Record Delete");
        /** DB 접속 해제 */
        db.close();
    }
}
  • 예제 결과
=== DATABASE Connect Success ===
교수번호: 9901
이름: 김도훈
아이디: capool
직급: 교수
급여: 500
입사일: 1982-06-12 00:00:00
보직수당: 20
학과번호: 101
Result set representing update count of -1 Record Delete
=== DATABASE Disconnect Success ===

#03. 다중행 데이터 조회하기

  • 다중행 조회 처리 절차

다중행조회절차

예제 - 다중행 조회

  • 예제에 주석으로 설명을 달아놓음.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import study.java.helper.DBHelper;

public class Main07 {
    public static void main(String[] args) {
        // 4학년 학생의 수
        String sql = "SELECT deptno, dname, loc FROM department ORDER BY deptno ASC";

        /** DBHelper를 통한 DB 접속 처리 */
        DBHelper db = DBHelper.getInstance();
        Connection conn = db.open();

        /** SQL 구문 실행하기 */
        Statement stmt = null;

        // SELECT 결과를 저장할 객체
        // --> import java,sql.ResultSet;
        ResultSet rs = null;

        try {
            // SQL 문을 실행할 수 있는 객체 생성 (예외처리 요구됨)
            stmt = conn.createStatement();
            // SELECT 구문을 싱행한 후, 결과셋을 리턴받는다.
            rs = stmt.executeQuery(sql);

            // 한 줄씩 스캔하는 반복문 구성

            while (rs.next()) {
                int deptno = rs.getInt("deptno");
                String dname = rs.getString("dname");
                String loc = rs.getString("loc");

                System.out.printf("학과번호: %d\n", deptno);
                System.out.printf("학과이름: %s\n", dname);
                System.out.printf("위치: %s\n", loc);
                System.out.println();
            }
        } catch (SQLException e) {
            System.out.println("MySQL SQL Fail : " + e.getMessage());
        } finally {
            // SQL 구문의 에러 여부에 상관 없이 stmt 객체를 닫기 위하여 finally 블록 사용.
            // --> 객체의 유효범위 설정을 위해서 stmt 객체는 try 블록 밖에 선언되었다.
            if (rs != null) {
                // 객체 닫기
                try {
                    stmt.close();
                } catch (SQLException e) {
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                }
            }
        }
        // 결과출력
        System.out.println(rs + " Record Delete");
        /** DB 접속 해제 */
        db.close();
    }
}
  • 예제 결과
=== DATABASE Connect Success ===
학과번호: 101
학과이름: 컴퓨터공학과
위치: 1호관

학과번호: 102
학과이름: 멀티미디어학과
위치: 2호관

학과번호: 103
학과이름: 인터넷정보과
위치: 5호관

학과번호: 201
학과이름: 전자공학과
위치: 3호관

학과번호: 202
학과이름: 기계공학과
위치: 4호관

학과번호: 301
학과이름: 컴퓨터정보과
위치: 5호관

학과번호: 302
학과이름: 정보통신과
위치: 공학관
=== DATABASE Disconnect Success ===