Coding 공부/DBMS

[DBMS] jdbc드라이버, jdbc path 추가, 자바에서 SQL접속, 데이터 추가, cmd에서 유저 생성, 권한설정

CBJH 2024. 3. 15.
728x90
반응형

1. jdbc드라이버 개요

  • 사용자가 코드를 작성해서 .java 파일을 만들면
  • jdk가 코드를 해석해서 오류가 없는지 확인하고 .class파일을 만든다.
  • .class파일은 코드를 작성한 패키지 상위 폴더 위치에 있는 bin 디렉터리에 저장된다.
  • JVM에서 .class파일을 읽어와 실행한다.
  • 드라이버 : 데이터베이스(오라클)로 JVM이 자동으로 변환해 보내줄 수 있게 해주는 연결자 역할을 한다.
  • jdbc 드라이버 : JDK17과 Oracle 21c를 연결하는데 필요한 드라이버이다.

 

2. 자바 이클립스에서 jdbc(Java database connectivity) path 추가하기

  1. 이클립스에서 자바 클래스 파일을 우클릭하여 properties를 클릭한다.
  2. Libraries 탭을 클릭해 Classpath를 누르고 add External JARs를 누른다.(외부에 설치된JAR 추가 - 오라클)
  3. ojdbc11.jar을 추가하고 Apply한다.
  4. 최상위 디렉터리의 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 쿼리 실행 과정:

  1. 연결(Connect): 자바 애플리케이션은 JDBC(Java Database Connectivity)를 통해 데이터베이스 서버와 연결합니다. 이 때, 네트워크를 통한 데이터 교환을 시작하기 위한 준비가 이루어집니다.
  2. 쿼리 실행(Execute Query): 연결된 세션을 통해 SQL 명령이 데이터베이스 서버로 전송됩니다. .executeUpdate()는 SQL 쿼리(INSERT, UPDATE, DELETE 등)를 데이터베이스에 전송하며, 이 과정에서 네트워크를 통해 서버로 데이터(명령)를 "전송"합니다. 이를 아웃스트림에 비유할 수 있으나, 표준 입출력 스트림과는 다른 맥락입니다.
  3. 결과 처리(Handle Result): .executeUpdate() 메소드는 실행된 SQL 명령의 영향을 받은 행의 수를 반환합니다. 삽입, 수정, 삭제 등의 작업 후에는 이 반환 값을 통해 작업의 성공 여부를 판단할 수 있습니다.
  4. 자원 해제(Close Resources): Statement와 Connection 객체와 같은 자원은 사용 후 반드시 닫아주어야 합니다. 이는 사용된 자원을 해제하여 메모리 누수를 방지하고, 데이터베이스 서버에 대한 불필요한 연결을 제한하기 위함입니다.

댓글