https://pabeba.tistory.com/132
이전 글을 확인하면 파일을 옮기는 과정이 있습니다.
오라클 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문을 사용하여 멋진 프로그램을 만들면 좋겠습니다.
'코딩 개발 > ORACLE' 카테고리의 다른 글
Oracle - SubQuery (0) | 2023.05.07 |
---|---|
ORACLE - 테이블 명령어(CREATE, DROP, SELECET ~ FROM, WHERE, ORDER BY) (0) | 2023.05.06 |
MACBOOK용 - ORACLE 연결(feat. AWS EC2) (0) | 2023.05.02 |
Java - Eclipse DB 연동 (ORACLE) Window 용 (0) | 2023.05.02 |
Oracle 연결을 위한 AWS EC2 Window 설정 (0) | 2023.05.02 |