공부일지
231101 (JDBC)
CD가참둥그렇다
2023. 11. 1. 17:59
JDBC
- Java DataBase Connectivity의 약자
- 자바에서 데이터베이스와 상호작용 하기 위한 API
- JDBC를 통해서 자바 코드로 데이터를 검색, 추가 수정 등 가능하다.
- OJDBC : 오라클의 JDBC를 의미한다.
데이터베이스에 접근 순서
- 로그인 : url, sid, username 등 정보를 입력하여 연결을 한다.
- Connection 객체로 가능하다. OracleDriverManager가 필요하다.(ojdbc버전)
- 워크시트에 sql문을 작성, 실행한다.
- Statement 객체로 Connection 객체를 이용하여 상호작용 한다.
- 결과를 표 형태로 확인
- ResultSet 객체로 결과를 가져온다.
SQL Developer의 역할(디비버라는 실무에서 많이 쓰는 범용 GUI)
- 개발자에게 GUI를 제공하는 sql plus이다.
자바에서 외부 프로젝트 jar를 가져오기
- buildpath에서 external jar를 추가한다.
자바와 오라클 연결하기
- database와의 연결을 하기 위한 도구가 필요하다.
- data source explorer가 없다면 window - show view - other(혹은 있으면 data source explorer) - data 검색 후 data source explorer 선택하여 도구를 열 수 있다.
- 데이터베이스 커넥션
- database connections에서 new를 클릭하여 데이터베이스 연결을 추가한다.
- 사용하려는 데이터베이스를 선택하여 추가한다. 예시는 Oracle
- 드라이버를 선택하는데, oarcle thin driver가 범용적이다. 오라클 클라이언트가 설치되어있지 않은 유저를 위해 thin을 사용한다.
- 데이터베이스 접속 url : jdbc:oracle:thin:@localhost:1521:xe
- localhost는 자신의 ip를 의미한다. 접속하고자 하는 ip를 작성하면 해당 ip의 데이터베이스로 연결할 수 있다
- 데이터베이스의 추가 성공
- database의 연결 정보를 입력한다. 아이디와 비밀번호 등 설정할 수 있다.
- sql 파일을 만들어 이클립스에서 쿼리문을 만들고 실행할 수 있다.
- sql파일의 사용 예시
Class에서 데이터베이스 연결하기
- Connection
- connection 클래스에 drivermanager.getconnection()을 이용하여 url, id, pw를 대입하여 로그인 할 수 있다.
try {
//oracle.jdbc.driver.OracleDriver <-추후 사용 예정
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hanul";
String pw = "0000";
Connection conn = DriverManager.getConnection(url, user, pw);
if(!conn.isClosed()) {
System.out.println("성공");
} else {
System.out.println("실패");
}
} catch (SQLException e) {
e.printStackTrace();
}
- Statement
- statement를 저장하는 클래스 prepareStatement에 커넥션.prepareStatemnet(sql문)으로 sql문을 장전할 수 있다.
PreparedStatement ps = conn.prepareStatement(sql);
- ResultSet
- resultSet rs에 Statement의 실행 결과를 저장한다.
- ps.executeQuery를 실행 해야 결과를 받을 수 있다.
- rs.next() : 로 실행 결과의 다음 레코드에 접근한다. 기본값은 0이고, 0은 오라클에서 쓰지 않는다. 1번부터 레코드가 있기 때문에 첫 레코드를 접근하기 위해서는 반드시 next를 먼저 써야 한다.
- rs.getString("id") : rs.get파라미터로 결과를 추출할 수 있다. 파라미터에는 sql에서 추출한 정보의 타입을 입력하고, ()내부의 값은 크게 2가지로 나눌 수 있다.
- 숫자를 직접 입력할 경우 컬럼 번호에 맞는 정보를 가져온다.
- 문자열의 형태로 입력하면 컬럼의 이름이 문자열에 해당하는 결과를 가져올 수 있다.
ResultSet rs = ps.executeQuery();
System.out.println(rs.getString("id"));
sql을 이용한 해킹 방어
- 쿼리문에 ?를 입력하면 set파라미터(파라미터 번호, 내용)으로 쿼리문의 파라미터를 채울 수 있다.
String sql = "select id, pw from member where id = ? and pw = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, id1);
ps.setString(2, pw1);