[JDBC] 초기 설정, Eclipse랑 오라클DB 연동하기
by 무작정 개발★2022.02.04(30일 차)
오늘 오전에는 PL/SQL을 마무리하고 오후에는 JDBC 수업을 시작했다!
오늘의 수업 내용
JAVA랑 ORACLE_DB 연동 전 초기 작업
연동하기 전 사전 작업
1. 관리자 계정으로 로그인 -> 사용자 생성 및 권한 부여 -> 생성된 계정으로 로그인 -> 테이블 생성
2. 오라클 파일에서 쭉 들어가면 ojdbc6이 있다. 이 파일을 java jdk, jre에 넣어줘야 함.
3. 경로에 ojdbc6 파일 넣기
경로 1 : C:\Program Files\Java\jdk1.8.0_311\jre\lib\ext
경로 2 : C:\Program Files\Java\jre1.8.0_311\lib\ext
OJDBC6 파일을 열면 하단과 같이 보인다. 오픈 API가 아니기 때문에 소스가 보이지 않고 CLASS가 존재하는 것을 알 수 있다.
OracleDriver.class의 위치 : oracle.jdbc.driver.OracleDriver 클래스
4. 파일을 넣고 이클립스에 조회해보면 라이브러리에 반영된다.
이렇게 하면 초기 작업이 끝난다.
JAVA 랑 ORACLE 연동하기
- Java에서 오라클을 찾아가는 코딩은 변함이 없다.
- 매번 동일한 기능을 수행해야 할 땐 메서드를 생성 후, 필요할 때마다 메서드를 호출했지만 메서드로 생성하게 된다면 다른 클래스에서 사용하기 위해서는 객체 생성이 필요하다.
- 위의 문제 때문에 DB랑 연결하려면 static으로 만들어서 쓴다. 메모리에 올려놓으면 필요할 때마다 가져다 쓴다. (객체 생성 안 하고)
- DB를 연결하게 되면 항상 닫아주는 작업을 넣어줘야 한다. -> close)()
DB 연결하는 코드
package com.db;
//DB를 연결하기위한 클래스
import java.sql.Connection;
import java.sql.DriverManager;
//DB는 여러 개 연결 가능함.
public class DBConn {
//이렇게하면 Connection형 dbConn을 반환해준다.
//dbConn에 파이프라인을 넣을건데 그 파이프라인이 Connection이다.
private static Connection dbConn; // DB연결자를 담을 수 있는 변수
//메서드
//static을 써서 이미 메모리상에 있어 받기만하면되니 get을 써줘야함
public static Connection getConnection() {
//연결할때 try-catch는 반드시 써야함. / NULL일 경우 연결되지않은 상태
if(dbConn == null) {
try {
//type4를 thin으로 표시함 / @뒤에는 자신의ip주소 /오라클 기본포트:1521/내가쓰는오라클버전은 xe
String url = "jdbc:oracle:thin:@localhost:1521:xe";
//JDBC방식으로 TYPE4형식, 해당 주소를 가진 1521포트의 TestDB로 연결
//노트북으로 진행할 때는 서버가 아니므로 IP주소가 아닌 LOCALHOST를 쓴다.
//동적으로 클래스를 로딩한다. 좀 더 빠른 접근 가능
String user = "suzi";
String pwd = "a123"; // 여기까지가 접속 정보
//다른 클래스의 정보를 읽어올 때 사용
// oracle.jdbc.driver위치의 OracleDriver클래스를 읽어옴
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager를 통해 내가 지정한 url,user,password로
//스트림을 생성해서 dbConn에 담는 것
dbConn = DriverManager.getConnection(url, user, pwd); //읽어와서 dbConn에 넣는다.
} catch (Exception e) {
System.out.println(e.toString());
}
}
return dbConn; //처음부터 여기까지가 DB연결자
}
//DB를 사용하면 끝내는 애가 있어야한다.
public static void close() {
if(dbConn != null) { // null이 아니면 연결되어 있는 상태
try {
if(!dbConn.isClosed()) { //만약에 dbConn이 닫혀있지 않으면
dbConn.close(); // 닫아줘라
}
} catch (Exception e) {
System.out.println(e.toString());
}
} //닫으면 찌꺼기가 반드시 남기 때문에 dbConn=null;을 한다 안하면 아답터 오류가 뜬다.
dbConn=null; //이걸 안하면 두번째 연결부터 오류가 뜬다.
//파이프라인이 연결되어 있는 상태에서 연결을 끊게 되면 스트림 안에 쓰레기값이 남게된다.
//두번 째 연결 시 쓰레기값으로 인해 adapter 오류 발생
//그래서 연결 종료 시 항상 초기화를 진행해야 한다.
}
}
DBMS 접속 시 사용되는 방식 : THIN, OCI
1. THIN : 바로 DB와 연결 진행/범용성이 높다/상대적으로 OCI보다 속도가 느리다.
2. OCI(Oracle Call Interface) : 특정 운영체제 내에서만 돌아가는 Native Module을 통해
DB에 연결 하드웨어 또는 소프트웨어 전용의 Module이다 보니, THIN보다 속도가 빠르다.
DB 연결 코드
package com.conn;
import java.sql.Connection;
import com.db.DBConn;
public class Test1 {
public static void main(String[] args) {
//conn에는 DBConn.getConnection();의 해쉬코드가 들어가있음
//DB를 찾아가서 연결해놓은 파이프라인을 conn에 할당
Connection conn = DBConn.getConnection();
if(conn==null) {
System.out.println("데이터베이스 연결 실패!!");
System.exit(0);
}
System.out.println("데이터베이스 연결 성공!!");
DBConn.close(); //DB연결 확인했으니 close로 닫는다.
}
}
위의 결과가 나오면 성공적으로 DB 연결이 된 것이다!
DB 연결 후 DML(INSERT, UPDATE, DELETE, SELECT) 실행
package com.conn;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.db.DBConn;
//Statement 종류
//Statement, PreparedStatement, CallableStatement (Prepared를 자주씀)
public class Test2 {
public static void main(String[] args) {
Connection conn = DBConn.getConnection();
//DB연결방법
//1. DriverManager가 Connection을 생성
//2. Connection이 Statement를 생성 (sql구문을 실행하는 인터페이스) - statement는 종류가 3가지
//3. Statement가 쿼리(query)를 실행(execute)
if(conn==null) { //만약에 연결이 안된 경우
System.out.println("데이터베이스 연결 실패!!");
System.exit(0);
}
try {
//java.sql
Statement stmt = conn.createStatement(); //Connection이 Statement를 생성한다.
String sql;
/*
//insert
sql = "insert into score (hak,name,kor,eng,mat) "; //줄바꿈할땐 한칸 띄어야함
//sql+= "values ('111','배수지',50,70,40)";
sql+= "values ('222','유인나',40,80,70)";
int result = stmt.executeUpdate(sql);
if(result==1) { //1이면 잘 실행된 것 0이오면 실행이 안된것
System.out.println("추가 성공!!");
}
*/
/*
//update
sql = "update score set name='한지민', kor=100, eng=100, mat=100 ";
sql+= "where hak='111'";
int result = stmt.executeUpdate(sql);
if(result==1) { //1이면 잘 실행된 것 0이오면 실행이 안된것
System.out.println("수정 성공!!");
}
*/
/*
//delete
sql = "delete score where hak=222"; //학번이 222인 데이터를 지운다
int result = stmt.executeUpdate(sql);
if(result==1) { //1이면 잘 실행된 것 0이오면 실행이 안된것
System.out.println("삭제 성공!!");
}
*/
//select
ResultSet rs = null;
sql = "select hak,name,kor,eng,mat from score";
rs = stmt.executeQuery(sql); // rs를 보고 쿼리를 인식해줌
String hak,name; // 담을 그릇
int kor,eng,mat; // 담을 그릇
//데이터는 3개지만 실제로는 데이터의 개수를 모르기때문에 while문을 써야한다.
while(rs.next()) { // 데이터가 있을 때까지 반복해라
hak = rs.getString("hak"); //rs에 있는 데이터 / 괄호 안에는 컬럼명/hak은 string이니 getString
name = rs.getString(2); //컬럼명 대신 숫자를 씀/ 컬럼명:name
kor = rs.getInt("kor");
eng = rs.getInt(4); // 컬럼명 : eng
mat = rs.getInt("mat");
//가지고 왔으면 출력해
System.out.printf("%5s %6s %4d %4d %4d\n", hak,name,kor,eng,mat);
}
rs.close(); //다 사용한 리소스는 꼭 닫아줘야함
stmt.close(); //다 사용한 리소스는 꼭 닫아줘야함 / 닫는 순서는 상관 x
} catch (Exception e) {
System.out.println(e.toString());
}
DBConn.close(); //db는 사용다하면 항상 닫아줘야한다.
}
}
insert 결과
- insert 하기 전에 데이터 추가
update 결과
delete 결과
select 결과
'Back-End > JSP & Struts & JDBC' 카테고리의 다른 글
[JSP & Servlet] JSP기초, get 방식, post 방식 (0) | 2022.02.10 |
---|---|
[JSP & Servlet] 자바스크립트(JavaScript)기초 (0) | 2022.02.09 |
[JSP & Servlet] HTML기초 (0) | 2022.02.08 |
[JSP & Servlet] 톰캣(Apache Tomcat) 설치 & JSP 초기 세팅 (0) | 2022.02.07 |
[JDBC] PreparedStatement문, CallableStatement, 성적 입력 프로그램 만들기 (0) | 2022.02.07 |
블로그의 정보
무작정 개발
무작정 개발