º Database º/Oracle

[데이터베이스] Oracle 서점관리시스템 만들기 연습하기

Poony 2023. 4. 22. 19:50

* 서점관리에 필요한 테이블을 만들어 봅시다. 

 

1. 서점 관리 테이블에서 인스턴스들을 체크합니다.

 

- 고객 ( 고객번호, 고객이름 , 주소, 전화)

- 도서 (도서번호, 도서명, 출판사, 가격)

- 주문 (주문번호, 고객번호, 도서번호, 구매가격, 구매일)

 

2. 사용자 계정만들기 (DDL) 

SQL> create user c##madang identified by *****;

 

3. 권한부여하기 (DCL)

SQL> grant connect,resource,dba to c##madang;

 

4. 새로운 사용자로 데이터베이스에 접속합니다.

 

아이디는 c##madang, 비번은 *****으로 표시하겠습니다.

 

+ 시스템 재연결하는 방법 (2가지)

  1) 기존의 연결을 끊고 다시 재접속 

 SQL> exit
 C:\Users\user>sqlplus system/manager
 SQL>sqlplus  c##madang/*****


  2) 연결 끊지 않고 conn으로 연결

 SQL>conn  c##madang/*****

 

5. 테이블 만들기

 

- create table 테이블이름 (컬럼1 자료형1, 컬럼2 자료형2...)

- primary key : 중복 안된다는 뜻
- references 테이블명( ) : 자식테이블이 부모테이블에서 주식별자를 참조할 때 쓰는 명령어

고객 (고객번호, 고객이름, 주소, 전화)
create table customer(
custid number primary key,
name varchar2(20),
address varchar2(50),
phone varchar2(20));
도서(도서번호, 도서명, 출판사, 가격)
create table book(
bookied number primary key,
bookname varchar2(50),
publisher varchar2(50),
price number);
주문(주문번호, 고객번호, 도서번호, 구매가격, 구매일)
create table orders(
orderid number primary key,
custid number references customer(custid),
bookied number references book(bookied),
saleprice number,
orderdate date);

  

6. 테이블 구조확인

  

-  desc 테이블이름;

 

SQL> desc student;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(20)
 KOR                                                NUMBER
 ENG                                                NUMBER
 MATH                                               NUMBER

 

 

7. 행 추가하기 

 

- null : 빈칸출력

 

insert into customer values(1, '박지성', '영국 맨체스타', '000-5000-0001');
insert into customer values(2, '김연아', '대한민국 서울', '000-6000-0001');
insert into book values(1, '축구의 역사', '굿스포츠',7000); i
nsert into book values(2, '축구의 이해', '나무수',13000);
insert into book values(3, '축구하는 사람', '대한미디어',22000);
insert into orders values(1,1,1,7000,'2023/04/01');
insert into orders values(2,2,2,13000,'2023/04/01');
insert into orders values(3,3,3,22000,'2023/04/01');

 

8. 커밋하기 ( 추가자료 반영) : commit;

    롤백하기 ( 추가자료 취소) : rollback;

 

9. cmd에 보여지는 글자 정돈을 위해 포맷

 SQL> ed ff 

> 위와 같이 작성후 엔터를 누르면 ff.sql 메모장이 나타나게 됩니다.

 

custid format 9999; 
column name format a10;
column address format a20;
column phone format a20;
column bookied format 9999;
column bookname format a20;
column publisher format a10;
column price format 999,999;
column  ororderid format 9999;
column saleprice format 999,999;
column orderdate format a15;

> 메모장에 작성 하고 저장합니다. 

 

 SQL>@ff 

> cmd창에 @ ff 를 작성하면 바로 글자정돈 포맷이 진행됩니다.

 


저장해 둔 데이터들을 자바에서 데이터베이스에 연결하여 사용 합니다.

 

 

1.  jdbc 프로그래밍 설정하기 

 

- jdbc 드라이버를 프로젝트에 설정한다.

 

자바 프로젝트 이름 오른쪽 단추 -> Properties -> Java Build path -> Libraries -> Classpath 
-> Add External JARS..-> C:\app\SIST\product\21c\dbhomeXE\jdbc\lib\ojdbc8.jar 선택

 

 

2. jdbc 프로그래밍 절차

 

1) jdbc 드라이버를 메모리로 로드한다.

- Class.forName("드라이버 이름");

Class.forName("oracle.jdbc.driver.OracleDriver");


2)  db서버에 연결한다.


- Connection conn = DriverManager.getConnection("서버의주소","유저명","암호");
- 서버의 주소 : "jdbc:oracle:thin:@아이피주소:포트번호:서비스명"

유저명  "c##madang"   |    암호  "*****"

Connection conn = DriverManger.getConnection("jdbc:oracle:thin:@localhost:1521:XE","c##madang" ,"*****");


3) sql명령을 실행하기 위한 Statement 객체를 생성한다.

Statement stmt = conn.createStatment();


4) sql 명령을 실행한다. (2가지 방법)


[1] 데이터 베이스 변경이 있는 명령(추가, 수정, 삭제)
-> int re = stmt.executeUpdate(sql); 
(성공적으로 명령을 수행한 레코드 수로 반환)

[2] 데이터 베이스를 조회
-> ResultSet rs =  stmt.executeQuery(sql);
(검색한 결과를 ResultSet으로 반환) 

5) 사용했던 자원들을 닫아줍니다.
stmt.close();
conn.cloese();

 

 

자바와 jdbc 데이터베이스 연결 하기 위하여 최종적으로 이렇게 작성하시면 됩니다.

 

try {
			String sql = "insert into student values('"+name+"',"+kor+","+eng+","+math+")";
			System.out.println(sql);
			
			//1. jdbc 드라이버를 메모리로 로드한다.
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//2. db서버에 연결한다. 
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "c##sist", "sist");
			//3. sql명령을 실행하기 위한 Statement 객체를 생성한다.
			Statement stmt = conn.createStatement();
			
			//4.sql 명령을 실행한다.
			int re = stmt.executeUpdate(sql);
			
			if(re ==1) {
				System.out.println("레코드를 추가하였습니다");
			}else {
				System.out.println("실패");
			}
			//5. 사용했던 자원들을 닫아줍니다.
			stmt.close();
			conn.close();
		} catch (Exception e) {
			System.out.println("예외발생 : "+ e.getMessage());
		}