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 ===
예제 - 삭제하기
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 ===