JDBC란?

자바에서는 데이터베이스 연동하는 기술을 가리켜 JDBC(Java DataBase Connectiviy)라고 하며,

Java.sql 패키지에서 API가 지원된다!

연동 절차

1) DB기종에 알맞는 드라이버를 로드 (oracle용, mysql용, mssql용.. 각각 jar가 필요)
2) 접속
3) 원하는 쿼리 수행
4) 접속해제 (특히, 스트림 및 DB는 사용 후 반드시 해제하자!!!)

1) DB기종에 알맞는 드라이버를 로드 (oracle용, mysql용, mssql용.. 각각 jar가 필요)

- 오라클일 경우

오라클을 설치한 폴더로 찾아가 .jar파일을 가져온다

ex) oracle\product\11.2.0\server\jdbc\lib

 

자신의 java 버전에 따라 가져와서 사용한다! (나는 6을 사용했다)

jar파일을 사용하고 있는 프로젝트의 추가를 해준다!

 

- MySQL(MariaDB)일 경우

MavenRepository에 들어가서 jdbc를 검색하여 .jar파일로 다운받는다!

그 다음은 , 오라클과 다를게 없다~

 

이제 코드로 가서, Class.forName() 메소드를 이용하여 드라이버를 로드한다!

Class.forName("oracle.jdbc.driver.OracleDriver");//오라클의 경우
Class.forName("com.mysql.cj.jdbc.Driver");//MySQL의 경우

2) 접속

DriverManger(DBMS에 접속하여 Connection 인스턴스받아주는 클래스)를 이용하여 Conncection(접속된 데이터베이스의 정보를 가지고 있는 인터페이스) 인터페이스의 인스턴스를 반환받자!

Connection con=null;	
 			//jdbc:DBMS기종:방식:ip주소:포트번호:기기의 DBMS설치명
String url="jdbc:oracle:thin:@localhost:1521:XE"; //Oracle 경우
			//jdbc:DBMS기종:ip주소:(포트번호):database명
String url = "jdbc:mysql://localhost:/exdatabase"; //MySQL 경우
String user="";
String password="";
con=DriverManager.getConnection(url, user, password); //접속시도!!

3) 원하는 쿼리 실행

- SELECT의 경우

PreparedStatement pstmt; // 쿼리문 수행 객체, 인터페이스이므로 new로 생성하는 것이 아니라
// 접속객체인 Connection 객체로부터 인스턴스를 얻올 수 있다.
ResultSet rs;// select 쿼리문 수행결과에 의해 표가 반환되는데, 이떄 이 표를 담는 객체
String sql = "select * from emp";

pstmt = con.prepareStatement(sql); // Connection객체로부터 PerparedStatement인스턴스얻기
rs = pstmt.executeQuery();// select문의 경우엔 executeQuery() 이용해야한다..
//rs에는 표가 들어있다!! 따라서 원하는 레코드로 커서를 옮기자!!
            
while(rs.next()) { //데이터가 존재하면, 한칸 전진 후 true까지 반환
	rs.getString("컬럼명"); //테이블의 컬럼명을 통해 가져올 수 있다
    rs.getInt("컬럼명2") //반환받는 데이터의 자료형에 따라 메서드가 다르다!
}

- INSERT, UPDATE, DELETE의 경우

  • INSERT의 경우의 성공 시 1, 실패 시 0 
  • UPDATE, DELETE의 경우엔 성공 시 UPDATE, DELETE된 행들의 수만큼, 실패 시 0
PreparedStatement pstmt; // 쿼리문 수행 객체, 인터페이스이므로 new로 생성하는 것이 아니라
// 접속객체인 Connection 객체로부터 인스턴스를 얻올 수 있다.
ResultSet rs;// select 쿼리문 수행결과에 의해 표가 반환되는데, 이떄 이 표를 담는 객체
String sql = "select * from emp";

pstmt = con.prepareStatement(sql); // Connection객체로부터 PerparedStatement인스턴스얻기
int result = pstmt.executeUpdate();//DML(insert, update, delete) 쿼리 실행 시 이 메서드(executeUpdate())를 사용함
if(result!=1){
System.out.println("insert 실패");
}else{
System.out.println("insert 성공");
}

4) 접속해제 (특히, 스트림 및 DB는 사용 후 반드시 해제하자!!!) 

if(rs!=null) {
  try {
    	rs.close();
    	System.out.println("rs 연결해제");
  	} catch (SQLException e1) {
    	e1.printStackTrace();
  	}
  }
if(pstmt!=null) {
  try {
    	pstmt.close();
    	System.out.println("pstmt 연결해제");
    } catch (SQLException e1) {
    	e1.printStackTrace();
    }
  }
if(con!=null) {
	try {
  	con.close();
  	System.out.println("con 연결해제");
  } catch (SQLException e1) {
 	 e1.printStackTrace();
  }
}

원하는 쿼리 실행한 뒤에, 반드시 !!!! 접속을 해제시켜줘야한다!! 

Database Server는 동시에 연결가능한 횟수에 제한을 두고 있기 때문에 사용하지 않을 때는 닫아야 한다!!

'프로그래밍 > Java' 카테고리의 다른 글

java - mail 보내기  (0) 2021.01.06
싱글톤 패턴 알아보기  (0) 2020.12.14
JavaFX - 개발환경 구축 및 생명주기  (0) 2020.11.23
Java - JSON & XML 파싱  (0) 2020.11.17
Java - 소켓프로그래밍 기초 Echo System  (0) 2020.11.09

예를 들기 위해 만든 Excel에 있는 데이터

1) Excel데이터를 .csv의 확장명으로 파일을 만든다.

SQLLDR에 명령시킬 ctl 파일

2) SQLLDR 에게 시킬 명령을 나열한 파일을 .ctl확장 파일로 만든다.

load data 

infile 'animal.csv' => DB에 넣을 데이터

insert into table animal(테이블명) ※ 해당 파일을 넣을 테이블(animal)이 있어야하며, 테이블은 빈 테이블이여한다.

fields terminated by ',' => 각 필드에 구분자

(code, category, name, location) => 테이블의 컬럼명's

 

두 파일을 같은 폴더에 위치시킨다.

csv와 ctl파일이 있는 디렉터리로 이동한 뒤,

SQLLDR 유저id/pw control='만든.ctl파일명' data='넣을 데이터 csv파일명'

※ 해당 파일을 넣을 테이블이 있어야하며, 테이블은 빈 테이블이여한다.

 

성공 화면
실제 animal테이블을 조회

 

'프로그래밍 > oracle' 카테고리의 다른 글

oracle 11g express edition 다운로드  (0) 2020.08.26

+ Recent posts