날아라쩡글이의 블로그입니다.
자바와 연동하는 방법(JDBC), 자바 ConnectionUtil 생성 방법 본문
중앙 HTA (2106기) story/JDBC story
자바와 연동하는 방법(JDBC), 자바 ConnectionUtil 생성 방법
날아라쩡글이 2021. 10. 20. 21:14728x90
반응형
JDBC
- Java DataBase Connectivity
- 자바가 DB에 접속해서 SQL을 실행할 수 있도록 하는 표준이다.
- DBMS는 종류에 따라서 작동방식이 다르다.
- java.SQL에는 2가지 모듈이 존재한다.
- java.SQL
- connection
- DB와 연결을 담당할 객체가 반드시 구현할 기능을 포함한 인터페이스이다. Preparedstatement
- DB에 SQL명령어를 DB에 전송한다.
- 결과를 받아올 객체가 반드시 구현할 기능을 포함한 인터페이스이다.
- resultSet
- SELECT SQL실행결과로 획득한 데이터를 담는 객체가 반드시 구현할 기능을 포함한 인터페이스이다.
- 조회결과를 저장해야하는 객체가 구현해야하는 인터페이스이다.
- 1. 행의 값을 추출하고, 2. 다음행으로 이동, 3. 끝에 도달을 알려주는 기능이 구현되어있다.
- resultSetmetaData
- 조회결과에 대한 메타정보를 표현해야하는 객체가 반드시 구현할 기능을 포함한 인터페이스이다.
- 조회된 결과의 컬럼이름, 컬럼갯수, 컬럼타입을 입력한 컬럼들의 집합을 의미한다.
- connection
- javax.SQL
- java.SQL
자바 API
c://app/host_name/product ->21c->dbhomeX->JDBC->jar(압축파일) 모음집 =>JDBC드라이브
- java DB Access표준을 정의해놓은 것을 추상화 해놓은 것을 구현한 것 ->RDBMS ->lib폴더에 있음
자바 주요 API
- Connection 인터페이스
- 자바 프로그램과 데이터베이스 간의 연결을 담당하는 객체이다.
- Statement createStatement()
- SQL전송을 담당하는 Statement객체를 반환한다.
- SQL injection : SQL구문의 내용을 수정하는 공격기법 에 취약하다.
- 사용할일이 없다.
- PreparedStatement prepareStatement(String sql)
- SQL전송을 담당하는 Statement객체를 반환한다.
- 연결된 상태에서 획득된다.
- SQL의 DBMS의 전송과 반환이 connection안에 존재한다.
- SQL injection DB 공격기법을 무력화 시킨다.
- void commit()
- SQL실행결과를 DB에 반영시킨다.
- void rollback()
- SQL실행결과를 DB반영을 취소시킨다.
- void close()
- DB와의 접속을 해제한다.
- 내전용의 memory의 자원을 해제시킨다.
- PreparedStatement 인터페이스
- PreparedStatement preparedStatement = connection.PreparedStatement(sql);
- 연결된 상태에서 SQL을 전송해야한다.
- SQL의 전송을 담당하는 객체이다.
- execute()란
- SQL을 실행시키는 메소드이다. 실제로 쿼리를 전달, 쿼리를 실행한다.
- int executeUpdate()
- INSERT, UPDATE, DELETE 쿼리를 DB로 전송하고, 실행결과를 반환한다.
- int가 반환타입으로 숫자로 반환된다.
- 그러나 거의 1행씩 입력이 이뤄지고, 수정, 삭제가 되기 때문에 1행의 값이 변경된다.
- ResultSet executeQuery()
- Select 쿼리를 DB로 전송하고, 조회결과를 반환한다.
- resultSet으로 객체를 반환하고,
- SQL을 preparedStatement에게 획득된다.
- void setXXX(int index, XXX value)
- ? 바운딩에 입력이 될 데이터이다.
- XXX은 입력이 될 데이터 타입을 입력해주면 된다.
- Selcet * from employees where salary >= ? and salary <= ?
- 값이 들어갈 자리가 미리 준비가 되어있다.
- preparedStatement의 실제 쿼리이다.
- 1: 5000 2: 10000
- 각 물음표에 나눠서 순서대로 입력이 된다.
- preparedStatement. setInt (1, 5000)
preparedStatement.setInt(2,10000)
이렇게 입력이 들어간다.
- PreparedStatement preparedStatement = connection.PreparedStatement(sql);
- ResultSet 인터페이스
- Select 쿼리문의 조회 결과를 담당하는 객체이다.
- boolean next()
- 커서를 다음행으로 이동시킨다. 데이터행이 존재하면 true를 반환한다.
- XXX get XXX(String columnName)
- 컬럼명에 해당하는 값을 반환한다.
- String getString(String columnName);
- int getInt(String columnName);
- long getLong(String columnName);
- double getDouble(String columnName);
- Date getDate(String columnName);
- 행단위로 출력한다.
- 언젠가는 마지막행이 false를 반환할 것이다.
- while(rs.next())로 입력하여 iterater처럼 출력한다. (iterator에 대해서 읽어보세요)
- https://lionpower.tistory.com/164
DB에서는 마지막으로 close를 역순으로 작성해주어야한다. --> SQLDeveloper의 메모리에 있는 모든 자원을 삭제한다.
DriverManager클래스
- JDBC 표준을 구현한 JDBC 드라이버를 관리하는 클래스이다.
- Connection getConnection(String url, username, String password)
- url이 가르키는 데이터베이스에 지정된 계정정보로 연결을 시도한 후 연결을 담당하는 Connection객체를 반환한다.
프레임워크, 라이브러리 포함 방법
- 외부라이브러리 포함,- > 오른쪽버튼 Libraries->project -> BuildPath->ConfigureBuildPath ->javaBuildpath->classpath ->app/host/lib/ojdbcll.jar -->이제 JRE, Referenced Libraries에 사용
-
- buildpath
- 어플리케이션 실행시 필요한 설정정보에 대해서 app는 compile이 필요하다.
- import 할 위치에 둔다.
- BuildPath, ClassPath에 둔다.
- buildpath
- API가 없으면 인터넷에서 다운
- DB access 절차 -? JDBC API를 사용 , java+DB를 연동함
- JDBC 드라이브 JVM메모리에 로딩한다.
- 정적초기화 블록을 사용하여, 클래스가 메모리에 로딩될 때 즉시 실행되도록 한다.
- class ConnectionUtil이라는 class를 만든다.
- private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
private static final String USER_NAME = "hr";
private static final String PASSWORD = "zxcv1234";- "jdbc:oracle:thin:" 이부분이 JDBC의 드라이버의 위치이다.
- @localhost: 데스탑, 랩톱의 로컬호스트 이름이다.
- 1521 : oracle의 port번호이다. -->다른 SQL은 다른 서버번호를 가지고 있다.
- xe : SID번호이다.
- 클래스가 메모리에 로딩되는 시점은 수행문에서 클래스 이름이 처음등장하는 순간이다.
- 정적초기화 블록은 클래스의 일생동안 단 한번만 실행된다.
- JDBC드라이버를 JVM의 드라이버 레지스토리에 등록하는 작업도 딱 한번만 등록되면 되기 때문에 정적초기화 블록으로 작성하였다.
- 예외 메세지를 정적메소드로 작성한다.
- static {
try {
Class.forName("oracle.jdbc.OracleDriver"); //class.forName으로 ("oracle.jdbc.OracleDriver")의 설계도를 메모리에 올리기만 했다. 생성은 하지 않았다. - JVM 드라이버 레지스터가 memory에 로딩 되자마자 실행되는 static을 초기화 실행하고 oracle의 초기화 코드가 실행된다.
- } catch (ClassNotFoundException ex) { //c
ex.printStackTrace();
} 라이브러리가 등록이 안될수도 있고, 경로를 잘 못 적을수도 있어서 나오는 exception이다
}
- static {
- RDBM와 연결된 새로운 Connection객체를 반환하는 메소드를 입력한다.
- return type은 RDBMS와 연결을 담당하는 Connction객체이다.
- throw SQLException RDBMS와의 연결이 실패하는 경우 예외가 던져지도록 작성하였다.
- public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL,USER_NAME,PASSWORD);
}
- JDBC 드라이브 JVM메모리에 로딩한다.
사용할 때에는 ConnectionUtil.getConnection(); 메소드로 사용해주면 된다.
반응형
'중앙 HTA (2106기) story > JDBC story' 카테고리의 다른 글
SQL 내장함수, 서브쿼리 (0) | 2021.10.25 |
---|---|
VO-DAO패턴, 오라클 시퀀스 (0) | 2021.10.21 |
java에서 Insert, select, update, delete사용방법 (0) | 2021.10.20 |
DML언어(insert,delete,update, select),엑셀import방법 (0) | 2021.10.19 |
DB(데이터베이스), SELECT문 (0) | 2021.10.19 |
Comments