우선적으로 JDBC의 기본적인 쿼리는
연결/인증 - 문장실행 - 결과집합. 등으로 구성된다.
그 이유는 JDBC는 필요한 이유가 기본적으로 여러가지의 DB에 연결 호환성을 주기 위한 템플릿이기 떄문이다.
연결/인증 -문장실행 -결과집합은, 어느 DB에 연결하더라도 해당 DB를 사용하기 위해서 필수적으로 사용해야하는 과정이기에 JDBC는 각 DB에 맞춤형 함수들을 개발해서 JDBC 드라이버에 만들어놓았고, 우리는 그 JDBC DRIVER을 JDBC를 통해 이용하기만 하면 된다.
Class.forname("oracle.jdbc.driver.OracleDriver");
//각 DB에 맞는 Driver를 호출해 준다. *특이사항 클래스를 생성할때, new연산자 안씀.
Connection con= JdbcDriver.getConnection(url,user,password);
//호출한 Driver를 통해 연결/인증 과정을 거친다.
Statement st= con.createStatement();
//연결된 DB에 쿼리 실행이 가능한 "상태"를 만든다.
ResultSet rs=st.executeQuery(sql);
//문장실행하여 결과집합을 ResultSet에 담는다.
rs.close;
st.close;
con.close;
여기 연결/인증 과정을 거칠때, getConnection의 인자로 무엇이 와야될지 쉽게 감이 안 올 수 있는데, 연결할 DB의 사용자계정 정보를 넣으면 된다.
직접 쿼리를 짜서 내가 NEWLEC PDB 서버 NOTICE 테이블에 등록한 데이터 한 셋을 불러와 보았다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class program {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
String url="jdbc:oracle:thin:@localhost:1521/xepdb1";
String sql="select * from notice";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(url,"NEWLEC","vdongv1620");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
if(!rs.next()) {
//rs.next()메서드는 데이터가 없을시, false를 반환.
System.out.println("조회된 데이터가 없습니다.");
}
String title= rs.getString("content");
System.out.println(title);
rs.close();
st.close();
con.close();
}
}
여기서 결과집합인 ResultSet에는 위에서 부터 순서대로 1줄씩 불려온다. 그래서 현재 상황은 1번 레코드가 불려왔고,
rs.getString("content"); 메서드에 의해, 해당 set의 content 컬럼이 출력되었다.
만약 1레코드씩 출력하는 것이 아닌, Notice 테이블의 모든 레코드를 출력할려면 어떻게 해야할까?
while(rs.next()) {
int ID =rs.getInt("ID");
String title=rs.getString(2);
String writer=rs.getString(3);
String content=rs.getString(4);
Date Date=rs.getDate(5);
int hit=rs.getInt(6);
String Files= rs.getString(7);
System.out.printf("ID: %d, Title: %s, Writer: %s, content: %s"
+ "Date: %s ,hit: %d, Files: %s \n",ID,title,writer,content,Date,hit,Files);
}
System.out.println("EOF 파일의 끝에 도달했습니다.");
이렇게 하면 된다. 즉, rs.next를 반복문의 조건으로 넣고, 더이상 DB에서 불러올 set이 없을떄까지, 모든 칼럼을 출력하는 것이다. 또 rs.getString(int columnindex) 에 대해서 설명하자면 ,첫번째 칼럼의 인덱스를 1부터 시작하게끔, 정수값을 인자로 넣어주면 , 그 인덱스에 해당하는 칼럼이 지정된 타입으로 반환된다.
공부시간 2시간.
순공시간 1시간 40분.
'기록 > JAVA' 카테고리의 다른 글
클린코드 책 리뷰및 요약(2024-01-27) (0) | 2024.01.27 |
---|---|
[우테코] 람다와 스트림으로 변경하기 (0) | 2023.10.27 |
자바의 정석 공부한것 요약3(Optional, Comparator을 익명클래스, 람다식으로 구현법, 인텔리제이로 커맨드라인cmd 사용법). 공부기간 : 2021-01-28 ~2021-05-17 (0) | 2021.12.14 |
자바의 정석 공부내용 요약본2. 공부 기간: 2021-01-15~2021-01-28 (0) | 2021.12.14 |
자바의 정석 공부내용 요약(인터페이스, 내부클래스, 예외 던지기). 2020-12-31 ~2021-1-15 (0) | 2021.12.14 |