<오늘의 학습-JAVA를 이용한 데이터베이스>
1. JDBC 설치
2. 데이터베이스
1. JDBC 설치
▶ JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
▶ 오라클과 연계하여 실습하기 위해 JDBC를 설치한다. (MYSQL은 프로젝트 할 때 사용할 예정)
▶ 오라클 홈페이지 다운로드
JDBC and UCP Downloads page | Oracle 대한민국
죄송합니다. 검색 내용과 일치하는 항목을 찾지 못했습니다. 원하시는 정보를 찾는 데 도움이 되도록 다음을 시도해 보십시오. 검색에 사용하신 키워드의 철자가 올바른지 확인하십시오. 입력
www.oracle.com
2. 데이터베이스
- 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 집합이다.
- 데이터의 저장, 검색, 갱신을 효율적으로 수행할 수 있도록 데이터를 고도로 조직화하여 저장한다.
▶ DBMS : 데이터베이스 관리 시스템(DataBase Management System)
- 오라클(Oracle), 마이크로소프트의 SQL Server, MySQL, IBM의 DB2
▶ 데이터베이스 종류
- 관계형 데이터베이스
- 키(key)와 값(value)들의 관계를 테이블로 표현한 데이터베이스 모델이다.
- 키는 테이블의 열(column)이 되며 테이블의 행(row)은 하나의 레코드(record)를 표현한다.
- 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스이다.
- 객체 지향 데이터베이스
- 객체 지향 프로그래밍에 쓰이는 것으로, 정보를 객체의 형태로 표현하는 데이터베이스 모델이다.
- 오브젝트 데이터베이스(object database)라고도 부른다
▶ 관계형 데이터 베이스의 구조
- 데이터들이 다수의 테이블로 구성한다.
- 각 행은 하나의 레코드다.
- 각 테이블은 키(key)와 값(value) 들 의 관계로 표현한다.
- 여러 테이블 간에 공통된 이름의 열을 포함하는 경우, 서로 다른 테이블 간에 관계(relation)가 성립한다.
- 대부분의 데이터베이스는 관계형 데이터베이스이다.
- ex) JDBC API
▶객체 지향 데이터베이스
- 객체 지향 프로그래밍에 사용한다.
- 정보를 객체의 형태로 표현한다.
- 오브젝트 데이터베이스(object database)라고도 부른다.
- 객체 모델이 그대로 데이터베이스에도 적용되므로 응용프로그램 의 객체 모델과 데이터베이스의 모델이 부합된다.
▶ SQL과 JDBC의 차이점
- SQL(Structured Query Language)
- 관계형 데이터베이스 관리 시스템에서 사용한다.
- 데이터베이스 스키마 생성, 자료의 검색, 관리, 수정, 그리고 데이터베이스 객체 접근 관리를 위해 고안된 언어이다.
- 데이터베이스로부터 정보를 추출하거나 갱신하기 위한 표준 대화식 프로그래밍 언어이다.
- 다수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택했다.
- JDBC (Java DataBase Connectivity)
- 관계형 데이터베이스에 저장된 데이터를 접근 및 조작할 수 있게하는 API
- 다양한 DBMS에 대해 일관된 API로 데이터베이스 연결, 검색, 수정, 관리 등을 할 수 있게 한다.
▶ Stetement 클래스
SQL문을 실행하기 위해서는 Statement 클래스를 이용
주요 메소드
메소드 | 설명 |
ResultSet executeQuery(String sql) | 주어진 sql문을 실행하고 결과는 ResultSet 객체에 반환 |
int executeUpdate(String sql) | INSERT, UPDATE, DELETE 와 같은 SQL문을 실행하고, SQL 문의 실행으로 영향을 받은 행의 개수나 0을 반환 |
void close() | Statement 객체의 데이터베이스와 JDBC 리소스를 즉시 반환 |
- 데이터 검색을 위해 executeQuery() 메소드 사용
- 추가, 수정, 삭제와 같은 데이터 변경은 executeUpdate() 메소드 사용
▶ ResultSet 클래스
SQL문 실행 결과를 얻어오기 위해서는 ResultSet 클래스를 이용
현재 데이터의 행(레코드 위치)을 가리키는 커서(cursor)를 관리
커서의 초기 값은 첫 번째 행 이전을 가리킴
주요 메소드
메소드 | 설명 |
boolean first() | 커서를 첫 번째 행으로 이동 |
boolean last() | 커서를 마지막 행으로 이동 |
boolean next() | 커서를 다음 행으로 이동 |
boolean previous() | 커서를 이전 행으로 이동 |
boolean absolute(int row) | 커서를 지정된 행으로 이동 |
boolean isFirst() | 첫 번째 행이면 true 반환 |
boolean isLast() | 마지막 행이면 true 반환 |
void close() | ResultSet 객체의 데이터베이스와 JDBC 리소스를 즉시 반환 |
Xxx getXxx(String columnLable) | Xxx 해당 데이터 타입을 나타내며 현재 행에서 지정된 열이름(Column)에 해당하는 데이터를 반환한다. ex) int형 데이터를 읽는 메소드: getInt() |
Xxx getXxx(int columnIndex) | Xxx 해당 데이터 타입을 나타내며 현재 행에서 지정된 열 인덱스(Index)에 해당하는 데이터를 반환한다. ex) int형 데이터를 읽는 메소드: getInt() |
- 주로 컬럼명으로 접근한다.
- Xxx getXxx(String )을 더 많이 쓴다.
▶ 이클립스로 실습해 보자.
Connection conn;
Statement stmt = null; //데이터베이스에 연결한 객체를 생성하는 역할. 실제로 검색할 때 이 객체를 이용하게 된다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver"); //MySQL 드라이버 로드. String형을 받는 메소드
String db_url = "jdbc:oracle:thin:@localhost:1521:xe"; //작업한 오라클의 주소를 나타낸다.
String db_id = "system";
String db_pw = "test123";
conn = DriverManager.getConnection(db_url, db_id, db_pw); //데이터 베이스의 연결 정보를 담아 요청한다.
System.out.println("DB 연결 완료");
} catch (ClassNotFoundException e) { //다운로드 받은 JDBC를 오라클과 연결해주면 오류가 뜨지 않는다.
System.out.println(e.getMessage()); //오류 메세지를 가져오는 메소드
//System.out.println("JBDC 드라이버 로드 오류");
} catch (SQLException e){
System.out.println("DB 연결 오류");
}
▶ Properties - Java Build Path - Add External JARs.. - 다운받은 ojdbc6-11.2.0.4.jar 추가
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcEx01 {
public static void main(String[] args) {
Connection conn;
Statement stmt = null; //데이터베이스에 연결한 객체를 생성하는 역할. 실제로 검색할 때 이 객체를 이용하게 된다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver"); //MySQL 드라이버 로드. String형을 받는 메소드
String db_url = "jdbc:oracle:thin:@localhost:1521:xe"; //작업한 오라클의 주소를 나타낸다.
String db_id = "system";
String db_pw = "test123";
conn = DriverManager.getConnection(db_url, db_id, db_pw); //데이터 베이스의 연결 정보를 담아 요청한다.
System.out.println("DB 연결 완료");
stmt = conn.createStatement();
ResultSet srs = stmt.executeQuery("select * from student");
//printData(srs, "name", "id", "dept");
srs = stmt.executeQuery("select name, id, dept from student where name='옥한빛'");
//printData(srs, "name", "id", "dept");
} catch (ClassNotFoundException e) { //다운로드 받은 JDBC를 오라클과 연결해주면 오류가 뜨지 않는다.
System.out.println(e.getMessage()); //오류 메세지를 가져오는 메소드
//System.out.println("JBDC 드라이버 로드 오류");
} catch (SQLException e){
System.out.println("DB 연결 오류");
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcEx01 {
public static void main(String[] args) {
Connection conn;
Statement stmt = null; //데이터베이스에 연결한 객체를 생성하는 역할. 실제로 검색할 때 이 객체를 이용하게 된다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver"); //MySQL 드라이버 로드. String형을 받는 메소드
String db_url = "jdbc:oracle:thin:@localhost:1521:xe"; //작업한 오라클의 주소를 나타낸다.
String db_id = "system";
String db_pw = "test123";
conn = DriverManager.getConnection(db_url, db_id, db_pw); //데이터 베이스의 연결 정보를 담아 요청한다.
System.out.println("DB 연결 완료");
stmt = conn.createStatement();
ResultSet srs = stmt.executeQuery("select * from student");
//printData(srs, "name", "id", "dept");
srs = stmt.executeQuery("select stu_name, stu_no, stu_dept from student where stu_name='옥한빛'");
//printData(srs, "name", "id", "dept");
} catch (ClassNotFoundException e) { //다운로드 받은 JDBC를 오라클과 연결해주면 오류가 뜨지 않는다.
System.out.println(e.getMessage()); //오류 메세지를 가져오는 메소드
//System.out.println("JBDC 드라이버 로드 오류");
} catch (SQLException e){
System.out.println(e.getMessage());
//System.out.println("DB 연결 오류");
}
}
}
DB 연결 완료
executeQuery의 String 문에 컬럼명을 일치시켜야 오류가 나지 않는다.
DB 연결 완료
ORA-00904: "DEPT": 부적합한 식별자
DB와 연결
static void printData(ResultSet srs, String stu_name, String stu_no, String stu_dept)
throws SQLException {
System.out.print("name\t|\t");
System.out.print("id\t\t|\t");
System.out.println("dept");
while (srs.next()) {
System.out.print(srs.getString("stu_name"));
System.out.print("\t|\t" + srs.getString("stu_no"));
System.out.println("\t|\t" + srs.getString("stu_dept"));
}
}//printData_end
public static void main(String[] args) {
Connection conn;
Statement stmt = null; //데이터베이스에 연결한 객체를 생성하는 역할. 실제로 검색할 때 이 객체를 이용하게 된다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver"); //MySQL 드라이버 로드. String형을 받는 메소드
String db_url = "jdbc:oracle:thin:@localhost:1521:xe"; //작업한 오라클의 주소를 나타낸다.
String db_id = "system";
String db_pw = "test123";
conn = DriverManager.getConnection(db_url, db_id, db_pw); //데이터 베이스의 연결 정보를 담아 요청한다.
System.out.println("DB 연결 완료");
System.out.println(); //줄바꿈
stmt = conn.createStatement();
ResultSet srs = stmt.executeQuery("select * from student");
printData(srs, "stu_name", "stu_no", "stu_dept");
//srs = stmt.executeQuery("select stu_name, stu_no, stu_dept from student where stu_name='옥한빛'");
//printData(srs, "stu_name", "stu_no", "stu_dept");
} catch (ClassNotFoundException e) { //다운로드 받은 JDBC를 오라클과 연결해주면 오류가 뜨지 않는다.
System.out.println(e.getMessage()); //오류 메세지를 가져오는 메소드
//System.out.println("JBDC 드라이버 로드 오류");
} catch (SQLException e){
System.out.println(e.getMessage());
//System.out.println("DB 연결 오류");
}
}//main_end
DB 연결 완료
name | id | dept
옥한빛 | 20153075 | 기계
이태연 | 20153088 | 기계
유가인 | 20143054 | 기계
조민우 | 20152088 | 전기전자
심수정 | 20142021 | 전기전자
박희철 | 20132003 | 전기전자
김인중 | 20151062 | 컴퓨터정보
진현무 | 20141007 | 컴퓨터정보
김종헌 | 20131001 | 기계
옥성우 | 20131025 | 기계
김철수 | 20221005 | 컴퓨터정보
컬럼의 이름이 일치하지 않는다면 오류가 난다.
DB 연결 완료
옥한빛 | 20153075 부적합한 열 이름
옥한빛을 찾는 코드를 실행해 보자.
srs = stmt.executeQuery("select stu_name, stu_no, stu_dept from student where stu_name='옥한빛'");
printData(srs, "stu_name", "stu_no", "stu_dept");
옥한빛 | 20153075 | 기계
실습
https://deliciouscode.tistory.com/104
데이터베이스 연결 실습 1 (24일차)
deliciouscode.tistory.com
github 이용
https://deliciouscode.tistory.com/105
GitHub 이용하기 (24일차)
deliciouscode.tistory.com
'HRD_훈련 > JAVA' 카테고리의 다른 글
[SQL] JOIN 실습 3 (21일차) (2) | 2023.06.14 |
---|---|
[JAVA] Test01 (18일차) (0) | 2023.06.10 |
[JAVA] StringBuffer, StringTokenizer, Calendar (18일차) (0) | 2023.06.09 |
[JAVA] Iterator (17일차) (0) | 2023.06.08 |
[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차) (0) | 2023.06.07 |