JDBC Statement 인터페이스
1. SQL 전송 메서드
executeUpdate() |
데이터베이스에 변경을 가하는 SQL문장을 실행할 때 이용 |
|
SELECT 문을 제외한 DML과 DDL문의 전송이 가능하고, 전송 후에는 int 타입으로 변경된 레코드의 수가 리턴되는데, 이 때, DDL문의 경우에는 0이 리턴 |
executeQuery() |
SELECT 문장처럼 데이터를 조회한 결과를 얻으려 할 때 이용 |
|
ResultSet 반환 |
Execute() |
SQL문의 종류에 상관없이 모든 종류의 SQL문을 실행 |
|
True 반환 시, ResultSet이 리턴된다는 의미이므로 getResultSet() 메소더를 이용하여 ResultSet을 리턴받음 False 반환 시, 변경된 행의 개수가 리턴된다는 의미이므로 getUpdateCount() 메서드를 이용하여 변경된 행의 개수를 리턴받음 |
executeBatch() |
JDBC 2.0 버전부터 추가 addBatch() 메서드를 이용하여 배치로 처리할 SQL 문장을 묶고, 일괄적으로 데이터베이스로 전송하여 처리하는 메소드임 executeUpdate()를 여러 번 실행하는 것과 유사 |
|
int 배열을 리턴 – 배열 내에는 배치처리에 의해 실행된 각각의 SQL 문에 의해 변경된 레코드 수를 저장함 ex) 배치처리할 SQL문이 4개였다면 리턴되는 int 배열의 길이도 4 |
2. Java와 SQL 타입 비교
SQL Type |
Java Type |
CHAR |
String |
VARCHAR |
String |
LONGVARCHAR |
java.io.InputStream |
NUMERIC |
java.sql.Numeric |
DECIMAL |
java.sql.Numeric |
BIT |
Boolean |
TINYINT |
byte |
SMALLINT |
short |
INTEGER |
int |
BIGINT |
long |
REAL |
float |
FLOAT |
float |
DOUBLE |
double |
BINARY |
byte[] |
LONGBINARY |
java.sql.InputStream |
DATE |
java.sql.Date |
TIME |
java.sql.Time |
TIMESTAMP |
java.sql.Timestamp |
BLOB |
java.sql.Blob |
CLOB |
java.sql.Clob |
3. Statement 이용 예제
아래 테이블 생성
id |
NUMBER(5) |
name |
VARCHAR2(25) |
bonus |
NUMBER(7,2) |
In_date |
DATE |
Dept_name |
VARCHAR2(25) |
01 import java.sql.*; 02 03 public class TableCreate{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 TableCreate tc = new TableCreate(); 09 tc.connect(); 10 tc.createTable(); 11 tc.close(); 12 } 13 14 public void connect(){ 15 try{ 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection 18 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 19 "jdbc00","jdbc00"); 20 System.out.println("데이터베이스 연결되었습니다."); 21 }catch(ClassNotFoundException e){ 22 System.out.println("JDBC Drvier load fail!!!"); 23 }catch(SQLException e){ 24 System.out.println("Connection fail!!!"); 25 e.printStackTrace(); 26 } 27 } 28 29 public void close(){ 30 try{ 31 con.close(); 32 System.out.println("데이터베이스 연결 해제되었습니다."); 33 }catch(SQLException e){ 34 System.out.println("Connection fail!!!"); 35 e.printStackTrace(); 36 }finally{ 37 try{ 38 if(con != null) con.close(); 39 }catch(SQLException e){} 40 } 41 } 42 43 public void createTable(){ 44 try{ 45 stmt = con.createStatement (); 46 String query = "CREATE TABLE emp "; 47 query += "(id NUMBER(5) , "; 48 query += "name VARCHAR2(25) , "; 49 query += "bonus NUMBER(7,2) , "; 50 query += "in_date DATE, "; 51 query += "dept_name VARCHAR2(25))" ; 52 int rowcount = stmt.executeUpdate(query); 53 System.out.println("테이블 생성이 완료되었습니다."); 54 stmt.close(); 55 }catch(SQLException e){ 56 e.printStackTrace(); 57 }finally { 58 try{ 59 if(stmt != null) stmt.close(); 60 }catch(SQLException e){} 61 } 62 } 63 } |
4. emp 테이블에 데이터를 삽입하는 예제
01 import java.sql.*; 02 03 public class DataInsert{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 DataInsert di = new DataInsert(); 09 di.connect(); 10 di.insert(); 11 di.close(); 12 } 13 14 public void connect(){ 15 try{ 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection 18 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 19 "jdbc00","jdbc00"); 20 System.out.println("데이터베이스 연결되었습니다."); 21 }catch(ClassNotFoundException e){ 22 System.out.println("JDBC Driver load fail!!!"); 23 }catch(SQLException e){ 24 System.out.println("Connection fail!!!"); 25 e.printStackTrace(); 26 } 27 } 28 29 public void close(){ 30 try{ 31 con.close(); 32 System.out.println("데이터베이스 연결 해제되었습니다."); 33 }catch(SQLException e){ 34 System.out.println("Connection fail!!!"); 35 e.printStackTrace(); 36 }finally{ 37 try{ 38 if(con != null) con.close(); 39 }catch(SQLException e){} 40 } 41 } 42 43 public void insert(){ 44 try{ 45 stmt = con.createStatement (); 46 String query = "insert into emp values("; 47 query += "00001,' 48 query += "TO_DATE(' 49 int rowcount = stmt.executeUpdate(query); 50 query = "insert into emp values("; 51 query += "00002,'심청이',75000.00,"; 52 query += "TO_DATE(' 53 rowcount += stmt.executeUpdate(query); 54 query = "insert into emp values("; 55 query += "00003,'대장금',80000.00,"; 56 query += "TO_DATE(' 57 rowcount += stmt.executeUpdate(query); 58 System.out.println 59 ("emp 테이블에" + rowcount + " 개의 데이터가 삽입되었습니다."); 60 stmt.close(); 61 }catch(SQLException e){ 62 e.printStackTrace(); 63 }finally { 64 try{ 65 if(stmt != null) stmt.close(); 66 }catch(SQLException e){} 67 } 68 } 69 } |
5. emp 테이블의 모든 데이터를 조회
01 import java.sql.*; 02 03 public class DataSelect{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 DataSelect ds = new DataSelect(); 09 ds.connect(); 10 ds.select(); 11 ds.close(); 12 } 13 14 public void connect(){ 15 try{ 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection 18 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 19 "jdbc00","jdbc00"); 20 System.out.println("데이터베이스 연결되었습니다."); 21 }catch(ClassNotFoundException e){ 22 System.out.println("JDBC Driver load fail!!!"); 23 }catch(SQLException e){ 24 System.out.println("Connection fail!!!"); 25 e.printStackTrace(); 26 } 27 } 28 29 public void close(){ 30 try{ 31 con.close(); 32 System.out.println("데이터베이스 연결 해제되었습니다."); 33 }catch(SQLException e){ 34 System.out.println("Connection fail!!!"); 35 e.printStackTrace(); 36 }finally{ 37 try{ 38 if(con != null) con.close(); 39 }catch(SQLException e){} 40 } 41 } 42 43 public void select(){ 44 try{ 45 stmt = con.createStatement (); 46 String query = "select * from emp"; 47 ResultSet rs = stmt.executeQuery(query); 48 System.out.println("emp 테이블의 데이터가 조회되었습니다."); 49 stmt.close(); 50 }catch(SQLException e){ 51 e.printStackTrace(); 52 }finally { 53 try{ 54 if(stmt != null) stmt.close(); 55 }catch(SQLException e){} 56 } 57 } 58 } |
6. 실습
l emp 테이블에서 이름이 ‘
l 따라서, name이 ‘
l 이어서, ‘대장금’이라는 사람이 회사를 퇴사하였다고 가정하고, name이 ‘대장금’인 데이터를 emp 테이블에서 삭제하는 예를 구현
01 import java.sql.*; 02 03 public class DataUpdateDelete{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 DataUpdateDelete dud = new DataUpdateDelete(); 09 dud.connect(); 10 dud.updateDelete(); 11 dud.close(); 12 } 13 14 public void connect(){ 15 try{ 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection 18 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 19 "jdbc00","jdbc00"); 20 System.out.println("데이터베이스 연결되었습니다."); 21 }catch(ClassNotFoundException e){ 22 System.out.println("JDBC Driver load fail!!!"); 23 }catch(SQLException e){ 24 System.out.println("Connection fail!!!"); 25 e.printStackTrace(); 26 } 27 } 28 29 public void close(){ 30 try{ 31 con.close(); 32 System.out.println("데이터베이스 연결 해제되었습니다."); 33 }catch(SQLException e){ 34 System.out.println("Connection fail!!!"); 35 e.printStackTrace(); 36 }finally{ 37 try{ 38 if(con != null) con.close(); 39 }catch(SQLException e){} 40 } 41 } 42 43 public void updateDelete(){ 44 try{ 45 stmt = con.createStatement (); 46 String query = "update emp set dept_name = '정보부' "; 47 query += "where name = ' 48 int rowcount = stmt.executeUpdate(query); 49 System.out.println 50 ("emp 테이블에서 " + rowcount 51 + " 건의 데이터가 수정되었습니다."); 52 query = "delete emp where name = '대장금'"; 53 rowcount = stmt.executeUpdate(query); 54 System.out.println 55 ("emp 테이블에서 " + rowcount 56 + " 건의 데이터가 삭제되었습니다."); 57 stmt.close(); 58 }catch(SQLException e){ 59 e.printStackTrace(); 60 }finally { 61 try{ 62 if(stmt != null) stmt.close(); 63 }catch(SQLException e){} 64 } 65 } 66 } |
7. 예제
01 import java.sql.*; 02 03 public class ExecuteTest{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 if(args.length < 1) 09 System.out.print 10 ("사용법 : java ExecuteTest "); 11 System.out.println 12 (" 실행할SQL문종류(insert or select)"); 13 ExecuteTest et = new ExecuteTest(); 14 et.connect(); 15 et.test(args[0]); 16 et.close(); 17 } 18 19 public void connect(){ 20 try{ 21 Class.forName("oracle.jdbc.driver.OracleDriver"); 22 con = DriverManager.getConnection 23 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 24 "jdbc00","jdbc00"); 25 System.out.println("데이터베이스 연결되었습니다."); 26 }catch(ClassNotFoundException e){ 27 System.out.println("JDBC Driver load fail!!!"); 28 }catch(SQLException e){ 29 System.out.println("Connection fail!!!"); 30 e.printStackTrace(); 31 } 32 } 33 34 public void close(){ 35 try{ 36 con.close(); 37 System.out.println("데이터베이스 연결 해제되었습니다."); 38 }catch(SQLException e){ 39 System.out.println("Connection fail!!!"); 40 e.printStackTrace(); 41 }finally{ 42 try{ 43 if(con != null) con.close(); 44 }catch(SQLException e){} 45 } 46 } 47 48 public void test(String sql){ 49 try{ 50 String query = null; 51 int rowcount = 0; 52 ResultSet rs = null; 53 stmt = con.createStatement (); 54 if(sql.equals("insert") || sql.equals("INSERT")){ 55 query = "insert into emp values("; 56 query += "00004,' 57 query += "TO_DATE(' 58 }else if(sql.equals("select") || sql.equals("SELECT")){ 59 query = "select * from emp"; 60 } 61 boolean flag = stmt.execute(query); 62 if(flag) { 63 rs = stmt.getResultSet(); 64 System.out.println 65 ("emp 테이블의 모든 데이터를 조회하였습니다."); 66 rs.close(); 67 } 68 else { 69 rowcount = stmt.getUpdateCount(); 70 System.out.print 71 ("emp 테이블에" + rowcount ); 72 System.out.println 73 (" 개의 데이터가 삽입되었습니다."); 74 } 75 stmt.close(); 76 }catch(SQLException e){ 77 e.printStackTrace(); 78 }finally { 79 try{ 80 if(stmt != null) stmt.close(); 81 }catch(SQLException e){} 82 } 83 } 84 } |
8. 예제
01 import java.sql.*; 02 03 public class BatchTest{ 04 Connection con = null; 05 Statement stmt = null; 06 07 public static void main (String args []) { 08 BatchTest bt = new BatchTest(); 09 bt.connect(); 10 bt.insertBatch(); 11 bt.close(); 12 } 13 14 public void connect(){ 15 try{ 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection 18 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 19 "jdbc00","jdbc00"); 20 System.out.println("데이터베이스 연결되었습니다."); 21 }catch(ClassNotFoundException e){ 22 System.out.println("JDBC Driver load fail!!!"); 23 }catch(SQLException e){ 24 System.out.println("Connection fail!!!"); 25 e.printStackTrace(); 26 } 27 } 28 29 public void close(){ 30 try{ 31 con.close(); 32 System.out.println("데이터베이스 연결 해제되었습니다."); 33 }catch(SQLException e){ 34 System.out.println("Connection fail!!!"); 35 e.printStackTrace(); 36 }finally{ 37 try{ 38 if(con != null) con.close(); 39 }catch(SQLException e){} 40 } 41 } 42 43 public void insertBatch(){ 44 try{ 45 stmt = con.createStatement (); 46 String query ="insert into emp values("; 47 query += "00005,' 48 query += "TO_DATE(' 49 stmt.addBatch(query); 50 query = "insert into emp values("; 51 query += "00006,' 52 query += "TO_DATE(' 53 stmt.addBatch(query); 54 query = "insert into emp values("; 55 query += "00005,' 56 query += "TO_DATE(' 57 stmt.addBatch(query); 58 int [] rowcount = stmt.executeBatch(); 59 for(int i = 0; i < rowcount.length; i++){ 60 System.out.print 61 ("배치작업에 의해 " + rowcount[i] ); 62 System.out.println 63 (" 개의 데이터가 삽입되었습니다."); 64 } 65 stmt.close(); 66 }catch(SQLException e){ 67 e.printStackTrace(); 68 }finally { 69 try{ 70 if(stmt != null) stmt.close(); 71 }catch(SQLException e){} 72 } 73 } 74 } |