728x90
반응형

<오늘의 학습-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

 

 

▶ 데이터베이스 종류

  1. 관계형 데이터베이스
    • 키(key)와 값(value)들의 관계를 테이블로 표현한 데이터베이스 모델이다.
    • 키는 테이블의 열(column)이 되며 테이블의 행(row)은 하나의 레코드(record)를 표현한다.
    • 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스이다.
  2. 객체 지향 데이터베이스
    • 객체 지향 프로그래밍에 쓰이는 것으로, 정보를 객체의 형태로 표현하는 데이터베이스 모델이다.
    • 오브젝트 데이터베이스(object database)라고도 부른다

 

 


▶ 관계형 데이터 베이스의 구조

  • 데이터들이 다수의 테이블로 구성한다.
  • 각 행은 하나의 레코드다.
  • 각 테이블은 키(key)와 값(value) 들 의 관계로 표현한다.
  • 여러 테이블 간에 공통된 이름의 열을 포함하는 경우, 서로 다른 테이블 간에 관계(relation)가 성립한다.
  • 대부분의 데이터베이스는 관계형 데이터베이스이다.
    • ex) JDBC API

 

 

▶객체 지향 데이터베이스

  • 객체 지향 프로그래밍에 사용한다.
  • 정보를 객체의 형태로 표현한다.
  • 오브젝트 데이터베이스(object database)라고도 부른다.
  • 객체 모델이 그대로 데이터베이스에도 적용되므로 응용프로그램 의 객체 모델과 데이터베이스의 모델이 부합된다.

 

 


▶ SQL과 JDBC의 차이점

  1. SQL(Structured Query Language)
    • 관계형 데이터베이스 관리 시스템에서 사용한다.
    • 데이터베이스 스키마 생성, 자료의 검색, 관리, 수정, 그리고 데이터베이스 객체 접근 관리를 위해 고안된 언어이다.
    • 데이터베이스로부터 정보를 추출하거나 갱신하기 위한 표준 대화식 프로그래밍 언어이다.
    • 다수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택했다.
  2. 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 	|	컴퓨터정보

SQL STUDENT 테이블

 

 

컬럼의 이름이 일치하지 않는다면 오류가 난다.

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

 

 

728x90
반응형

+ Recent posts