2008. 7. 24. 21:29

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,'길동',50000.00,";

48                                      query += "TO_DATE('2001/01/01', 'YYYY/MM/DD'),'인사부')";

49                                      int rowcount = stmt.executeUpdate(query);

50                                                 query = "insert into emp values(";

51                                      query += "00002,'심청이',75000.00,";

52                                      query += "TO_DATE('2000/01/01', 'YYYY/MM/DD'),'총무부')";

53                                      rowcount += stmt.executeUpdate(query);

54                                      query = "insert into emp values(";

55                                      query += "00003,'대장금',80000.00,";

56                                      query += "TO_DATE('1998/01/01', 'YYYY/MM/DD'),'기획부')";

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홍길동인 데이터의 dept_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,'강감찬', 90000.00,";

57                                      query += "TO_DATE('1997/01/01','YYYY/MM/DD'),'기획부')";

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,'김유신',75000.00,";

48                                     query += "TO_DATE('2000/07/01','YYYY/MM/DD'),'인사부')";

49                                     stmt.addBatch(query);

50                                     query = "insert into emp values(";

51                                     query += "00006,'권율', 80000.00,";

52                                     query += "TO_DATE('1998/07/01', 'YYYY/MM/DD'),'기획부')";

53                                     stmt.addBatch(query);

54                                     query = "insert into emp values(";

55                                     query += "00005,'계백', 75000.00,";

56                                     query += "TO_DATE('2001/07/01', 'YYYY/MM/DD'),'총무부')";

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         }