java.sql 패키지
- DNMS : 데이터를 안전하고 효과적으로 관리하기 위해 사용 (ex.Oracle, MySQL)
- SQL : DBMS가 읽고 처리할 수 있는 독립적인 언어
SQL 종류
- DDL (데이터가 저장되는 공간 = 테이블)
- CREATE : 테이블 생성
- ALTER : 테이블 수정
- DROP : 테이블 삭제
- DML
- INSERT : 데이터 등록
- UPDATE : 데이터 수정
- DELETE : 데이터 삭제
- JOIN : 데이터 결합
- DQL
- DLC
- GRANT : 권한 부여
- REVOKE : 권한 취소
- 테이블은 클래스와 컬럼은 변수와 비슷한 성질
DDL
- 데이터가 저장 되는 공간을 정의하는 언어
- 데이터 등록 구조
- 데이터 터입
- 문자 타입 : VARCHAR(숫자) (숫자는 글자 제한)
- 숫자 타입 : NUMBER
- 날짜 타입 : DATE
- 제약조건
- 해당 칼럼이 중복을 허용하는지, NULL 상태를 허용하는지 등 설정
- PRIMARY KEY : 해당 칼럼에 반드시 값 입력, 중복 허용 하지 않음
- NOT NULL : 해당 칼럼에 반드시 값 입력
- 칼럼과 칼럼은 콤마로 구분되며 마지막 칼럼 뒤에 콤마를 찍으면 오류이다.
DML
- 데이터 등록 구조
- INSERT INTO 테이블이름(컬럼목록) VALUES(값목록);
- INSERT 구문 주의사항
- 칼럼목록과 값 목록 개수 일치
- 칼럼목록과 값 목록 타입 일치
- 숫자 데이터는 아무 표시 없이 설정, 문자 데이터는 반드시 ''로 감싸야 한다.
- 데이터 수정 구조
- UPDATE 테이블이름 SET 칼럼이름 = 수정값, 칼럼이름 = 수정값;
- 특정 칼람만 변경하기 위해서는 WHERE 조건을 추가하여 원하는 칼럼 자료를 기입한다.
- 데이터 삭제 구조
- DELETE 테이블 이름 WHERE 칼럼이름 = 수정값
DQL
- 데이터 검색 구조
- SELETE 컬럼이름 FROM 테이블이름 WHERE 제약조건
- 모두를 선택하려면 SELETE * FROM 테이블이름 을 입력한다
- 오름차순/ 내림차순 정리
- 뒤에 ASC(오름차순), DESC(내림차순) 를 붙인다
JDBC(Java Datebase Connectivity)
- 자바에서 관계형 데이터베이스를 연동하기 위해 제공하는 표준 API
- JDBC를 이용하면 DBMS에 종속되지 않는 프로그램을 개발할 수 있다.
- 대부분 클래스가 아닌 인터페이스를 이용하여 개발하도록 되어 있다.
- JDBC API가 제공하는 인터페이스를 implements한 클래스가 JDBC 드라이버이다.
- JDBC API를 이용하면 데이터베이스가 변경되어도 JDBC 드라이버만 변경되면 프로그램 수정없이
데이터베이스를 교체할 수 있다.(다형성의 원리와 똑같다)JDBC프로그램 절차 (5단계)
1단계 : 드라이버 객체 생성 및 등록
- SQL 언어를 사용하는 폴더를 자바와 연결한다.
- registerDriver() 메서드가 SQLException을 발생시키므로 try ~ catch문을 사용하여 예외시켜준다.
try {
DriverManager.registerDriver(new 드라이버 이름);
} catch (SQLException e) {
e.printStackTrace();
}
2단계 : Connection 연결
- 드라이버 객체 로딩 한 후 SQL 데이터베이스와 커넥션을 연결
String jdbcUrl = "JDBC URL 입력";
Connection con = DriverManager.getConnection(jdbcUrl, "ID", "Password");
if(conn != null) {
System.out.println("SQL 연결 성공 : " + conn.toString());
}
- JDBC의 궁극적인 목표는 SQL을 Database로 보내는 것
- Connection은 두 곳을 연결하는 '길' 같은 의미이다.
3단계 : PreparedStatement 생성
- SQL과 Database로 연결하는 Connection이 생겼다면,
데이터를 전송하는 역할을 하는 PreparedStatement가 필요하다.
String sql = "insert into 테이블이름 values(?, ?, ?, ?)";
PreparedStatement sta = con.prepareStatement(sql);
if(stmt != null) {
System.out.println("Statement 객체 : " +
stmt.toString());
}
- PreparedStatement 객체에 INSERT 명령어가 설정되어 있다.
- 자료가 PreparedStatment에 의해 옮겨지는 상태이다.
4단계 : SQL 전송
- SQL 파라미터 값을 설정할 때는 반드시 칼럼 데이터 타입을 확인
(설정되지 않은 파라미터가 있다면 SQLException이 발생)
- SQL을 DB에 전송할 때는 executeUpdate() 메서드를 활용
(INSERT, UPDATE, DELETE문 실행 시 사용)
sta.set데이터타입(1, 값);
sta.set데이터타입(2, 값);
sta.set데이터타입(3, 값);
sta.set데이터타입(4, 값);
int count = sta.executeUpdate();
System.out.println(count + "건 데이터 처리 성공");
5단계 : 연결 해제
- JDBC 프로그램이 종료되면 DB에 사용했던 모든 객체의 연결을 close 한다.
- 연결 해제 작업은 예외가 발생하도 실행하는 finally 블록에 작성한다.
finally {
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
최종코드
- 위 5단계를 따라 가면 최종코드 형태가 나온다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class 클래스이름 {
public static void main(String[] args) {
try {
DriverManager.registerDriver(new 드라이버 이름());
String jdbcUrl = "JDBC URL 입력";
Connection con = DriverManager.getConnection(jdbcUrl, "ID", "Password");
String sql = "insert into 테이블이름 values(?, ?, ?, ?)";
PreparedStatement sta = con.prepareStatement(sql);
sta.set데이터타입(1, 값);
sta.set데이터타입(2, 값);
sta.set데이터타입(3, 값);
sta.set데이터타입(4, 값);
int count = sta.executeUpdate();
System.out.println(count + "건 데이터 처리 성공!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}