1. preparedStatement
- 사용방법
SQL문장에 변수가 들어가야 할 부분을 ?로 넣고, 실행시 ?에 대응 되는 값을 setXXX메소드를 통해 설정한다.
- 특징
1) statement객체는 실행시 sql명령어를 지정하여 여러 sql구문을 하나의 statement객체로 수행이 가능하다.(재사용 가능)
하지만, preparedStatement는 객체 생성시에 지정된 sql명령어만을 실행할수 있다.
(다른 sql구문은 실행못함 ->재사용 못함)
2) 동일한 sql구문을 반복 실행한다면 preparedStatement가 성능면에서 빠름.
3) preparedStatement가 Statement보다 보안성이 좋다.
2. 테스트
1) 테이블
members
drop table MEMBERS cascade constraints;
CREATE TABLE MEMBERS(
ID VARCHAR2(10) PRIMARY KEY,
PWD VARCHAR2(10),
EMAIL VARCHAR2(15),
PHONE VARCHAR2(20),
REGDATE DATE);
2) 자바소스
EX> 접속 후 preparedStatement로 입력,수정,삭제 등 간단히 테스트 하기.
Test01.java
package test01.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
class MyJdbc01{
public MyJdbc01(){
Connection con=null;
PreparedStatement pstmt=null;
PreparedStatement pstmt1=null;
PreparedStatement pstmt2=null;
int n = 0;
try{
//1.드라이버로딩
Class.forName("oracle.jdbc.OracleDriver");
//2.컨넥션객체 얻어오기
String url="jdbc:oracle:thin:@localhost:1521:XE";
con=DriverManager.getConnection(url,"scott","tiger");
System.out.println("db접속완료");
String sql="insert into members values(?,?,?,?,sysdate)";
//sql구문을 실행시키기 위한 prearestatement 객체 얻어오기
pstmt=con.prepareStatement(sql);
//?에 대응되는 값을 setXXX메소드로 지정하기
pstmt.setString(1, "popo2");//1번째 ?에 yyy넣기
pstmt.setString(2, "0707");//2번째 ? 에 0707넣기
pstmt.setString(3, "yyy@naver");//3번째 ? 에 yyy@naver넣기
pstmt.setString(4, "010-111-1111");//4번째 ? 에 010-111-1111넣기
//sql 구문 실행
n=pstmt.executeUpdate();
System.out.println(n+"개의 데이터 추가");
String sql1 = "DELETE FROM MEMBERS WHERE ID=?";
pstmt1 = con.prepareStatement(sql1);
pstmt1.setString(1, "yyy");
n = pstmt1.executeUpdate();
System.out.println(n+"개의 데이터 삭제");
String sql2 = "UPDATE MEMBERS SET PWD=?,EMAIL=?,PHONE=? WHERE ID=?";
pstmt2 = con.prepareStatement(sql2);
pstmt2.setString(1, "1");
pstmt2.setString(2, "2");
pstmt2.setString(3, "3");
pstmt2.setString(4, "popo2");
n = pstmt2.executeUpdate();
System.out.println(n+"개의 데이터 수정");
}catch(ClassNotFoundException ce){
System.out.println(ce.getMessage());
}catch(SQLException se){
System.out.println(se.getMessage());
}finally{
try{
if(pstmt!=null) pstmt.close();
if(pstmt1!=null) pstmt1.close();
if(con!=null) con.close();
}catch(SQLException se){
System.out.println(se.getMessage());
}
}
}
}
public class Test01 {
public static void main(String[] args) {
new MyJdbc01();
}
}
EX> 전체조회하기, 아이디를 입력받아 입력,삭제,조회하기.
Test02.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Scanner;
class MyJdbc02{
Connection con;
Scanner scan = new Scanner(System.in);
public MyJdbc02(){
try{
Class.forName("oracle.jdbc.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
con = DriverManager.getConnection(url,"scott","tiger");
System.out.println("db접속");
}catch(ClassNotFoundException ce){
System.out.println(ce.getMessage());
}catch(SQLException e){
System.out.println(e.getMessage());
}
}
public void disconnect() throws SQLException{
if(con!=null) con.close();
}
public void showList() throws SQLException{
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM MEMBERS";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()){
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String email = rs.getString("email");
String phone = rs.getString("phone");
Timestamp regdate = rs.getTimestamp("regdate");
System.out.println(id + "\t" + pwd + "\t" + email + "\t" + phone + "\t" + regdate );
}
if(rs!=null) rs.close();
if(pstmt !=null) pstmt.close();
}
// 아이디를 입력받아 해당 정보를 삭제하기.
public void delete() throws SQLException{
PreparedStatement pstmt = null;
System.out.println("아이디를 입력받아 해당 정보를 삭제하는 메소드");
System.out.println("아이디>");
String id = scan.next();
String sql = "DELETE FROM MEMBERS WHERE ID=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
int n = pstmt.executeUpdate();
}
// 아이디, 비밀번호, 이메일, 전화번호를 입력받아 추가하는 메소드 만들기
public void insert() throws SQLException{
PreparedStatement pstmt = null;
System.out.println("아이디, 비밀번호, 이메일, 전화번호를 입력받아 추가하는 메소드");
System.out.println("아이디>");
String id = scan.next();
System.out.println("비밀번호>");
String pwd = scan.next();
System.out.println("이메일>");
String email = scan.next();
System.out.println("전화번호>");
String phone = scan.next();
String sql="INSERT INTO MEMBERS VALUES (?,?,?,?,SYSDATE)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
pstmt.setString(3, email);
pstmt.setString(4, phone);
int n = pstmt.executeUpdate();
}
// 아이디를 입력받아 해당정보를 출력하는 메소드 만들기
public void getInfo() throws SQLException{
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql ="SELECT * FROM MEMBERS WHERE ID=?";
System.out.println("아이디를 입력받아 해당정보를 출력하는 메소드");
System.out.println("아이디>");
String id = scan.next();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
rs.next();
System.out.println( "ID:" + rs.getString("id") + "\t" +
"PWD:" + rs.getString("pwd") + "\t" +
"EMAIL:" + rs.getString("email") + "\t" +
"PHONE:" + rs.getString("phone") );
}
}
public class Test02 {
public static void main(String[] args) {
MyJdbc02 mj = new MyJdbc02();
try{
mj.showList();
mj.insert();
mj.delete();
mj.getInfo();
}catch(SQLException e){
System.out.println(e.getMessage());
}finally{
try {
mj.disconnect();
} catch (Exception e2) {
}
}
}
}
'WEB > JDBC' 카테고리의 다른 글
6. JDBC-DB정보를 db.properties파일을 읽어오기 (0) | 2013.05.04 |
---|---|
5. JDBC - CallableStatement(프로시져호출), 동적커서 (0) | 2013.04.17 |
4. JDBC - 트랜잭션 처리 & properties파일에서 정보읽어오기. (1) | 2013.04.17 |
2. JDBC - Statement 사용 (0) | 2013.04.17 |
1. JDBC 설정 및 절차 (0) | 2013.04.17 |