1 자바 프로젝트 파일을 생성한다.
2 생성 후 properties 클릭하기 > java build path 탭 누르기
3 add external jar를 누른 후 해당 jdbc 파일 넣기
Class.forName("Oracle.jdbc.driver.OracleDriver");
- Oracle JDBC 드라이버를 로딩.
- JDBC 드라이버를 로딩하지 않으면 데이터베이스 접속불가
DriverManager.getConnection(url,user,pw);
- 오라클 DB 연결
- url은 데이터베이스의 서버 주소와 포트, SID/Service Name을 포함한 URL
- user, pw는 데이터베이스에 접속할 사용자 이름과 비밀번호
String sql = "select * from human;"
- human 테이블에서 모든 데이터를 조회하는 SELECT 쿼리
conn.createStatement();
- SQL문을 데이터베이스로 전송하는 Statement 객체를 생성.
st.executeQuery(sql);
- SQL문을 데이터베이스로 전송하고 결과를 ResultSet 객체로 받아옴.
while(rs.next()) {}
- ResultSet 객체에 조회 결과가 있는 동안 반복.
- ResultSet의 next() 메소드를 호출하면 조회 결과를 한 행씩 읽어옴.
rs.getString("name");
rs.getInt("age");
rs.getDouble("height");
- 각 컬럼의 값을 가져오는 메소드.
- 인덱스나 컬럼명을 이용해서 가져올 수 있다.
rs.close();
st.close();
conn.close();
- ResultSet, Statement,Connection 등 데이터베이스와 관련된 자원을 반납.
- 이를 하지 않으면 데이터베이스에 대한 연결이 종료되지 않고 남아있음.
create table human(
name nvarchar2(30), age number(3), height number(4,1), birthday date
);
insert into human(name,age,height,birthday)
values('김수호',20,160.4,to_date('2005:05:05 02:25:50','YYYY:MM:DD
HH24:MI:SS'));
insert into human(name,age,height,birthday)
values('나수호',24,170.8,to_date('2000:10:15 12:25:10','YYYY:MM:DD
HH24:MI:SS'));
insert into human(name,age,height,birthday)
values('박수호',27,188.6,to_date('1995:12:04 13:45:14','YYYY:MM:DD
HH24:MI:SS'));
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.time.LocalDateTime;
public class JdbcTest {
public static void main(String[] args) {
try {
// 1. 드라이버 로딩
// Class.forName == new 클래스 문자열로 클래스 생성하는 메소드
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 연결");
// 2. 데이터베이스 연결 connection 클래스
// jdbc = oracle:thin::(제품명)@Localhost(주소):1521(포트):xe(씨드아이디)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "c##human";
String pw = "human";
Connection conn = DriverManager.getConnection(url, user, pw);
System.out.println("데이터베이스에 접속 성공");
// 3. 데이터베이스 sql문 전송을 위한 쿼리 생성과 담당 객체 생성(statement)
String sql = "select * from human";
System.out.println("sql 에러시 여기서 문자열을 확인:" + sql);
Statement st = conn.createStatement();
// 4. 데이터베이스 sql문을 전송
ResultSet rs = st.executeQuery(sql);
// 5. resultSet 출력하기
// while(rs.next()): ResultSet 객체에 조회 결과가 있는 동안 반복. 호출 시 조회 결과를 한 행씩 읽음.
// rs.getString, rs.getInt 등 각 컬럼의 값을 가져오는 메소드임. 인덱스나 컬럼명 이용하여 값을 가져올 수 있음.
while(rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
double height = rs.getDouble("height");
LocalDateTime birthday = rs.getTimestamp("birthday").toLocalDateTime();
System.out.println("name: " + name);
System.out.println("age: " + age);
System.out.println("height: " + height);
System.out.println("birth: " + birthday);
System.out.println("----------------------------------------");
}
// 6. 데이터베이스와 연결된 자원을 반납
if(rs != null) rs.close();
if(st != null) st.close();
if(conn != null) conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JdbcInsert {
public static void main(String[] args) {
try {
// 1. 드라이버 로딩
// Class.forName == new 클래스 문자열로 클래스 생성하는 메소드
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 연결");
// 2. 데이터베이스 연결 connection 클래스
// jdbc = oracle:thin::(제품명)@Localhost(주소):1521(포트):xe(씨드아이디)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "c##human";
String pw = "human";
Connection conn = DriverManager.getConnection(url, user, pw);
// SQL문 실행을 위한 Statement 객체 생성
Statement st = conn.createStatement();
// Insert할 데이터 설정
String name = "홍길도";
int age = 15;
double height = 166;
LocalDateTime birthday = LocalDateTime.now();
// SQL문 작성: 값 대신 변수를 사용하여 SQL문을 유연하게 작성
String sql = String.format("insert into human values('%s',%d,%f"
+ ",to_date('%s', 'YYYY-MM-dd HH24:MI:SS'))", name, age, height,
birthday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("sql 에러시 여기서 문자열을 확인" + sql);
// SQL문 실행 결과 및 처리
// execute 메소드는 변경된 데이터 개수를 리턴
int cnt = st.executeUpdate(sql);
System.out.println(cnt + "개 데이터가 입력되었습니다.");
// 자원 해제
if(st != null) st.close();
if(conn != null) conn.close();
} catch (ClassNotFoundException e) {
// JDBC 드라이버 로드 실패시 예외 처리
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcDelete {
public static void main(String[] args) {
try {
// 1. 드라이버 로딩
// Class.forName == new 클래스 문자열로 클래스 생성하는 메소드
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 연결");
// 2. 데이터베이스 연결 connection 클래스
// jdbc = oracle:thin::(제품명)@Localhost(주소):1521(포트):xe(씨드아이디)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "c##human";
String pw = "human";
Connection conn = DriverManager.getConnection(url, user, pw);
Statement st= conn.createStatement();
String name = "홍길도";
String sql = String.format("delete human where name = '%s'", name);
// executeDelete: 삭제된 데이터 개수가 리턴.
System.out.println("sql 에러시 여기서 문자열 확인:" + sql);
int cnt = st.executeDelete(sql);
System.out.println(cnt +"개 데이터가 삭제되었습니다");
if(st != null) st.close();
if(conn != null) conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUpdate {
public static void main(String[] args) {
try {
// 1. 드라이버 로딩
// Class.forName == new 클래스 문자열로 클래스 생성하는 메소드
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 연결");
// 2. 데이터베이스 연결 connection 클래스
// jdbc = oracle:thin::(제품명)@Localhost(주소):1521(포트):xe(씨드아이디)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "c##human";
String pw = "human";
Connection conn = DriverManager.getConnection(url, user, pw);
Statement st= conn.createStatement();
String name = "홍길도";
int age = 39;
String sql = String.format("update human set age =%d where name = '%s'", age,name);
System.out.println("sql 에러시 여기서 문자열을 확인:" + sql);
// executeUpdate는 변경된 데이터 개수가 리턴
int cnt = st.executeUpdate(sql);
System.out.println(cnt + "개 데이터가 변경되었습니다.");
if(st != null) st.close();
if(conn != null) conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}