Java + Oracle = JDBC
Oracle 명령어
(1) 계정생성
1) DBMS 란
2) 관계형 DB란
3) DDL - Create / Drop / Alter / Truncate
DCL - Grant / Revoke
DML - ELECT, INSERT, UPDATE, DELETE
TCL - BEGIN, COMMIT, ROLLBACK
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
DBMS(데이터베이스 관리 시스템)은 데이터베이스를 생성하고 관리하며 사용자가 데이터를 검색, 삽입, 수정 및 삭제할 수 있는 소프트웨어 시스템입니다.
DBMS는 데이터베이스를 효율적으로 구성하고 데이터를 보호하며 데이터베이스 관련 작업을 수행하는 데 사용됩니다.
관계형 DB는 데이터를 테이블의 형태로 저장하는 데이터베이스입니다. 각 테이블은 특정 주제나 엔터티에 대한 정보를 저장하고, 테이블 간의 관계를 정의함으로써 데이터를 구조화합니다. 관계형 DB는 테이블, 열, 행으로 구성되어 있습니다.
DDL(데이터 정의 언어), DML(데이터 조작 언어), DCL(데이터 제어 언어), TCL(트랜잭션 제어 언어)은 DBMS에서 사용되는 주요 언어입니다. |
DDL(데이터 정의 언어): 데이터베이스의 구조를 정의하거나 수정할 때 사용됩니다. 테이블 생성, 수정, 삭제와 같은 데이터베이스 객체를 정의하는 데 사용됩니다. |
DML(데이터 조작 언어): 데이터베이스에서 데이터를 조회, 삽입, 수정, 삭제하는 데 사용됩니다. 주로 SELECT, INSERT, UPDATE, DELETE 문과 같은 명령어가 포함됩니다. |
DCL(데이터 제어 언어): 데이터베이스에 대한 액세스 권한을 제어하는 데 사용됩니다. 주로 GRANT(권한 부여)와 REVOKE(권한 취소) 명령어가 포함됩니다. |
TCL(트랜잭션 제어 언어): 트랜잭션의 처리를 제어하는 데 사용됩니다. 트랜잭션을 시작, 종료, 커밋(적용) 또는 롤백(취소)하는 데 사용됩니다. 주로 BEGIN, COMMIT, ROLLBACK과 같은 명령어가 포함됩니다. |
[CMD] - [sqlplus] - [system / 1234] 하면 SQL 프론트 상태
SQL >
// 최고 관리자 화면
최고관리자가 계정을 새로 생성해 줄수가 있다.
(1) 계정만들기
: create user jsl14 identified by 1234;
// 전에 실행한 명령 '↑' 누르면 됨
(2) 권한 부여하기 // CRUD 등 명령어를 하려면 권한이 있어야해
: grant connect, resource to jsl14;
// ' ; ' 끝에 꼭 붙혀줘라
(3) Oracle 권한 부여 사용법 // https://blog.naver.com/heartflow89/221002112762
CONNECT는 접속 권한
RESOURCE는 객체(생성, 수정, 삭제), 데이터(입력, 수정, 조회, 삭제) 권한
RESOURCE로 권한을 주지 않고 테이블 생성 데이터 입력만 가능하도록 일부 권한만 줄 수도 있다.
//시험 볼 때에는 시스템 권한으로 시험 봅니다.
프로젝트를 할 때 JDBC를 연동할 때, JSL14 계정으로 하려고 하는 과정임
// dos-command 벗어날 때 [quit]
(4) table 이란?
: Schema 라고도 부른다.
관계형 데이터베이스를 구성하는 기본 데이터 구조로서 행과 열의 구조를 가지며 이 테이블을 이용하여 데이터를 입력, 수정, 삭제, 추출 등을 하게된다.
String vachar 고정 크기 |
vachar 가변 크기 |
number |
dobule number(3,2) ; 정수부 3자리, 소수부 2자리 |
DB 를 관리하기 위해선
(1) table 을 만들어준다
(1)-1 column 명을 만들어준다. (ex) 학번, 이름, 국어, 영어, 수학, 총점 등...
(1)-2 타입을 정해준다. (ex) vachar / number 등을
(1)-3 Primnary Key (ex) 학번
(1)-4 행과 열 ; Column / Row
: create table score(
2 numid number(6),
3 name varchar2(12),
4 kor number(3),
5 eng number(3),
6 mat number(3),
7 tot number(3),
8 avg number(3,2),
9 rank number(2)
10 );
select * from all_tables; // 만들어진 모든 테이블
desc scroe; // description score
가로 한줄 : 행 Record
numid,name,kor,eng,mat,tot,avg,rank
: insert into score (numid,name,kor,eng,mat) values (1111,'홍길동',90,90,90);
: select numid,name,kor,eng,mat from score;
: insert into score (numid,name,kor,eng,mat) values (2222,'kim',100,100,100);
: insert into score (numid,name,kor,eng,mat) values (3333,'park',60,60,60);
: select numid,name,kor,eng,mat from score;
: select * from score;
: insert into score values (3333,'park',60,60,60); // 어디가 어디 값인지 모른다. 전부 다 쓸때만 가능하다
: insert into score values (4444,'lee',50,50,50,0,0.0,0);
: update score set name='hong' where numid=1111; // where 다음에는 조건을 씁니다. // set 다음에는 바꿀 값을 적어줍니다.
: select numid,name from score where numid=1111;
: select * from score where numid=2222;
: update score set kor=100 where numid=3333;
: select numid,name,kor,eng,mat from score;
: update score set mat=100 where name='lee';
: select name,mat from score;
: insert into score (numid,name,kor,eng,mat) values (5555,'park',10,10,10);
: insert into score (numid,name,kor,eng,mat) values (6666,'pee',50,50,50);
: insert into score (numid,name,kor,eng,mat) values (7777,'hang',70,70,70);
: insert into score (numid,name,kor,eng,mat) values (8888,'choi',85,85,85);
: select numid,name from score;
: select kor,eng,mat from score where name='park';
: select numid,name,kor,eng,mat from score where kor >= 50 and eng >= 50 and mat >= 60;
: select numid,name,kor,eng,mat from score where kor >= 100 or eng >= 100 or mat >= 100;
: select numid,name from score where numid >= 3333;
: select numid,name from score where eng <= 3333;
: select * from score;
: update score set name='pang' where numid=4444;
: select numid,name,kor,eng,mat from score where numid=4444;
: update score set eng=100 where numid=4444;
: update score set kor=100,eng=100,mat=100 where numid=5555;
: update score set tot = kor + eng + mat;
: update score set avg = tot/3;
: alter table score rename column avg to aver;
: update score set aver = tot / 3;
: select tot/3 as Avra from score;
: select numid,name,kor,eng,mat,tot,tot/3 as Avra from score;
: alter table score drop column Avra;
: select numid,name,kor+eng+mat as tot, (kor+eng+mat)/3 as aver
// 실제 테이블에는 없는 컬럼이지만 select로 표현할 수 있다.
2 from score;
: delete score where numid=4444;
: rollback; // commit 하기 전까지 되돌려 버림
: delete score where numid=4444;
: commit; // 저장. 덮어쓰기. 영구
SQL Developer 사용하기
https://www.oracle.com/database/sqldeveloper/
SQL Developer 21.4.3 Downloads
Version 21.4.3.063.0100 - March 3, 2022
MD5: b344a7010e1ca76b6fe20696ebbb1b43
SHA1: 7dec3e55f0eeb8b7e4af5b24cb96f36ee05144e0
Installation Notes
JDK 8 or 11 required
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
oracle 과 eclipse 와 연동
(1)ojdbc.jar 파일을 포함시켜라
: 프로젝트이름-오른쪽버튼-build path- configure build path- 라이브러리-add external - oracle xe 폴더
app더블클릭 오라클 더블클릭 프로덕트 더블ㄹ클릭 11 더블 클릭 서버 더블클릭 jdbc더블클릭 lib- 6 jar-열기
[ojdbc6.jar] 을 선택하고 [New package] : Java03_jdbc.model
[ojdbc6.jar] 을 선택하고 [New package] : Java03_jdbc.db
[Java03_jdbc]을 선택하고,[New Class] :
서비스 가 중지되어 있을 경우 DB 연동이 안될 수도 있으니 서비스 들어가서 아래 세가지를 활성화 시켜야 한다. |
OracleServiceXE OracleXEClrAgent OracleXETNSListener |
package Java03_jdbc.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Db {
public Connection getConnection() {
Connection conn = null;
try {
// 드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","jsl14", "1234");
} catch (Exception e) {
System.out.println("드라이버 로딩 또는 DB 접속 실패");
e.printStackTrace();
}
return conn;
}
}
데이터베이스에 접속하려면 ojdbc.jar 파일을 추가한다 데이터베이스의 드라이버로딩 / db 접속을 해줘야 한다. 접속과 로딩을 하는 기능 메소드를 하나 만들고 사용하는 객체는 connection 객체를 사용해야한다 첫번째, 드라이버 로딩 : class.forName("oracle.jdbc.driver.OracleDriver"); 드라이버 매니저라는 겟커넥션, db의 주소, 계정명, password를 입력하면 된다. 접속된 정보를 return 시켜줘야한다. 뭐를 ? 커넥션 접속정보를 리턴타입이 뭐야? void 그럼 뭐? 디비에 접속하는 메서드를 쓸려면 하이스쿨에서 객체생성을 해야할거 아니야 db 객체를 생성해야할거 아니냐 |
JDBC 란?
Java DataBase Connectivity의 약자
자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고
SQL 문을 수행하여, 처리하고자 할 때, 사용되는 표준 SQL 인터페이스 API 이다.
JDBC 를 이용하여 Database에 접근하여 Project를 만드는 순서
1. JDBC 드라이버 로드 : Class.forName()
2. DB 연결 : java.sql.Connection
Db db = new Db();
Connection conn = db.getConnection(); // 접속된 정보를 RETURN 하겠죠?
if(conn != null) {
System.out.println("DB 접속 되었습니다.");
}
}
}
public class Db {
public Connection getConnection() {
// 연결이 되었는지 안되었는지 확인하는 일종의 boolean 타입 처럼 사용 되는 것 같다
Connection conn = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
// 기본접속 : String id = "system";
String id = "jsl14";
String pw = "1234";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, id, pw);
} catch(Exception e) {
}
return conn;
}
}
작성한 내용을 JDBC 를 이용하여, table에 저장해야한다.
(0) view()
(1) insert()
(2) select()
(3) delete()
(4) update()
(1) 입력하는 방법
: 한개한개 집어넣는것이 아니라, 하나의 객체형태로. 컬렉션프레임워크.
자바언어는 객체지향언어. 데이터를 주고 받을 때, 객체 단위로 데이터를 주고 받는다.
insert into
키보드로 부터 학년,반,번호,이름,생년월일,성별[1:남성/2:여성],전화번호1, 전화번호2, 전화번호3 을 입력받아
table에 저장해야한다.
입력받은 값을 DB에 저장하려면, 입력받은 값을 저장시키는 설계도가 필요 (멤버변수가 있는)
이 설계도를 객체로 만들어가지고, insert라는 메서드로 보내면 된다.
처리하고자 하는 화면을 띄워주는 view() 메서드도 만든다. --> model 이라는 패키지에다가 만들것이다.
변수명은 column의 이름과 같이 하여라
view 에서는 값을 입력 받고
insert 는 DB에 값을 저장하는 것이다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
@ JDBC 연동
1) 오라클 설치 -> jsl14 / 1234
2) Table 만들기
C : CREATE
R : READ
U : UPDATE
D : DELETE
3) DB 접속
(1) 드라이버 로딩
: Class.forName("oracle.jdbc.driver.OracleDriver");
(2) 접속
: String url = "
: drivermanager.getConnection("url",id,pw)
4) 패키지
ㄴ프로젝트
ㄴ DAO 패키지 ( DataBase And Object)
ㄴ DB하고 연동해서 CRUD 작업을 처리하는 클래스 => Method
ㄴ VO, DTO 클래스 : 중간다리 역할 ==> 화면으로 보내주어 출력
화면에서 번호 이름 점수를 입력받아서 테이블(DB) 에 저장하고 싶으면 : Insert [vo] 로 보낸 다음 (DB) 로 보낸다.
: 객체 형태로 데이터를 처리하기 위해서
; getter / setter 썻던 그거
// 우리는 패키지를 모델이라 했잖아. 보통은 DAO 라고 많이 ~~
각 멤버변수는 이름을 그대로 쓰는 것을 추천한다.
+ int number
+ String vachar 고정 크기
vachar 가변 크기
+ dobule number(3,2) ; 정수부 3자리, 소수부 2자리
dao : method
vo : getter/setter
mvc pattern ( model / view / controller )
toad for oracle
'JAVA 줘? 잡아줘!' 카테고리의 다른 글
[Java]Day049 : DB + JAVA 연결해서 저장하고 검색하기 [select] (0) | 2023.10.16 |
---|---|
[Java]Day047 : 추상메서드 Abstract / 인터페이스 Interface (0) | 2023.10.10 |
[Java]Day046 : 다형성 (Polymorphism) (0) | 2023.10.02 |
[Java]Day045 : 상속 (Inheritance) (0) | 2023.09.26 |
[Java]Day044 : 컬렉션프레임워크 - List 안에 Map 넣기 (1) | 2023.09.26 |