본문 바로가기
ORACLE(DB)

JDBC 설치를 통한 이클립스 - DB 연동

by 둥바 2022. 5. 25.

<간단한 복습>

SQL문에는 크게 ANSI SQL(표준SQL)과 Oracle SQL(오라클용 SQL) 존재

 

시스템 계정 상에서 테이블 스페이스(오라클에서의 DB) 생성

create tablespace 테이블스페이스이름(DB명)

datafile '데이터파일경로' size 초기사이즈 

autoextend on

next 자동증가사이즈

maxsize 최대사이즈;

-> size 초기사이즈여도, 점점 데이터가 증가함에 따라 next 자동증가 사이즈만큼 확장되게 처리, maxsize 설정가능하나 보통은 무한으로 (제한 없이) 처리

사용자 계정 만들기 및 사용자에게 권한 부여

creat user 유저명 identified by 비밀번호 default tablespace DB명;

(이 DB를 사용할 수 있는 유저 생성)

grant 권한 to 유저;

Exit 후 Java 계정으로 로그인 -> 테이블 만들기

creat table 테이블명(컬럼명 데이터타입 제약조건,컬럼명 데이터타입 제약조건,);

 

- varchar2 : Oracle에서 주로 사용하는 데이터타입- not null : 널 값을 허용하지 않는 제약조건 (값이 없으면 데이터베이스에 오류 발생)- primary key : 기본키(유일한 키 값) -> 중복되지 않으므로 구분이 가능하여 이를 기준으로 값을 불러오거나 저장 가능-join_date(컬럼명) date(데이터타입) default(디폴트 값으로) sysdate(시스템 날짜값을 세팅)

 

cf) 테이블 조회 : select * from 테이블명;테이블 삭제 : drop table 테이블명;

 

테이블에 데이터 추가

insert into 테이블명 ( 컬럼값,,,) values (값들,,,)

작업을 다 마친 뒤에는 반드시 commit 해야 함. 그러지 않으면 다 날라감.

 


이클립스에 드라이버 설정

1. 이클립스에서 libs 폴더를 프로젝트 안에 만들고, c 드라이브 안의 oracleexe\app\oracle\product\11.2.0\server\jdbc\lib 폴더 안에 ojdbc6.jar파일을 복사하여, 생성한 libs 폴더 안에 붙여넣기한다.

2. 이클립스의 Properties -> Java Build Path -> Libraries -> Add JARs에 들어가서 ojdbc6.jar를 추가하고 apply한다.

이제 jdbc에서 제공해주는 라이브러리 활용 가능

3. src 밑에 jdbc.oracle 패키지를 만든다.

 4.jdb.oracle 패키지 밑에 MemberList라는 클래스(실습파일)를 만든다.

<클래스 로딩 - DB 접속 - SELECT문 처리>

로직 이해하기)
드라이버정보 -> jdbc 내 클래스 사용하기 위해서 드라이버 클래스를 로드해줘야한다.
계정정보(url,id,password) -> 오라클 서버에 접속하는 접속객체를 만드는데 사용
접속 -> SQL문 작성 -> SQL문을 실행시켜줄 수 있는 preparedstatement 객체 생성 -> preparedstatement객체에서 SQL문(쿼리문)을 실행 -> 그 실행 결과값을 ResultSet에 저장 -> 반복문을 통해 저장된 정보들을 꺼내온다. -> 사용한 리소스는 역순으로 종료
package jdbc.oracle;

	import java.sql.Connection;
	import java.sql.DriverManager;
	import java.sql.PreparedStatement;
	import java.sql.ResultSet;

	public class MemberList {
		public static void main(String[] args) {
			String driver = "oracle.jdbc.driver.OracleDriver";
			//드라이버 이름을 String 타입의 driver에 초기화시킴
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			//jdbc:oracle:thin:@127.0.0.1(ip주소):1521(포트넘버):xe(버전)
			//오라클 DB가 세팅되어진 서버가 존재하는데, 그 서버에 접속을 해야하므로
			//그 서버에 접속하기 위한 접속 정보를 url에 초기화한다.
			String id = "java"; //생성했던 user id(오라클 접속 아이디)
			String pwd = "java1234"; //user password
			Connection conn = null; //DB 접속 객체
			PreparedStatement pstmt = null; //SQL문을 실행시키는 객체
			ResultSet rs = null; //질의어(query문)의 결과값을 반환시키는 객체(select문에서만 사용됨)
			try {//입출력,네트워크,DB : 필수 예외처리
				Class.forName(driver); //jdbc 드라이버 로딩(생략가능)
				conn=DriverManager.getConnection(url,id,pwd);
				//접속 -> DriverManager 클래스의 getConnection메소드의 매개변수(url,id,pwd);
				System.out.println("오라클 서버에 접속");
				String sql = "select * from member"; //질의어(쿼리문),select문
				//쿼리 던짐
				pstmt = conn.prepareStatement(sql); //sql문 실행
				rs = pstmt.executeQuery(); //결과값을 리턴받을 수 있도록 실행
				System.out.println("아이디\t이름\t비번");
				//데이터가 여러개
				while(rs.next()) { //다음 레코드가 존재하면 true
					String userid = rs.getString("userid"); //컬럼명
					String name = rs.getString("name");//이름
					String passwd = rs.getString("passwd");
					System.out.println(userid+"\t"+name+"\t"+passwd);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				//리소스 닫을 때 열 때의 역순으로 닫아야 한다.
				try {
					if(rs !=null) {//(1)ResultSet close
						//값이 있으면 
						rs.close();
					}
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				try {
					if(pstmt != null) pstmt.close();//(2)PrepareStatement close
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				try {
					if(conn != null) conn.close();//(3)Connection close
				} catch (Exception e2) {
					e2.printStackTrace();
				}
			}
			
			
			
		}

	}

 

ID나 패스워드, URL과 같이 보안이 중요한 것들은 파일에 넣어서 관리하는 것이 더 안전하다. 따라서 우리는 민감한 정보를 파일로 만들어서 inputStream을 활용하여 불러오고 Property로 잘라서 로딩시켜 변수화해놓고, 이를 통해 접속할 것이다. 그렇게 된다면 해킹을 한다고 해도 파일에는 접근 X -> 보안상 유리

 

5. oralce.prop 파일을 C 드라이브의 driver 폴더 안에 만들고 

그 내용으로는 (접속에 필요한 계정정보)

url=jdbc:oracle:thin:@localhost:1521:xe
driver=oracle.jdbc.driver.OracleDriver
id=java
password=java1234 을 붙여넣기한다.

 

6. DB 파일을 jdbc 패키지 바로 아래에 만들기

하는 것 : 보안 파일을 I/O를 통해 받아와서 변수화한 뒤 DB접속

 

<파일(접속정보)을 통한 DB접속>

로직 이해하기
1. FileinputStream을 통해서 파일을 가져온다.
2. Properties 객체를 통해 K-V값으로 잘라서 로딩시켜서 변수화한 뒤
3. 변수화한 값을 통해서 DB에 접속한다.

 

package jdbc;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class DB {
	
	//Connection 객체를 반환하는 메서드 생성
	public static Connection oraCon() {
		//받아줄 Connection 변수 선언
		Connection c = null;
		//DB작업은 try-catch문에서
		try {
			//1.입출력 통해 파일 가져오기
			FileInputStream fis = new FileInputStream("c:\\driver\\oracle.prop");
			//2.Properties 객체 만들기
			Properties prop = new Properties();
			//Properties란 해시 테이블의 하위로, 파일 입출력을 지원하며, Key-value값으로 저장
			//key,value로 파일의 특정문장을 분리하여 값을 저장
			prop.load(fis);
			//파일을 k,v값으로 (잘라서) 읽는,로드하는 메소드
			String url = prop.getProperty("url");
			String id = prop.getProperty("id");
			String password = prop.getProperty("password");
			//파일에 있었던 내용을 변수로 초기화(k,v로 잘라서)
			//getProperty(키) -> value값을 String타입으로 반환
			
			c = DriverManager.getConnection(url,id,password);
			//접속정보를 가진 객체 반환(DB접속)
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return c; //객체 반환(return)
		
	}

}

 

7. 이제부터 일괄 jdbc - oracle 패키지 아래에서 처리

<Insert문 처리>

로직 이해하기
1. DB접속
2. Scanner를 이용해서 입력할 값들을 변수에 저장
3. SQL문 작성
4. SQL문을 실행시키기 이전에 바인딩 변수에 값을 세팅해준 뒤
5. SQL문 실행
6. 리소스 종료
package jdbc.oracle;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Scanner;

import jdbc.DBex;

public class InsertEx {
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBex.oraCon();
			Scanner sc = new Scanner(System.in);
			System.out.println("아이디:");
			String userid = sc.next();
			System.out.println("비밀번호:");
			String passwd = sc.next();
			System.out.println("이름 :");
			String name = sc.next();
			sc.close(); //여기서 이제 사용 종료
			
			//sql문을 작성
			String sql = "insert into member(userid,passwd,name) values"
					+ "(?,?,?)";
			//들어오는 값에 ?처리가 가능
			
			pstmt = conn.prepareStatement(sql);
			//?에 들어갈 값을 세팅 - 자료형에 맞게(바인딩 변수)
			pstmt.setString(1, userid);
			pstmt.setString(2, passwd);
			pstmt.setString(3, name);
			//세팅한 뒤에 sql문을 실행
			pstmt.executeUpdate(); //insert,update 시에 사용
			System.out.println("저장됨");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally { //역순 종료
			try {
				if(pstmt!=null) pstmt.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			try {
				if(conn!=null) conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

}

 

<DELETE문 처리>

8.클래스 두 개 준비하는데, 하나는 메소드를 담아줄 DAO, 하나는 메인메소드로 실행시켜줄 DeleteEx이다.

로직 이해하기
1) DAO : 회원정보 삭제기능이 구현된 메소드 만들기
1. 기본키를 매개변수로 받아주는(삭제할 때 정확한 데이터를 삭제할 수 있도록) int 타입의 static 메소드 
2. DB접속

3. SQL 작성
4. ?(바인딩 변수)값을 세팅한 뒤
5. SQL 실행 -> int 타입의 변수로 받아준다.
6. 리소스 종료 후 받아 준 int타입의 변수를 반환

2) DeleteEx : 실제 삭제를 진행하는 클래스
1. 스캐너를 통해 삭제할 기본키 값을 입력받는다.
2. 삭제할 기본키 값을 인수로 넣은 MemberDAO 메소드를 호출한다.
3. 호출을 통해 반환받은 값이 0이면 삭제 실패, 0보다 크면 삭제 성공 출력
(이유 : 0행을 삭제하였습니다 -> 삭제 실패한 것이기 때문)
package jdbc.oracle;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class DeleteEx {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("삭제 아이디 입력해주세요.");
		String userid = s.next();
		int rows = DAO.delete(userid); //스태틱메소드...만일 인스턴스라면 객체생성해야함
		if(rows == 0) {
			System.out.println("삭제 실패");
		}else if(rows >0) {
			System.out.println("삭제 성공");
		}
	}

}

class DAO {
	public static int delete(String userid) {
		//1.삭제기능을 구현해주는 메소드
		
		//2.기본 객체 준비
		Connection c = null;
		PreparedStatement ps = null;
		int rows = 0;
		try {
			//3. DB접속
			String id = "java";
			String passwd = "java1234";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			c = DriverManager.getConnection(url,id,passwd);
			System.out.println("접속완료");
			
			//4. SQL 작성
			String sql = "delete from member where userid = ?";
			//5. SQL 준비 및 실행
			ps = c.prepareStatement(sql);
			//6. 세팅해줌
			ps.setString(1, userid);
			//7. SQL 실행
			rows = ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(ps!=null) ps.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}try {
				if(c!=null) c.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return rows;
	}
}

'ORACLE(DB)' 카테고리의 다른 글

데이터 모델링  (0) 2022.05.26
오라클 설치 및 테이블 만들기, SQL DEVELOPER 설치  (0) 2022.05.24
데이터베이스 구현  (0) 2022.05.24