코딩 개발/ORACLE

Java - 프로그램 실행을 통한 DB연동

호소세 2023. 4. 30. 23:53
728x90
반응형

https://pabeba.tistory.com/132

 

Java - Eclipse DB 연동 (ORACLE)

Oracle 설치를 완료하였다면, 이클립스에서 DB를 연동하면 됩니다. Eclipse 와 DB연결 Eclipse의 Data Source Explorer 에서 DB에 연결하여 SQL 문장을 이클립스에서 직접 작성해서 사용할 수 있습니다. 먼저 Ora

pabeba.tistory.com

이전 글을 확인하면 파일을 옮기는 과정이 있습니다. 

 

오라클 jdbc 드라이버 java 실행 환경에 설정

C:\oraclexe\app\oracle\product\11\server\jdbc\lib\ojdbc6.jar 파일을

C:\Program Files\Java\jdk1.8.x\jre\lib\ext\ 에 붙여 넣습니다.

 

이렇게 하면 JRE System Library에 oracle.jdbc.OracleDriver가 생성됩니다. 

 

파일의 주소와 oracle 주소를 사용하여 DB에 연결할 예정입니다.

 

DB 연결

public interface DbInfo {
	String DRIVER="oracle.jdbc.OracleDriver";
	String URL="jdbc:oracle:thin:@127.0.0.1:1521:xe";
}

Interface로 DB에 연결할 정보를 상수로 저장해 놓습니다.

Driver를 이용하여 java 와 DB를 연결해줄 것이고  URL을 이용하여 DB의 어떤 사용자와 연결할지 확인합니다.

 

단순한 SELECT 문으로 예시를 보여드리겠습니다.

예시 (SELECT)

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

import common.DbInfo;

public class TestSelect {
	public static void main(String[] args) {
		try {
			//forName() : 해당 클래스 로딩시키는 역할 -> static 적재 -> Driver 정보는 static 으로 구성 
			Class.forName(DbInfo.DRIVER);
			System.out.println("**jdbc oracle driver loading**");
			Connection con=DriverManager.getConnection(DbInfo.URL, "mango", "apple");//url, id, password 작성
			System.out.println("**oracle db와 연결**"+con);
			String sql="select id,name from member";
			PreparedStatement pstmt=con.prepareStatement(sql);
			ResultSet rs=pstmt.executeQuery();
			while(rs.next()) { // 조회한 다음 행row이 존재하면 true , 아니면 false 
				//컬럼명으로 반환 
				//System.out.println("id:"+rs.getString("id")+" name:"+rs.getString("name"));
				//컬럼순서로 반환 
				System.out.println("id:"+rs.getString(1)+" name:"+rs.getString(2));
			}
			rs.close(); pstmt.close(); con.close();			
		} catch (ClassNotFoundException e) {			
			e.printStackTrace();
		} catch (SQLException e) {			
			e.printStackTrace();
		}
	}
}

1. Class.forName('드라이브명'); 명령어를 사용하여 드라이버를 로딩합니다.

2. DriverManager 클래스를 이용하여 getConnection( DB의 url, '아이디', '비밀번호' ); 로 DB와 연결합니다.

3. 연결되면 PreparedStatement 에 sql문을 사전 컴파일 해놓고 사용합니다.

4. 결과 값을 ResulSet에 저장하는 executeQuery(); 명령어 실행

5. while 문을 통해서 Column 순서대로 출력할 수 있습니다.

6. 이후에 결과 값, preparedStatement, connection을 닫아줍니다.

 

이렇게 하여 SELECT 문을 사용할 수 있습니다.

예시2 (INSERT INTO)

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

import common.DbInfo;

/*
 *  회원 정보 insert 
 */
public class TestInsertMember {
	public static void main(String[] args) {
		try {
			//Class.forName() : class loading 하는 메서드 -> static 영역에 meta space에 저장
			//oracle.jdbc.OracleDriver class는 static 으로 구성되어 있으므로 클래스 로딩하면
			//Oracle Driver 정보가 메모리에 적재된다 
			Class.forName(DbInfo.DRIVER);
			Connection con=DriverManager.getConnection(DbInfo.URL, "mango", "apple");
			String sql="INSERT INTO member(id,password,name,address) VALUES(?,?,?,?)";
			PreparedStatement pstmt=con.prepareStatement(sql);
			pstmt.setString(1, "json");//첫번째 물음표에 대한 데이터 등록(binding 바인딩)
			pstmt.setString(2, "a");
			pstmt.setString(3, "황희찬");
			pstmt.setString(4, "울버햄튼");
			int result=pstmt.executeUpdate(); // insert , delete, update 시에 사용하는 sql 
			System.out.println("insert ok result:"+result); // 영향을 준 행row의 수 
			pstmt.close();
			con.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

위의 내용과 유사하지만 insert, delete, update는 executeUpdate() 메소드를 사용합니다.

 

1. 드라이버 로딩

2. connection

3. sql문 사전 컴파일 진행

4. ? 에 들어갈 요소들 setString()으로 할당해줍니다.

5. executeUpdate()로 sql문 실행

6. preparedstatement와 connection 종료

PreparedStatement에 ?를 주는 이유는 sql injection 공격을 막기위해 사용됩니다.

 

이렇게 하면 DB에 데이터를 추가할 수 있습니다.

 

 

소감

이제 드디어 데이터를 저장할 수 있는 날이 왔습니다. 프로그램의 성능이 아무리 좋아도 데이터를 저장할 수 없다면 정말 안타까운 일이 일어나게 될 겁니다. 게임을 하는데 저장을 할 수 없다면 화가 잔뜩 나겠죠. 그런 것처럼 프로그램은 거의 대부분이 데이터를 저장을 하기 때문에 DB연동이 아주 중요하다고 생각합니다. 더 복잡한 sql문을 사용하여 멋진 프로그램을 만들면 좋겠습니다.

 

반응형