Statement
객체 생성Statement
는 SQL 쿼리를 데이터베이스에 전달하고, 그 결과를 반환받는 객체입니다.Conneciton
객체를 사용하여 Statement
객체를 생성할 수 있습니다.Statement
는 데이터 조작(SQL 실행)과 데이터 정의(테이블 생성 등)를 수행하는 데 사용됩니다.Connection.createStatement()
메서드를 통해 생성됩니다.INSERT
, UPDATE
, DELETE
, SELECT
등의 쿼리를 실행합니다.executeQuery()
- SELECT
쿼리를 실행하고 결과고 ResultSet
을 반환합니다.executeUpdate()
- INSERT
, UPDATE
, DELETE
쿼리를 실행하고 영향을 받은 행 수를 반환합니다.package com.exam;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementEx01 {
public static void main(String[] args) {
System.out.println("시작");
String url = "jdbc:mariadb://localhost:3306/sample";
String user = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// JDBC 드라이버 로드
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("드라이버 로딩 성공");
// 데이터베이스에 연결
conn = DriverManager.getConnection(url, user, password);
System.out.println("데이터베이스 연결 성공");
// Statement 생성
stmt = conn.createStatement();
// SQL 쿼리 작성 및 실행
String deptno = "53";
String dname = "인사부";
String loc = "대잔";
String sql = String.format("insert into dept2 values (%s, '%s', '%s');", deptno, dname, loc);
int rowsAffected = stmt.executeUpdate(sql); // 쿼리 실행
System.out.println("쿼리 실행 성공", 영향 받은 행 수: + rowsAffected);
} catch (ClassNotFoundException e) {
System.out.println("[에러] 드라이버 로딩 실패: " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] SQL 실행 오류: " + e.getMessage());
} finally {
if (conn != null) { try { conn.close(); } catch (SQLException e) {}}
if (stmt != null) { try { stmt.close(); } catch (SQLException e) {}}
}
System.out.println("끝");
}
}
stmt = conn.createStatement();
Connection
객체를 사용하여 Statement
객체를 생성합니다.String sql = "INSERT INTO dept2 VALUES (53, '연구부', '대전')";
INSERT
SQL 쿼리를 작성합니다.dept2
테이블에 새로운 부서 데이터를 추가하는 쿼리입니다.int rowsAffected = stmt.executeUpdate(sql);
executeUpdate()
메서드는 SQL 명령(삽입, 업데이트, 삭제)을 실행하고, 영향받은 행(row)의 개수를 반환합니다.INSERT
, UPDATE
, DELETE
)는 executeUpdate()
메서드를 사용해 실행하며, 쿼리 실행이 성공하면 영향을 받은 행 수가 반환됩니다.finally
블록에서 Statement
와 Connection
객체를 닫아 리소스를 해제합니다.Statement
객체를 사용하여 데이터베이스의 데이터를 수정(UPDATE
)하거나 삭제(DELETE
) 합니다.
package com.exam;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementEx02 {
public static void main(String[] args) {
System.out.println("시작");
String url = "jdbc:mariadb://localhost:3306/sample";
String user = "root";
String password = "!123456";
Connection conn = null;
Statement stmt = null;
try {
// MariaDB JDBC 드라이버 로드
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("드라이버 로딩 성공");
// 데이터베이스에 연결
conn = DriverManager.getConnection(url, user, password);
System.out.println("데이터베이스 연결 성공");
// Statement 객체 생성
stmt = conn.createStatement();
// SQL 쿼리 작성 - 데이터 업데이트 또는 삭제
// String sql = String.format("update dept2 set loc='%s' where deptno=%s", "광주", 53); // 데이터 수정 쿼리 예시
String sql = String.format("delete from dept2 where deptno=%s", 53); // 데이터 삭제 쿼리 예시
// SQL 실행 - update / delete
int result = stmt.executeUpdate(sql);
System.out.println("쿼리 실행 성공 : " + result);
} catch (ClassNotFoundException e) {
System.out.println("[에러] 드라이버 로딩 실패: " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] SQL 실행 오류: " + e.getMessage());
} finally {
if (stmt != null) { try { stmt.close(); } catch (SQLException e) {} }
if (conn != null) { try { conn.close(); } catch (SQLException e) {} }
}
System.out.println("끝");
}
}
String sql = String.format("update dept2 set loc='%s' where deptno=%s", "광주", 53);
dept2
테이블의 deptno
가 53인 행의 loc
값을 "광주"로 업데이트합니다.광주
, 53
)를 쿼리에 삽입했습니다.String sql = String.format("delete from dept2 where deptno=%s", 53);
dept2
테이블에서 deptno
가 53인 행을 삭제합니다.String.format()
을 사용하여 동적으로 쿼리를 구성했습니다.int result = stmt.executeUpdate(sql);
executeUpdate()
메서드는 데이터 변경(업데이트, 삭제 등) 작업에 사용되며, 영향을 받은 행(row)의 수를 반환합니다.result
변수에 영향을 받은 행의 수가 저장됩니다. 예를 들어, 삭제가 성공하여 한 행이 영향을 받으면 result
의 값은 1이 됩니다.Statement
객체의 executeUpdate()
메서드를 사용하여 쿼리를 전달합니다. // StringBuilder
package com.exam;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementEx03 {
public static void main(String[] args) {
System.out.println("시작");
String url = "jdbc:mariadb://localhost:3306/sample";
String user = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
try {
// JDBC 드라이버 로드
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("드라이버 로딩 성공");
// 데이터베이스에 연결
conn = DriverManager.getConnection(url, user, password);
System.out.println("데이터베이스 연결 성공");
// Statement 객체 생성
stmt = conn.createStatement();
// DDL 쿼리 작성 - 테이블 생성
StringBuilder sb = new StringBuilder();
sb.append("create table dept4 (");
sb.append("deptno int(2),");
sb.append("dname varchar(14),");
sb.append("loc varchar(13)");
sb.append(")");
int result = stmt.executeUpdate(sb.toString()); // 쿼리 실행
System.out.println("쿼리 실행 성공, 반환 값: " + result);
} catch (ClassNotFoundException e) {
System.out.println("[에러] 드라이버 로딩 실패: " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] SQL 실행 오류: " + e.getMessage());
} finally {
if (conn != null) { try { conn.close(); } catch (SQLException e) {}}
if (stmt != null) { try { stmt.close(); } catch (SQLException e) {}}
}
System.out.println("끝");
}
}
DDL 쿼리 작성:
String sql = "CREATE TABLE dept4 (deptno INT(2), dname VARCHAR(14), loc VARCHAR(13))";
CREATE TABLE
명령을 통해 dept4
라는 이름의 새로운 테이블을 생성합니다.deptno
: 부서 번호를 저장하는 정수형 필드.dname
: 부서 이름을 저장하는 가변 길이 문자열 필드.loc
: 부서 위치를 저장하는 가변 길이 문자열 필드.2. SQL 실행:
int result = stmt.executeUpdate(sql);
executeUpdate()
메서드를 통해 CREATE TABLE
쿼리를 실행합니다.result
값은 보통 0
이 반환됩니다. 반환 값은 테이블 생성이 성공했는지를 판단하는 데 큰 의미는 없습니다.