개발환경 :
Windows 7 Ultimate K 64bit
MySQL Community Server 5.7.17 <GPL>
MySQL Workbench 6.3 CE
Eclipse Kepler Service Release 2
mysql-connector-java-5.1.40-bin //커넥터 버전
Statement
데이터베이스에 DML쿼리(삽입,수정,삭제,조회) 를 전송할 때에 필요한 객체.
Statement에게는 executeQuery와 executeUpdate라는 메서드를 가지고있는데,
executeQuery(String) - SELECT(조회)문을 전송할 떄 사용하는 메서드로, ResultSet 자료형의 데이터를 반환한다.
이 때, ResultSet이란 대충 SELECT문을 실행하여 테이블로부터 얻은 결과를 저장하고있는 저장소라고 알면 되겠다.
Ex) stmt.executeQuery(SELECT * FROM Test;); //Test테이블로부터 받아온 데이터를 담고있는 ResultSet 반환
executeUpdate(String) - INSERT, UPDATE, DELETE 문을 실행할 때 사용, 수정한 레코드 수를 int형으로 반환
Ex) stmt.executeUpdate(INSERT INTO `test` VALUES ('1', '티스토리', '2017-01-05';); //1이 반환
//2017-01-06 추가 - DDL (CREATE DROP 등등..)문도 잘 되더라
대략 이러하다. 그럼 이제 실제로 쿼리문 보내볼 것인데 SELECT문으로 데이터를 조회 후, INSERT문으로 데이터를 삽입한 후에 다시 조회하여 변경사항을 확인하는 작업을 해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package jdbc; import java.sql.*; public class Jdbc { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1/test?useSSL=false&user=root&password=5071"; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("드라이버 로드 성공!"); conn = DriverManager.getConnection(url); System.out.println("데이터베이스 접속 성공!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException se) { se.printStackTrace(); } finally { if(conn!=null) try {conn.close();} catch (SQLException e) {} } }//main }//class | cs |
딱 커넥팅만 하는 코드다. (간결하게 수정햇음) 여기서 이제 SELECT 쿼리문을 전송하는 코드를 추가해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package jdbc; import java.sql.*; public class Jdbc { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1/test?useSSL=false&user=root&password=5071"; Connection conn = null; ///////////////////////// Statement stmt = null; //Statement 객체 선언 ///////////////////////// try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("드라이버 로드 성공!"); conn = DriverManager.getConnection(url); System.out.println("데이터베이스 접속 성공!"); ////////////////////////////////////////// stmt = conn.createStatement(); //쿼리 준비 단계 String selectSql = "SELECT * FROM table;"; //전송할 쿼리문 stmt.executeQuery(sql); //쿼리문 전송 ///////////////////////////////////////// } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException se) { se.printStackTrace(); } finally { if(conn!=null) try {conn.close();} catch (SQLException e) {} } }//main }//class | cs |
이상태로 실행햇다면 콘솔창엔 아무런 변화도 없다는 것을 알 수 있다. 전송만하고 받아오질 않았으니..
참고로 위에서 executeQuery는 ResultSet이라는 객체를 반환한다고 했는데, 이제 ResultSet을 사용하여
콘솔창에서 test테이블의 데이터를 조회해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package jdbc; import java.sql.*; public class Jdbc { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1/test?useSSL=false&user=root&password=5071"; Connection conn = null; Statement stmt = null; /////////////////////////////// ResultSet rs = null; //ResultSet 객체 선언 /////////////////////////////// try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("드라이버 로드 성공!"); conn = DriverManager.getConnection(url); System.out.println("데이터베이스 접속 성공!"); stmt = conn.createStatement(); String selectSql = "SELECT * FROM table;"; //stmt.executeQuery(sql); ///////////////////////////////////// rs = stmt.executeQuery(sql); //rs에 executeQuery의 실행결과를 삽입 while(rs.next()) //next()에 대한 설명은 본문에 { System.out.println ( rs.getString(1) + "\t" + //본문 설명 rs.getString(2) + "\t" + rs.getString(3) ); } ///////////////////////////////////// } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException se) { se.printStackTrace(); } finally { if(conn!=null) try {conn.close();} catch (SQLException e) {} } }//main }//class | cs |
rs.next() - next함수는 ResultSet에 저장된 SELECT문 실행 결과를 행단위로 1행씩 넘겨서 만약에 다음 행이 있으면
true, 다음 행이 없으면 false를 반환하는 함수다. while(rs.next())를 하게되면 한 루프가 돌아갈 때 마다 1행씩 넘겨주다가
더이상 행이 없으면 while문이 끝나게 된다.
rs.getString() - getString함수는 해당 순서의 열에있는 데이터를 String형으로 받아온단 뜻이다.
예로들어 rs.getString(2)를 하게되면 2번째 열에있는 데이터를 가져오게 된다. (getInt, getFloat등 도 있음)
참고로 현재 test테이블에는 이러한 데이터가 들어있는데 이클립스 실행 결과가 어떻게 나오는지 보자.
(현재 MySQL Workbench로 본 test테이블의 내용)
(이클립스 콘솔 출력)
이렇게 잘 나오는 것을 확인할 수 있다. 이제 조회를 완료했으니 데이터를 삽입해보자.
데이터를 삽입할 땐 executeUpdate를 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package jdbc; import java.sql.*; public class Jdbc { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1/test?useSSL=false&user=root&password=5071"; Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("드라이버 로드 성공!"); conn = DriverManager.getConnection(url); System.out.println("데이터베이스 접속 성공!"); stmt = conn.createStatement(); String selectSql = "SELECT * FROM test;"; rs = stmt.executeQuery(selectSql); while(rs.next()) { System.out.println ( rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } /////////////////////////////////////// //구분선 System.out.println("=============================================="); //INSERT문 전송 String insertSql = "INSERT INTO `test` VALUES ('2', 'qwer', '1000-01-01');"; stmt.executeUpdate(insertSql); //test 테이블 조회 rs = stmt.executeQuery(selectSql); while(rs.next()) { System.out.println ( rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } ////////////////////////////////////// } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException se) { se.printStackTrace(); } finally { if(conn!=null) try {conn.close();} catch (SQLException e) {} } }//main }//class | cs |
앞의 내용을 이해했다면 그렇게 어려울 게 없는 내용이다. test테이블에 데이터를 삽입했다. 워크벤치를 보자.
(정상적으로 데이터가 추가되었다.)
이클립스 결과를 보자.
(잘 뜬다)
데이터 조회 → 데이터 삽입 → 데이터 조회 이 과정을 거쳐서 JDBC프로그래밍으로
어떻게 쿼리문을 작성하는지 알아보았다. 응용이 어려울 뿐 기초가 어려운 녀석은 아님.
'옛날' 카테고리의 다른 글
[무작정] JDBC로 데이터베이스 생성,삭제 (0) | 2017.01.06 |
---|---|
4.JTextField (0) | 2017.01.06 |
MySQL Community Server ZIP Archive 설치방법 (3) | 2017.01.04 |
2.[VMware] 가상머신 구축 (0) | 2017.01.02 |
1.[VMware] VMware Workstation 12 Player 설치 (0) | 2017.01.02 |