package kr.s32.jdbc.preparedstatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import kr.util.DBUtil;
public class DeleteMain {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
//JDBC 수행문 1,2 단계
conn= DBUtil.getConnection();
//SQL문 작성
sql = "DELETE FROM test2 WHERE id=?";
//JDBC 수행 3단계 : PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터를 바인딩한다.
pstmt.setString(1,"star");// ?안에 star 내용이 입력되면서, ID값이 star인 행을 삭제하게 된다.
//JDBC 수행 4단계 : SQL문을 테이블에 반영해서 행을 삭제한다.
int count = pstmt.executeUpdate();
System.out.println(count + "개 행을 삭제했습니다.");
} catch (Exception e) {
e.printStackTrace();
}finally {
//자원 정리
DBUtil.executeClose(null, pstmt, conn);
}
}
}
test3 Table 생성
CREATE TABLE test3(
num NUMBER PRIMARY KEY,
title VARCHAR2(60) NOT NULL,
name VARCHAR2(30) NOT NULL,
memo VARCHAR2(4000) NOT NULL,
email VARCHAR2(30),
reg_date DATE NOT NULL );
Buffered Reader 이용하여 추가할 데이터 사용자에게서 입력 받기
package kr.s33.jdbc.preparedstatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import kr.util.DBUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InsertMain {
public static void main(String[] args) {
BufferedReader br = null;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("제목 : ");
String title = br.readLine();
System.out.print("이름 : ");
String name = br.readLine();
System.out.print("메모 : ");
String memo = br.readLine();
System.out.print("이메일 : ");
String email = br.readLine();
//JDBC 수행 1,2단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "INSERT INTO test3 (num,title,name,memo,email,reg_date)VALUES(test3_seq.nextval,?,?,?,?,SYSDATE)";
//JDBC 수행 3단계 : PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 입력된 값들 바인딩
pstmt.setString(1, title);
pstmt.setString(2, name);
pstmt.setString(3, memo);
pstmt.setString(4, email);
//JDBC 수행 4단계 : SQL문 실행하여 테이블에 행을 추가한다.
int count = pstmt.executeUpdate();
System.out.println(count + "개 행을 추가했습니다.");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
//자원 정리
DBUtil.executeClose(null, pstmt, conn);
if(br != null) try {br.close();} catch(IOException e) {}
}
}
}
위 코드에서 입력받은 데이터들이 테이블에 잘 저장되었는지 확인 할 수 있는 코드
package kr.s33.jdbc.preparedstatement;
import java.sql.*;
import kr.util.DBUtil;
public class SelectListMain {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
try {
//JDBC 수행 1,2 단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "SELECT * FROM test3 ORDER BY num DESC";
//JDBC 수행 3단계
pstmt = conn.prepareStatement(sql);
//JDBC 수행 4단계
rs = pstmt.executeQuery();
System.out.println("번호\t작성자\t등록일\t\t제목");
while(rs.next()) {
System.out.print(rs.getInt("num"));
System.out.print("\t");
System.out.print(rs.getString("name"));
System.out.print("\t");
System.out.print(rs.getDate("reg_date"));
System.out.print("\t");
System.out.println(rs.getString("title"));
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
//자원 정리
DBUtil.executeClose(rs, pstmt, conn);
}
}
}
num을 입력받아서 그에 해당하는 행의 데이터들을 출력했다.
위의 SELECT와 다른 점은 여기서는 WHILE문을 사용하여 데이터를 출력하는 것이 아니다. 왜냐하면 모든 데이터를 출력하는 것이 아니라 입력받은 NUM의 데이터만 출력해야 하기 때문에 rs.next()에 입력한 num의 값이 있다면 true를 반환하고 없다면 false를 반환하기 때문에 조건 체크를 통해서 출력해야 한다. 그래서 IF ELSE 문을 사용하면 된다.
package kr.s33.jdbc.preparedstatement;
import java.sql.*;
import java.io.*;
import kr.util.DBUtil;
public class SelectDetailMain {
public static void main(String[] args) {
BufferedReader br = null;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
ResultSet rs = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("번호 : ");
int num = Integer.parseInt(br.readLine());
System.out.println("------------------");
//JDBC 수행 1,2단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "SELECT * FROM test3 WHERE num=?";
//JDBC 수행 3단계 : PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 입력된 값 바인딩
pstmt.setInt(1, num);
//JDBC 수행 4 단계 : SQL문을 테이블에 반영하고 결과 집합을 Result Set에 담아서 반환
rs = pstmt.executeQuery();
if (rs.next()) {
System.out.println("번호 : " + rs.getInt("num"));
System.out.println("제목 : " + rs.getString("title"));
System.out.println("작성자 : " + rs.getString("name"));
System.out.println("내용 : " + rs.getString("memo"));
System.out.println("이메일 : " + rs.getString("email"));
System.out.println("등록일 : " + rs.getDate("reg_date"));
}
else {
System.out.println("검색된 데이터가 없습니다.");
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
DBUtil.executeClose(rs, pstmt, conn);
if(br != null) try {br.close();} catch(IOException e){}
}
}
}
email의 값이 null이 아닌 공백으로 표현하고 싶을때 추가하는 코드
String email = rs.getString("email");
if(email == null) { // email이 null값이라면 비어있게 출력할 수 있게 조건 체크
email = ""; }
System.out.println("이메일 : " + email); //빈칸으로 출력되게 할려면 email을 출력시켜야한다.
Keyword를 입력받아서 해당 단어가 제목에 포함되어 있으면 데이터를 출력하는 코드
package kr.s33.jdbc.preparedstatement;
import java.sql.*;
import java.io.*;
import kr.util.DBUtil;
public class SelectSearchMain {
public static void main(String[] args) {
BufferedReader br = null;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
ResultSet rs = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("제목 검색어 : ");
String keyword = br.readLine();
System.out.println("-------------------------");
//JDBC 수행 1,2단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "SELECT * FROM test3 WHERE title LIKE '%' || ? || '%' ";
//가변 문자를 넣어야지 keyword가 포함되어있는 제목을 검색할 수 있다.
//JDBC 수행 3단계 : PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setString(1, keyword);
//JDBC 수행 4단계 : SQL 문을 테이블에 반영해서 결과 집합을 RESULTSET에 담아서 반환
rs = pstmt.executeQuery();
//IF 문을 이용하여 검색어에 맞는 데이터 행이 있는지 없는지 검색을 우선적으로 진행
if(rs.next()) {
System.out.println("번호\t작성자\t등록일\t\t제목");
//while문을 쓰게 되면 두 개 나와야할 출력문들이 첫 번째로 출력되는 값은 건너뛰고 출력하기 때문에 do-while문을 사용하여 출력해야한다.
do{
System.out.print(rs.getInt("num"));
System.out.print("\t");
System.out.print(rs.getString("name"));
System.out.print("\t");
System.out.print(rs.getDate("reg_date"));
System.out.print("\t");
System.out.println(rs.getString("title"));
}
while(rs.next());
} else {
System.out.println("검색된 데이터가 없습니다.");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.executeClose(rs, pstmt, conn);
if (br != null) try {br.close();} catch(IOException e) {}
}
}
}
번호~이메일까지 모든 데이터를 입력받아 입력받은 번호에 해당하는 모든 정보를 입력 받은 데이터로 변경한다
package kr.s33.jdbc.preparedstatement;
import java.sql.*;
import java.io.*;
import kr.util.DBUtil;
public class UpdateMain {
public static void main(String[] args) {
BufferedReader br = null;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("번호 : ");
int num = Integer.parseInt(br.readLine());
System.out.print("제목 : ");
String title = br.readLine();
System.out.print("이름 : ");
String name = br.readLine();
System.out.print("메모 : ");
String memo = br.readLine();
System.out.print("이메일 : ");
String email = br.readLine();
System.out.println("--------------------");
//JDBC 수행문 1,2 단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "UPDATE test3 SET title=?,name=?,memo=?,email=? WHERE num=?";
//JDBC 수행 3단계
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setString(1, title);
pstmt.setString(2, name);
pstmt.setString(3, memo);
pstmt.setString(4, email);
pstmt.setInt(5, num);
//JDBC 수행 4단계 : SQL문을 실행해서 테이블의 데이터를 수정한다.
int count = pstmt.executeUpdate();
System.out.println(count+"개 행의 정보를 수정했습니다.");
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.executeClose(null, pstmt, conn);
if(br != null) try {br.close();} catch(IOException e) {}
}
}
}
번호를 입력받아 해당 번호의 데이터를 삭제한다
package kr.s33.jdbc.preparedstatement;
import java.sql.*;
import java.io.*;
import kr.util.DBUtil;
public class DeleteMain {
public static void main(String[] args) {
BufferedReader br = null;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("번호 : ");
int num = Integer.parseInt(br.readLine());
//JDBC 수행 1,2 단계
conn = DBUtil.getConnection();
//SQL문 작성
sql = "DELETE FROM test3 WHERE num=?";
// JDBC 수행 3단계 :PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터를 바인딩
pstmt.setInt(1,num);
//JDBC 수행 4단계 : SQL문을 테이블에 반영해서 행을 삭제합니다.
int count = pstmt.executeUpdate();
System.out.println(count + "개 행을 삭제했습니다.");
}catch (Exception e) {
e.printStackTrace();
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
if(br != null) try {br.close();} catch(IOException e) {}
}
}
}
Salary Table 만들기