1. jdbc드라이버 개요
- 사용자가 코드를 작성해서 .java 파일을 만들면
- jdk가 코드를 해석해서 오류가 없는지 확인하고 .class파일을 만든다.
- .class파일은 코드를 작성한 패키지 상위 폴더 위치에 있는 bin 디렉터리에 저장된다.
- JVM에서 .class파일을 읽어와 실행한다.
- 드라이버 : 데이터베이스(오라클)로 JVM이 자동으로 변환해 보내줄 수 있게 해주는 연결자 역할을 한다.
- jdbc 드라이버 : JDK17과 Oracle 21c를 연결하는데 필요한 드라이버이다.
2. 자바 이클립스에서 jdbc(Java database connectivity) path 추가하기
- 이클립스에서 자바 클래스 파일을 우클릭하여 properties를 클릭한다.
- Libraries 탭을 클릭해 Classpath를 누르고 add External JARs를 누른다.(외부에 설치된JAR 추가 - 오라클)
- ojdbc11.jar을 추가하고 Apply한다.
- 최상위 디렉터리의 Referenced Libraries에 ojdbc11.jar이 추가된 것을 확인한다.
3. 클래스에서 ojdbc11.jar에 있는 sql 모듈 임포트하기
- import할때 빨간 줄이 나오면 마우스를 해당 import 모듈 위에 올려두고 add module-info.java를 클릭해 추가해준다.
- module-info.java파일에 외부에 있는 파일 import를 위해 requires java.sql;을 추가한다. (직접 코드를 추가해도 된다)
4. 오라클 연결 및 해제 예제
- java.sql 모듈을 임포트해서 오라클에 접속한다.
- 오라클로 접속한 con을 통해 statement를 보내면, 오라클에서 ResultSet을 보내준다.
- 자바에서 다양한 메소드로 오라클에 저장한 데이터 테이블 ResultSet을 활용 할 수 있다.
5. 다른 사용자 생성
- cmd창을 열어 sqplus 입력 > 사용자명 오라클 아이디 입력 > 비밀번호 오라클 설치 시 설정했던 값 입력 > 'SQL>'로 입력창 바뀜.
- create user c##TEST1 IDENTIFIED by 1234; >> 유저를 새로 만든다. 유저 아이디 : TEST1, 비밀번호: 1234
- grant connect, resource to c##Test1; >> 데이터 접속 권한을 부여한다.
- 사용자 이름 앞에 c## 접두사 : 공통 사용자를 의미함.
- 오라클 디벨로퍼 앱에서 오라클을 우클릭하여 새 접속을 누르고 > 접속할 테이블 이름 입력 > 사용자 이름 및 비밀번호 입력한다.
- 접속하면 새로운 접속 목록이 뜬다.
※ C## 접두사
Oracle Database 12c 버전부터 도입된 멀티 테넌트 아키텍처는 하나의 데이터베이스 인스턴스가 여러 개의 독립적인 데이터베이스 컨테이너를 관리할 수 있도록 설계되었습니다. 이 중 하나가 CDB (Container Database)이며, 여기에 포함되는 각각의 독립된 데이터베이스를 PDB (Pluggable Database)라고 합니다. 이러한 아키텍처는 데이터베이스 관리의 유연성을 크게 향상시킵니다.
C## 접두사는 Oracle 12c 버전 이상에서 새롭게 도입된 멀티 테넌트 아키텍처의 일부로, 공통 사용자 (common user)를 생성할 때 사용됩니다. 공통 사용자는 CDB 전체에 걸쳐 존재하며, 모든 PDB에서 접근할 수 있습니다. 반면, 로컬 사용자 (local user)는 특정 PDB에만 속해 있으며 해당 PDB 내에서만 접근 및 작업이 가능합니다.
CREATE USER c##TEST1 IDENTIFIED BY 1234; 이 명령어에서 c## 접두사는 사용자 TEST1이 공통 사용자임을 나타내며, 이 사용자는 모든 PDB에서 작업을 수행할 수 있습니다. 이는 관리자가 여러 PDB를 효율적으로 관리할 수 있도록 해주며, 공통 사용자를 통해 여러 데이터베이스에 걸친 작업을 간소화시킵니다.
Oracle에서는 공통 사용자 이름이 C## 또는 c##으로 시작해야 한다는 규칙을 설정함으로써, 공통 사용자와 로컬 사용자를 명확하게 구분하도록 하고 있습니다. 이러한 접근 방식은 데이터베이스 관리를 더욱 효율적이고 체계적으로 만들어주는 중요한 변화 중 하나입니다.
5-1. 유저가 새로 만들어졌는지 테스트
자바 이클립스에서 사용자 이름, 비밀번호를 변경해 접속 여부를 확인한다.
6. 사용 권한 설정
- ALTER : 테이블을 수정한다.
- user c##test1에게
- QUOTA 특정 사용자가 데이터베이스의 테이블스페이스에서 사용할 수 있는 최대 디스크 공간을 제한하기 위해 사용
- unlimited on users 데이터 제한 없이 사용하게한다.
- 모든 유저에게 데이터 테이블에 접근할 수 있는 권한을 설정한다.
6-1 테이블에 행 추가 예제 - 6번 권한 설정 후 가능하다.
7. SQL Developer에서 테이블 수정
- 쿼리문으로 테이블 수정이 가능하다.
- 홍천의 popu를 5로 수정하겠다.
- 서울 행을 삭제하겠다.
- name, region 열중에 popu가 10보다 큰 것만 보겠다.
8. 이클립스에서 SQL 테이블 행 추가 예제
연습문제 내용
1. SQL Developer에서 tUSER 테이블 만들기
2. SQL Developer 워크시트에서 USER테이블 만들기 User테이블 내용 id VARCHAR2(10) >> PK로 설정하기 passwd VARCHAR2(10) dong VARCHAR2(10) name VARCHAR2(10) age INT >>null 속성으로 만들기
3. 이클립스 SQL Developer 클래스에 호출하는 메서드 만들기 : private User userInput(){} 사용자한테 문자열 입력받아 User정보 받기(10자 이상 넘지 않게 체크하기) User정보: 아이디, 패스워드, 동, 이름, 나이
4. 이클립스 SQL Developer 클래스에 데이터가 정상적으로 입력되었다면 insert()메서드에 String sql = "INSERT INTO tCity VALUES('대구', 300, 300, 'y', '경상')"; 수정하기 예시) String sql = "INSERT INTO tUSER VALUES('"+user.id+"', "+user.passwd+....
5.이클립스 SQL Developer 클래스에 main() 메서드에서 ce.insert(); 코딩해서 테이블 값 추가되는지 확인하기
- Connection 객체 con를 통해 DriverManager.getConnection() 메서드로 SQL에 접속한다.
- Statement 객체 stmt에 con.createStatement(); 메서드로 statement를 받는다.
- .executeUpdate(문자열); 메서드로 해당 문자열을 쿼리문 형태로 SQL에서 실행한다. Statement와 Connecetion 객체는 사용 후 close()로 연결을 끊어 리소스를 해제해준다.
- 파일 입출력처럼 SQL에 데이터를 입력하는 것에는 아웃스트림과 유사하게 데이터 교환이 일어난다.
9. 데이터베이스 연결과 SQL 쿼리 실행 과정:
- 연결(Connect): 자바 애플리케이션은 JDBC(Java Database Connectivity)를 통해 데이터베이스 서버와 연결합니다. 이 때, 네트워크를 통한 데이터 교환을 시작하기 위한 준비가 이루어집니다.
- 쿼리 실행(Execute Query): 연결된 세션을 통해 SQL 명령이 데이터베이스 서버로 전송됩니다. .executeUpdate()는 SQL 쿼리(INSERT, UPDATE, DELETE 등)를 데이터베이스에 전송하며, 이 과정에서 네트워크를 통해 서버로 데이터(명령)를 "전송"합니다. 이를 아웃스트림에 비유할 수 있으나, 표준 입출력 스트림과는 다른 맥락입니다.
- 결과 처리(Handle Result): .executeUpdate() 메소드는 실행된 SQL 명령의 영향을 받은 행의 수를 반환합니다. 삽입, 수정, 삭제 등의 작업 후에는 이 반환 값을 통해 작업의 성공 여부를 판단할 수 있습니다.
- 자원 해제(Close Resources): Statement와 Connection 객체와 같은 자원은 사용 후 반드시 닫아주어야 합니다. 이는 사용된 자원을 해제하여 메모리 누수를 방지하고, 데이터베이스 서버에 대한 불필요한 연결을 제한하기 위함입니다.
'Coding 공부 > DBMS' 카테고리의 다른 글
[DBMS_Example] Board_DBMS (0) | 2024.03.21 |
---|---|
[DBMS] SQL 명령어 복습, 트렌젝션, prepared statement (0) | 2024.03.21 |
[DBMS] 커넥션 풀, 시퀀스, SELECT COUNT(*) (0) | 2024.03.21 |
[DBMS] 쿼리문 명령어, SQL 명령어 분류 (0) | 2024.03.16 |
[DBMS] DBMS개요, SQL 개요, 오라클 설치, SQL developer 사용법, 테이블 생성 예제 (0) | 2024.03.14 |
댓글