import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/* 가장 기본적인 CURD 로직 구현하기
* JDBC API 이해하기
*
* 개발 단계
* - driver 로딩 -> 접속 -> sql 문장 생성 객체 생성
* -> sql 문장 실핼 -> 결과 활용 -> 자원 반환
*
* 서버 접속 후 쓰지 않는 자원은 반환해주는 것이 좋다.
*
* */
public class JDBCBasic {
// mysql
public static void main(String[] args) {
try {
// 0. 드라이버 로딩
Class.forName("com.mysql.cj.jdbc.Driver");
// 1. 접속 - getConnection에서 예외 던지는거? -> 상위타입으로 처리 Exception
// jdbc:db_종류://db_주소:db_포트번호/사용_데이터베이스
// Connection con =
// DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/fisa", "root",
// "root");
Connection con = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:8777/fisa?useSSL=false&allowPublicKeyRetrieval=true", "user01", "user01");
System.out.println(con);
// 2. sql 문장 실행 객체 생성
/*
* 2-1. Statement 객체 생성 2-2. 검색 - 검색 결과는 결과 집합 구조의 테이블 형식으로 옴 - result set이라고 이를
* 표현한다. 2-3. 검색된 데이터 활용 - 검색된 데이터를 result set으로 돌려줄때 이를 반복문을 통해서 사용할 수 있다. - 이떄
* 사용하는 반복문은 while문이 권장된다. - 데이터가 존재하면 boolean next()를 이용해서 포인터 이동 - 데이터가 있으면
* true - row는 개별적으로 하나씩 접근해서 뽑을 수 있다.(하나의 row를 전체 뽑는 것이 아니다.) - next()는 더이상
* 데이터가 없으면 자동 종료가 된다.
*/
Statement stmt = con.createStatement();
// 3. sql 문장 실행
ResultSet rs = stmt.executeQuery("select * from dept");
// 4. 결과 활용 (result set을 이용해서 결과 활용 코드)
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString("dname"));
}
// 자원 반환(접속 해제) - 누락 금지
/*
* ResultSet -> Statement -> Connection 순으로 자원을 반환해야 한다.
*
*/
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Class.forName("com.mysql.cj.jdbc.Driver");
: 해당 드라이버가 등록되었는지 확인하기 위해서 진행한다. 보통 해당 작업은 한 번만 수행된다. java 애플리케이션이 시작될 때, 애플리케이션의 초기화 과정에서 드라이버를 로드하고 등록하는 것이 일반적이다.Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:8777/fisa?useSSL=false&allowPublicKeyRetrieval=true", "user01", "user01");
: 앞선 포스팅에서 getConnection 안에 들어갈 String url 관련 포스팅을 진행했다.
mysql의 경우엔 버전 8부터 보안강화로 config 파일을 수정해서 address bind 부분을 수정해주어야 한다. (0.0.0.0으로 변경하는 이유는 모두 접속을 가능하게 하기 때문이다.)
Statement stmt = con.createStatement();
: Connection 객체를 이용해서 Statement 객체를 생성해준다.
ResultSet rs = stmt.executeQuery("select * from dept");
: 해당 작업에선 직접 executeQuery() 안에 쿼리문을 작성해주고 ResultSet을 반환 받는다.
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString("dname"));
}
ResultSet.next()
의 경우엔 해당 ResultSet이 다음 값이 있는지를 확인할 수 있는 메서드로 해당 작업은 반복문을 통해 사용하는데 이때는 for문이 아닌 while문을 이용하여 해당 처리를 진행한다. rs.close();
stmt.close();
con.close();