-
자바로 오라클 DB 간섭하기 / Statement / ResultSet프로그래밍/JAVA 자바 2021. 8. 26.반응형
Statement = 인터페이스 쿼리를 실행하는 인터페이스
package dbEx; import java.sql.Connection; import java.sql.Statement; import db.util.DBconn; public class Ex001_Statement { // 자바로 오라클DB에 간섭 public static void main(String[] args) { Connection conn = DBconn.getConnection(); // Statement 인터페이스 쿼리를 실행하는 인터페이스 Statement stmt = null; String sql; try { // 쿼리를 작성할때 마지막에 ; 붙이지 않는다. // 쿼리에 ; 붙이면 ORA-00933 발생 sql = "INSERT INTO score(hak, name, birth, kor, eng, mat) VALUES (" + " '1001', '김자바', '2000-10-10', 80, 90, 70) "; stmt = conn.createStatement(); // executeUpdate() = DDL(CREATE, ALTER, DROP), DML(INSERT, UPDATE, DELETE) 실행 int result = stmt.executeUpdate(sql); // DML을 실행한 경우 쿼리를 실행 후 변경 개수를 반환하고 // DDL은 실행 여부를 반환 한다. System.out.println(result + "행이 추가 되었습니다."); } catch (Exception e) { e.printStackTrace(); } finally { if(stmt != null) { try { stmt.close(); } catch (Exception e2) { // TODO: handle exception } DBconn.close(); } } } }
- DBconn = 싱글톤 패턴을 이용, Database(데이타베이스) 연결 객체 생성하는 전용 클래스
- 그냥 오라클과 연동하기 위함이니까 암기하는게 좋음
- Connection은 자동 완성으로 import하는 경우 .sql이라고 뜨는 놈으로 해야함
- Statement 객체 생성
- sql 변수에 이제 오라클 명령어를 입력 해준다. (테이블은 미리 생성해 놓자)
- 오라클 형식 그대로 작성해야하기 때문에 작은 따옴표, 큰 따옴표, 공백 등등 주의 해야한다.
(안그러면 sql구문 오류난다고 오류가 나옴)
- 그리고 Connection의 createStatement() 메소드를 호출해서 쿼리를 실행할 객체를 얻어야 한다.
- 마지막으로 쿼리 실행을 위해서 executeUpdate()를 만드는데
executeUpdate = DDL(CREATE, ALTER, DROP), DML(INSERT, UPDATE, DELETE) 실행함
즉 오라클에서 만들고 바꾸고 지우고 등등 할 수 있게해주는 놈임
- sql 변수에 담아 놨던 오라클 명령어를 executeUpdate를 통해 비로소 실행 한다고 보면 됨
- 문제가 없다면 행이 추가 되었다고 잘 나올거임
(만약 이미 같은 기본키 값이 추가 되어있다면 무결성 제약 조건 오류가 뜰꺼임)
- 그리고 꼭 finally 명령어를 통해서 소스가 제대로 실행된걸 확인시키고 close() 꼭 해주자(오라클 실행 객체, 디비 연결 객체 2개 했으니까 2개 close 해야함)
ResultSet
그냥 쉽게 말해서 자바에서 오라클 컬럼 결과 확인을 할 때 쓴다.
package dbEx; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import db.util.DBconn; public class Ex002_ResultSet { public static void main(String[] args) { // TODO Auto-generated method stub Connection conn = DBconn.getConnection(); Statement stmt = null; ResultSet rs = null; String sql; try { stmt = conn.createStatement(); sql = "SELECT hak hhh, name, birth, kor, eng, mat, kor+eng+mat FROM score WHERE hak = '1001' "; // executeQuery() = SELECT문만 실행 나머지 실행은 executeUpdate() // ResultSet = SELECT문 실행 결과를 가지고 있는 객체 rs = stmt.executeQuery(sql); // 초기에 커서는 첫번째 행 앞에 위치 // next() = 커서를 다음 행으로 이동 if(rs.next()) { String hak = rs.getString("hhh"); // 컬럼명에 별명을 주면 반드시 별명으로 입력 String name = rs.getString("name"); //String birth = rs.getString(3); // 컬럼의 위치로 가져올 수 있음. (0아니고 1부터 시작함) // 날짜는 yyyy-mm-dd hh:mi:ss 로 출력한다. // 날짜, 숫자는 String으로 가져올 수 있음 // 날짜를 원하는 형식으로 가져오기 위해서는 쿼리에서 TO_CHAR(birth, 'YYYY-MM-DD') AS birth 이렇게 해야함 // 날짜는 getDate()로 가져오며, java.sql.Date 형임 String birth = rs.getDate(3).toString(); // yyyy-mm-dd로 반환 int kor = rs.getInt("kor"); int eng = rs.getInt("eng"); int mat = rs.getInt(6); int tot = rs.getInt(7); // 총점은 별명이 없으니까 컬럼 위치로 가져와야 한다. System.out.print(hak + "\t" + name + "\t" + birth + "\t"); System.out.println(kor+ "\t" + eng + "\t" + mat + "\t" + tot); } } catch (Exception e) { e.printStackTrace(); } finally { if(rs != null) { try { rs.close(); } catch (Exception e2) { // TODO: handle exception } } if(stmt != null) { try { stmt.close(); } catch (Exception e2) { // TODO: handle exception } } } } }
- 오라클 데이타베이스와 연결을 위해 Connection 객체 생성 및 DBconn.getConnection() 이용
- Statement 방식으로 SQL 결과 실행 하기위해 생성
- 값 자바에서 볼려고 ResultSet 객체 생성
- Connection의 객체 conn은 createStatement();를 이용한다
- 오라클에서 실행할 명령문 sql 변수에 입력
- executeQuery() = SELECT문만 실행 나머지 실행은 executeUpdate()
- ResultSet = SELECT문 실행 결과를 가지고 있는 객체
(간단히 말해서 executeQuery로 쿼리 실행시키고 그 값을 ResultSet 의 객체 rs에 저장해 둠)
- ResultSet 의 결과 값을 보기 위해서는 커서를 다음 행으로 이동 시켜야 하는데
이때 next() 명령어를 쓴다. => rs.next() if와 같이씀 값이 있으면 true
- 이름과 학번은 VARCHAR2 즉 String 형태니까 getString을 쓰고 자바 변수에 담는다.
(쿼리에서 별명을 지어 줬으면 꼭 별명 쓸것)
- birth는 날짜 형태니까 getDate 사용해서 값 가져오고 String 변수에 담기 위해서 toString() 사용
- 나머지 kor, eng, mat, tot는 숫자니까 Integer나 int로 가져온다.
(int일때는 값이 NULL이면 안된다.)
- 그리고 가져온 값들을 출력
- 마찬가지로 finally 이용해서 꼭 close()해주자.
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
입출력 스트림 마무리 (0) 2021.08.29 자바로 DB 연동해서 작업하기 Statement 활용 예제 (0) 2021.08.27 입출력 스트림(6) / PrintStream (0) 2021.08.24 입출력 스트림(5) / File (0) 2021.08.24 입출력 스트림(4) / FileCopy / FileWriter / FileReader (0) 2021.08.24