import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// DB연결을 클래스화
public class DBcon {
public static Connection dbConn;
public static Connection getConnection() {
Connection con = null;
try {
String user = "유저이름";
String pw = "비밀번호";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
// jdbc:oracle:thin
// 오라클에 접속하겠다고 알려줌
// 내 ip 주소
// @localhost
// 포트 번호 -> 1521
// 접속할 DB 이름 xe
Class.forName("oracle.jdbc.driver.OracleDriver"); // JDBC 드라이버(ojdbc6~8.jar)를 로딩하는 부분이다.
con = DriverManager.getConnection(url, user, pw); // 데이터베이스 연결
if (con != null) {
System.out.println("연결성공");
}
} catch (ClassNotFoundException e) {
// 로딩 실패 classNotFoundException
System.out.println("데이터베이스 연결 에러!" + e.toString());
} catch (SQLException e) {
System.out.println("DB접속 실패 :" + e.toString());
}
return con;
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PreparedStatementTest {
public static void main(String[] args) {
Connection con = null; // DB연결된 상태(세션)을 담는 객체
PreparedStatement pstm = null; // sql문을 나타내는 객체
ResultSet rs = null; // 쿼리문을 날린 것에 대한 반환값을 담는 객체
// 쿼리문을 전송할 수 있는 인터페이스 2가지
// 공통점
// 둘다 쿼리를 전송기능을 가지고 있다.
// try ~ catch문으로 throw를 처리해야된다. 예외처리!
// String객체를 전달한다.
// Statement 정적인 쿼리문을 처리할 수 있다.
// 쿼리문에 값이 미리 입력 되어있어야한다.
// Statement 컴파일이 될 때마다 서버에가서 컴파일을 계속해서
// 정보를 가지고 온다.
try {
// sql 문장을 만들고 만약 문장이 질의어(select문)라면
// 그 결과를 담는 resultset객체를 준비한 후 실행한다.
// SQL 쿼리 실행
String quary = "SELECT * FROM CAFE";
con = DBcon.getConnection();
pstm = con.prepareStatement(quary);
rs = pstm.executeQuery();
// 결과 처리
while (rs.next()) {
// 결과 값 추출
String CAFEID = rs.getString("CAFEID");
String CAFENAME = rs.getString("CAFENAME");
String CORPORATION = rs.getString("CORPORATION");
int PRICE = Integer.parseInt(rs.getString("PRICE"));
// 필요한 작업 수행
System.out.print(CAFEID);
System.out.print(CAFENAME);
System.out.print(PRICE);
System.out.print(CORPORATION);
System.out.println();
}
} catch (SQLException e) {
System.out.println("select 문에서 예외가 발생할 수 있다.");
} finally {
// 연결 및 자원 해제
try {
if (rs != null) {
rs.close();
}
if (pstm != null) {
pstm.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class BEVERAGES1 {
public static void main(String[] args) {
Connection con = null; // DB연결된 상태(세션)을 담는 객체
PreparedStatement pstm = null; // sql문을 나타내는 객체
ResultSet rs = null; // 쿼리문을 날린 것에 대한 반환값을 담는 객체
try {
// sql 문장을 만들고 만약 문장이 질의어(select문)라면
// 그 결과를 담는 resultset객체를 준비한 후 실행한다.
con = DBcon.getConnection();
// SQL 쿼리 실행
// BEVERAGES테이블
String quary = "SELECT * FROM BEVERAGES";
pstm = con.prepareStatement(quary);
rs = pstm.executeQuery();
// 결과 처리
System.out.println("BEVERAGES 테이블");
while (rs.next()) {
// 결과 값 추출
String NAME = rs.getString("NAME");
int PRICE = Integer.parseInt(rs.getString("PRICE"));
String BTYPE = rs.getString("BTYPE");
// 필요한 작업 수행
System.out.print(NAME);
System.out.print(PRICE);
System.out.print(BTYPE);
System.out.println();
}
// ORDER_DETAILS테이블
String quary2 = "SELECT * FROM ORDER_DETAILS";
pstm = con.prepareStatement(quary2);
rs = pstm.executeQuery();
System.out.println("ORDER_DETAILS 테이블");
while (rs.next()) {
// 결과 값 추출
int ORDER_ID = Integer.parseInt(rs.getString("ORDER_ID"));
int BEVERAGE_ID = Integer.parseInt(rs.getString("BEVERAGE_ID"));
int COUNT = Integer.parseInt(rs.getString("COUNT"));
// 필요한 작업 수행
System.out.print(ORDER_ID + ",");
System.out.print(BEVERAGE_ID + ",");
System.out.print(COUNT );
System.out.println();
}
} catch (SQLException e) {
System.out.println("select 문에서 예외가 발생할 수 있다.");
} finally {
// 연결 및 자원 해제
try {
if (rs != null) {
rs.close();
}
if (pstm != null) {
pstm.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
}
Statement 활용
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementTest {
public static void main(String[] args) {
Connection con = null; // DB연결된 상태(세션)을 담는 객체
Statement stm = null; // sql문을 나타내는 객체
try {
con = DBcon.getConnection();
stm = con.createStatement();
String quary = "INSERT INTO TEST VALUES('ID1','PW1','NAME1')";
int success = stm.executeUpdate(quary);
if (success > 0) {
System.out.println("데이터 입력 성공");
} else {
System.out.println("데이터 입력 실패");
}
} catch (SQLException sql) {
System.out.println(sql.toString());
}
}
}
PreparedStatement 활용
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PreparedStatementInsert {
public static void main(String[] args) {
Connection conn = null; // DB연결된 상태(세션)을 담은 객체
PreparedStatement pstm = null; // SQL 문을 나타내는 객체
try {
String quary = "INSERT INTO TEST VALUES(?, ?, ?)";
conn = DBcon.getConnection();
pstm = conn.prepareStatement(quary);
// 쿼리에 값을 세팅한다.
// 여기서 1, 2, 3은 첫번째, 두번째, 세번째 위치홀더 라는 뜻
pstm.setString(1, "id2");
pstm.setString(2, "pw2");
pstm.setString(3, "name2");
int success = pstm.executeUpdate();
if (success > 0)
System.out.println("데이터 입력 성공");
else
System.out.println("데이터 입력 실패");
} catch (SQLException sql) {
System.out.println(sql.toString());
}
}
}
Statement 활용했을 때와 PreparedStatement 활용했을 때 모두 값이 정상적으로 입력된 것을 확인할 수 있다.