JSP와 서블릿 공부하면서 이후에 있을 Model 2 로 만드는 게시판 프로젝트 및 예제들을 하기 위해서 DB를 어느정도 기본기를 잡고 가야하기 때문에 이렇게 포스팅 하게 되었습니다.
SQLD 공부하면서 내용이 겹치는 부분들이 있을 수 있습니다.
DB는 SQL과의 연관성을 떼어내기 힘들기 때문입니다.
여러 시스템들이 공유할 수 있도록 저장되어 운용되는 데이터의 집합
(통합된 데이터
라고 합니다)
SQL 은 DB에 데이터를 삽입, 수정, 삭제, 검색을 하기 위한 관계형 DB (=RDMS)에서 제공하는 질의 언어입니다.
DB와 응용프로그램 사이에 존재하여 데이터의 올바른 정보 교환을 하게 해주는 것이 DBMS인데, DBMS상에서 삽입, 수정, 삭제,검색 기능을 실제로 처리하는 언어가 SQL
입니다.
RDMS. 즉, 관계형 DB는 MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database가 대표적입니다.
SQL은 크게 DDL, DML, DCL
로 나눌 수 있습니다.
DB 테이블을 생성하거나 재정의 및 제거할 수 있는 기능
CREATE
/ DB 또는 테이블과 같은 객체를 생성ALTER
/ 수정DROP
/ 제거예시1 (CREATE문)
CREATE TABLE 생성할 테이블명{
필드명1 타입명,
필드명2 타입명,
...
primary key(필드명)
};
예시2 (ALTER문)
ALTER TABLE 테이블명 적용옵션{
칼럼명 데이터타입명
};
예시3 (DROP문)
DROP TABLE 테이블명;
DESC 테이블명
: 데이터를 확인할 수 있습니다.
데이터의 검색 및 삽입, 수정 삭제할 수 있는 기능
INSERT
/ 테이블에 데이터 삽입UPDATE
/ 테이블에 삽입된 데이터 수정DELETE
/ 테이블에 삽입된 데이터 삭제SELECT
/ 테이블에 존재하는 데이터를 특정 조건으로 검색하여 결과 출력예시1 (INSERT문)
INSERT INTO 테이블명 (칼럼1,칼럼2...) VALUES (데이터값1, 데이터값2...)
테이블명 뒤에 데이터를 삽입할 컬럼명을 지정하지 않을 경우,
테이블에 존재하는 전체 컬럼에 삽입할 데이터를 모두 나열해야 합니다.
INSERT INTO 테이블명 VALUES (데이터값1, 데이터값2 ...)
예시2 (UPDATE문)
UPDATE 테이블명 SET 컬럼명1='수정값1', 컬럼명2='변경값2'...
WHERE 컬럼명3 ='조건값1' AND 컬럼명4='조건값2';
예시3 (DELETE문)
DELETE FROM 테이블명 WHERE 컬럼명1='조건값1' AND 컬럼명2='조건값2';
예시4 (SELECT문)
SELECT 컬럼명1, 컬럼명2 ... FROM 테이블명1, 테이블명2 ...
WHERE 컬럼명3 ='조건값1' AND 컬럼명4='조건값2'
ORDER BY 컬럼명5 [ASC | DESC];
참고, (출력될 때, 출력화면을 보면)
SELECT문 뒤에 * 라는 문자가 붙습니다.
이것은 모든 컬럼을 의미합니다.
생성하는 테이블은 회원 입장에서는 회원 가입과 로그인이 가능하며,
관리자 입장에선 회원의 정보수정, 회원 삭제가 가능
테이블에 어떤 컬럼들이 필요할까 ?
자바와 DBMS를 연결시켜주는 API(응용 프로그램 인터페이스)
드라이버 설치
JDBC 드라이버는 각 DBMS와 연동하여 JDBC API를 사용할 수 있도록 지원해주는
JDBC API 모듈입니다.
DBMS의 종류가 많기 때문에 DBMS 종류에 맞는 JDBC 드라이버를 설치해주어야 합니다.
JDBC 프로그램 작성 단계
기본적으로 준비해야 할 작성 단계
이유
JDBC 드라이버 이름 설정하는 이유 : JDBC가 어느 DBMS에 대한 드라이버를 사용하는지 확인. (각각에 맞는 드라이버가 있음)
접속할 DBMS URL : 접속할 DBMS의 호스트 주소 등을 의미
이 2가지 정보를 설정하였다면, JDBC 드라이버 이름을 가지고 JDBC 드라이버를 로드해야 합니다.
로드한 후, JDBC URL과 계정 정보를 가지고 DBMS에 접속하는 작업을 하여 Connection 객체를 얻어옵니다.
Connection 객체는 실제 db 작업을 하기 위해 꼭 필요한 객체입니다.
이 객체를 얻어왔다면 이것을 이용하여 여러 가지 작업을 수행할 수 있습니다.Connection 객체 내의 Statement를 이용하여 데이터의 삽입, 수정, 삭제를 수행할 수 있음.
만약, 연결에 실패했다면 아래와 같은 상황일 것입니다.
1. 드라이버 이름과 JDBC URL 확인. (포트 번호나 SID명의 경우 각각 다를 수 있음)
-> listener.ora 에서 확인 가능함 (오라클일 경우)
2. HOST 속성 값과 url 부분의 서버이름이 동일해야함.
3. url 변수에 지정한 포트 번호 = listener.ora 파일에 지정되어있는 포트번호의 일치 유무
4. SID명 일치하는지 확인
DB의 연결정보를 저장, Apache Tomcat 서버단계에서 저장합니다.
로직,
JDBC를 연동하기 위해서는 드라이버를 로드하고 JDBC URL로 접속하여 Connection 객체를 얻어오는 단계를 거쳐야 합니다.
커넥션 풀
은 db와 연결된 Connection 객체를 미리 생성하여 풀(pool)속에 저장해두고 필요할 때마다 이 풀에 접근하여 Connection 객체를 사용하고, 작업이 끝나면 다시 반환 하는 것을 말합니다.
사용자가 웹사이트에 요청을 할때마다 Connection 객체를 생성하여 연결한다면 메모리에 Connection 객체가 너무 많이 생성되어 매우 비효율적일 것입니다.
but, 커넥션 풀을 사용하면,
풀 속에 미리 커넥션이 생성되어있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않습니다.
또한 현재 다른 사용자가 사용하지 않는 커넥션을 재사용 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 만들 필요가 없습니다. => 프로그램 효율과 성능이 전체적으로 상승
일 처리의 최소 단위
트랜잭션을 이용하면 하나의 트랜잭션으로 묶인 작업들을 전부 실행되든지 전부 취소되게 처리할 수 있습니다.
실제 DB에 SQL문을 보내기 위해 필요한 객체입니다.
참고로, Connection 객체의 연결 정보를 가져와서 DB에 접근하므로, Conneciton 객체가 먼저 존재
해야합니다.
메소드 / 설명
Statement 객체와 비슷. PreparedStatement 인터페이스가 Statement 인터페이스를 상속받기 때문에 비슷합니다.
PreparedStatement 사용하면 값 매핑 기능을 사용해서 Statement 인터페이스보다 편리하게 sql문 전송가능