JDBC(JAVA Database Connectivity)
: 자바에서 DB에 접속하기 위해 사용되는 API
JBBC DrIVER: DBMS 제소사들이 자신들의 DB에 맞게 interface의 메소드들을 구현하여 제공
!!JDBC 연결 순서!!
1. JDBC Driver 로딩
- ojdbc6.jar 추가
- Class.forName()메소드 사용해 동적 생성
2. Database연결
-Connection 생성
3. SQL문장 실행
- PreparedStatement 생성
4. 연결 종료
- 역순으로 닫아 준다.
0. 선행작업
프로젝트 파일 왼쪽 마우스 클릭 -> buid path -> Configure Buid Path ->
Java Build Path 창 안에서 위쪽에 위치한 Libraries-> classpath ->add external JARs... ->
JAR Selection 안에서 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib 이 경로 타고 들어가서 마지막에 열기 버튼 누르기
-> Apply and close로 연결하기
1.JDBC 드라이버 연결
Referenced Libraried -> ojdbc6.jar -> oracle.jdbc.driver
//1. JDBC 드라이버 연결
//Class.forName(): 드라이버 연결에 필요한 클래스 찾아오기!
Class.forName("oracle.jdbc.driver.OracleDriver"); 오류나면 -> Surround with try/catch
-테이블 만들기
SQL*Plus: Release 11.2.0.2.0 Production on 월 8월 29 10:26:55 2022
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> conn hr/hr;
Connected.
SQL> select * from student;
select * from student
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> create table student(
2 name varchar2(30),
3 age number(20),
4 gender varchar2(30)
5 );
Table created.
SQL> inert into student values('채수민', 27, '여성');
Wrote file afiedt.buf
1 create table student(
2 name varchar2(30),
3 age number(20),
4 gender varchar2(30)
5* )
SQL>
SQL> insert into student values('채수민', 27, '여성');
1 row created.
SQL> select*from student;
NAME AGE
------------------------------------------------------------ ----------
GENDER
------------------------------------------------------------
채수민 27
여성
SQL> commit;
Commit complete.
SQL>
package Ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Ex_Select {
public static void main(String[] args) {
//JDBC 연결순서
//0. (선행작업) 프로젝트에 ojdbc6.jar 파일 연결
//1. JDBC 드라이버 연결
//2. 데이터베이스 연결
//3. SQL문 작성 및 전송
//4. 객체 연결 종료
//객체 생성 및 선언
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
//try: 예외 처리를 진행 할 수 있는 구문!
//catch : try 실행시 발생하는 오류를 catch문을 통해 해결할 수 있다
try {
//1. JDBC 드라이버 연결
//Class.forName(): 드라이버 연결에 필요한 클래스 찾아오기!
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. 데이터베이스 연결 -> Connection 객체 필요!
// 데이터 베이스에 연결하기 위한 필요 정보! (DB주소, 아이디, 비밀번호)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_id ="hr";
String db_pw = "hr";
conn = DriverManager.getConnection(url, db_id, db_pw);
//접속이 잘 됐는지 판단하기
if(conn !=null) {
System.out.println("접속 성공!");
}else {
System.out.println("접속 실패");
}
//3. SQL 작성 및 전송 -> PreparedStatement
String sql = "select * from student";
psmt = conn.prepareStatement(sql);
//sql 문장 전송 작업필요!
// ResultSet -> select sql문 실행시 돌아오면 테이블 형태를
// 담을 수 있는 객체!
rs = psmt.executeQuery();
while(rs.next()) {
//String name = rs.getString("name");
String name = rs.getString(1); //->숫자는 컬럼 번호를 뜻한다
int age = rs.getInt(2);
String gender = rs.getString(3);
//하나의 행에 대하여 다 가져온 후 한번에 출력하기
System.out.println(name + " / "+ age + " / "+ gender);
}
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 오류");
} catch (SQLException e) {
System.out.println("데이터베이스 연결 오류");
}
//4. 객체 연결 종료
finally {//마지막에 무조건 수행할 수 있는 키워드
//객체 닫는 순서? 역순으로...
// Connection(conn) <- PreparedStatement(psmt) <- ResultSet(rs)
try {
if(rs != null) {
//객체사용 여부 확인
rs.close();
}if(psmt !=null) {
psmt.close();
}if(conn !=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
java db랑 왔다갔다 할수 있는건 conn이다.
psmt라는 가방에 sql문장을 잃어버리지 않게 가방에 넣어서 넘어간다
<내 컴퓨터 주소 알아내는방법>
C:\Users\smhrd>ipconfig
Windows IP 구성
이더넷 어댑터 이더넷:
연결별 DNS 접미사. . . . :
링크-로컬 IPv6 주소 . . . . : fe80::19e6:37e4:ecd4:57a%11
IPv4 주소 . . . . . . . . . : 172.30.1.23
서브넷 마스크 . . . . . . . : 255.255.255.0
기본 게이트웨이 . . . . . . : 172.30.1.254
C:\Users\smhrd>
<Ex_Insert>
package Ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Ex_Insert {
public static void main(String[] args) {
// 객체 생성
Connection conn = null;
PreparedStatement psmt = null;
Scanner sc = new Scanner(System.in);
try {
// 1. jdbc 동적 로딩!
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.데이터베이스 연결!
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_id = "hr";
String db_pw = "hr";
conn = DriverManager.getConnection(url, db_id, db_pw);
if (conn != null) {
System.out.println("접속 성공!");
} else {
System.out.println("접속 실패");
}
// 3. sql 전송
// '강예진', 20, '여성' -> insert 문장 구현!
System.out.print("이름 : ");
String name = sc.next();
System.out.print("나이 : ");
int age = sc.nextInt();
System.out.print("성별 : ");
String gender = sc.next();
String sql = "insert into student values(?, ?, ?)";
psmt = conn.prepareStatement(sql);
//?값에 실제 값들이 연결될 수 있도록 만들어 주기
//set(위치, 데이터 값) -> 위치는 1부터 시작한다!
psmt.setString(1, name);
psmt.setInt(2, age);
psmt.setString(3, gender);
// prepareStatement의 사용함수!
// - Query() : 테이블의 전후가 바뀌는 작업 수행시 '조회'
// - Update() : 테이블의 전후가 수정되는 작업 수행시 '삽입' , '수정', '삭제'
int result = psmt.executeUpdate();
if (result > 0) {
System.out.println("삽입 성공");
} else {
System.out.println("삽입 실패");
}
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 오류");
} catch (SQLException e) {
System.out.println("데이터베이스 오류");
}
// 4. 객체 연결 종료
finally {// 마지막에 무조건 수행할 수 있는 키워드
// 객체 닫는 순서? 역순으로...
// Connection(conn) <- PreparedStatement(psmt) <- ResultSet(rs)
try {
if (psmt != null) {
psmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
SQL> commit;
Commit complete.
SQL> select*from student;
NAME AGE
------------------------------------------------------------ ----------
GENDER
------------------------------------------------------------
강예진 20
여성
채수민 27
여성
김미희 25
여성
'Full Stack 교육 회고록' 카테고리의 다른 글
8/31 자바 멀티캐스킹, 채팅프로그램 (0) | 2022.08.31 |
---|---|
8/30 [JAVA]- JDBC 응용 (0) | 2022.08.30 |
8/26 [자바]- 피보나치 수열, 버블정렬, 선택정렬, 이진탐색, 인터페이스 (0) | 2022.08.26 |
8/25 [자바 자료구조]- 트리 [자바]- 인터페이스 (0) | 2022.08.25 |
8/24 - 자료구조 (0) | 2022.08.24 |