JDBC (Java DataBase Connectivity)
※ 정의 : JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
※ 순서 :
- Driver Loading - 1번 (*.jar이 필요)
- Connection - URL, USER, PASSWORD
- Statement - SQL(insert, delete, update, select...) PreparedStatement

//-------------
자바 1.6 이상부터는
Console 기반의 프로젝트에서 프로젝트 참조만으로 등록 사용 가능합니다
서비스로더(http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html)) 기반으로
JDBC Driver가 자동으로 등록됩니다.
그래서 Class.forName("com.mysql.jdbc.Driver") 류의 코드를 호출하지 않아도 됩니다.
//-------------
ojdbc8.jar
- 필요한 Project의 lib(일반 Folder)에 넣기
(오라클 사이트에서 받아도 되지만 아래 디렉토리에 있는 파일을 옮겨도 된다.
D:\bitcamp\Oracle\sqldeveloper\jdbc\lib) - Dynamic Web 프로젝트와는 달리 수동으로 연동해줘야 한다.
설정 : lib에 넣은 ojdbc11.jar 우클릭 → build path → add to build path → Rederenced Libraries가 프로젝트에 추가됨 (이 파일은 디렉토리 폴더에서는 보이지 않는다. 오직 프로젝트 안에서만 존재) - 아래의 디렉토리를 따라 간다.
ojbdc11.java
oracle.jdbc.driver
OracleDriver.class ⇒ 클래스? 인터페이스?
파일명만 보고는 인터페이스인지 아닌지 구분하기 힘들기때문에 new하기 힘들다. 범인의 몽타주만 보고 여자인지 남자인지 등을 구분하기 힘들 때 그냥 사람이라고 뭉뚱그려 표현하는 것처럼, 자바도 Class로 뭉뚱그려 표현한다.
사람
범인 ⇒ 몽타주 ⇒ Object, String, … Class

class Class { // 이런식으로 표현
}
<규칙>
public class 클래스{
public 생성자() { // 한 번만 수행하기 위해 생성자로 생성
Class.forName("풀 쿼리 네임");
}
길
홍길동
패키지.클래스명
public static void main(String[] args) {
}
}
<테스트>
package dbtest.dao;
public class InsertMain {
// 연결
public InsertMain() { // 한 번만 수행하기 위해 생성자로 생성
//Class.forName("oracle.jdbc.driver.OracleDriver.class");
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); // 끝에 .class는 쓰지 않는 게 규칙 (붙여서 쓰면 에러남)
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
InsertMain im = new InsertMain();
}
}
*결과 출력 :
드라이버 로딩 성공
ojdbc연결에 성공했으면 이제 본격적으로 접속을 해야한다.
인터페이스인 Connection대신 오버로드한 DriverManager관련 메소드를 사용해야 한다. 우리가 쓰는건 대표적으로 getConnection()가 있다.

아래의 코드를 InsertMain()메소드 아래 추가한다.
// 접속
public void getConnection() {
try {
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "c#java","1234");
// jdbc:연결할sql프로그램명:드라이버명(그래픽카드의 지포스같은 이름):@아이피주소(프로젝트시에는 연결할 팀장의 ip를 연결하기도 한다):포트번호:sid명
// 오라클과 mysql은 조금씩 다르니 이전에 배웠던 것과 잘 비교해서 사용하자
System.out.println("접속 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
이제 진짜 데이터를 DB에 insert 할 차례이다.
아래의 코드를 getConnection()메소드 아래 추가한다.
// 3-1 통역가 생성
try {
this.getConnection(); // 오라클에 접속 -> 하면서 statment가 만들어짐
pstmt = conn.prepareStatement("insert into dbtest values(?,?,?,sysdate)");
// 얘 또한 인터페이스 (부모 인터페이스(superinterface)가 3개나 된다.)
// 따라서 이미 오버라이딩 된 메소드를 써야 하는데 그것또한 Connection 인터페이스에 구현되어 있다. 따라서 Connection타입의 변수인 conn을 여기서도 사용해야 한다.
// 이때 conn은 getConnection() 지역변수이기때문에 전역으로 올려야 insertAtricle()에서도 사용이 가능
// 3-2 ?에 데이터 대입
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setDouble(3, height);
// 3-3 실행
int su = pstmt.executeUpdate(); // insert시 항상 "n개의 행이 삽입되었습니다"처럼 개수가 리턴됨
System.out.println(su + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3-4 열어놓은거 다 닫기 (닫을때는 순서를 거꾸로 수행)
try {
if(pstmt != null) pstmt.close(); // 닫기 위해선 pstmt도 전역으로 사용해야 하므로 try구문의 PreparedStatement pstmt를 전역으로 올린다.
if(conn != null) conn.close();
scan.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
<실습 최종 결과 코드>
<InsertMain.java 파일>
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class InsertMain {
private Connection conn;
private PreparedStatement pstmt;
// 5. 환경변수 설정
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "c##java";
private String password = "1231";
// 1. 연결
public InsertMain() { // 한 번만 수행하기 위해 생성자로 생성
//Class.forName("oracle.jdbc.driver.OracleDriver.class");
try {
// Class.forName("oracle.jdbc.driver.OracleDriver"); // 끝에 .class는 쓰지 않는 게 규칙 (붙여서 쓰면 에러남)
Class.forName(driver); // 5-1 전역으로 올리고 변수를 가져오게 바꿈
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 2. 접속
public void getConnection() {
try {
//conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "c##java","1231");
// jdbc:연결할sql프로그램명:드라이버명(그래픽카드의 지포스같은 이름):@아이피주소(프로젝트시에는 연결할 팀장의 ip를 연결하기도 한다):포트번호:sid명
// 오라클과 mysql은 조금씩 다르니 이전에 배웠던 것과 잘 비교해서 사용하자
conn = DriverManager.getConnection(url, username, password); // 5-2 마찬가지로 전역으로 올리고 변수값만 대입
System.out.println("접속 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. 진짜 insert
public void insertAtricle() {
Scanner scan = new Scanner(System.in);
System.out.println("이름 입력 : ");
String name = scan.next();
System.out.println("나이 입력 : ");
int age = scan.nextInt();
System.out.println("키 입력 : ");
double height = scan.nextDouble();
// 3-1 통역가 생성
try {
this.getConnection(); // 오라클에 접속 -> 하면서 statment가 만들어짐
pstmt = conn.prepareStatement("insert into dbtest values(?,?,?,sysdate)");
// 얘 또한 인터페이스 (부모 인터페이스(superinterface)가 3개나 된다.)
// 따라서 이미 오버라이딩 된 메소드를 써야 하는데 그것또한 Connection 인터페이스에 구현되어 있다. 따라서 Connection타입의 변수인 conn을 여기서도 사용해야 한다.
// 이때 conn은 getConnection() 지역변수이기때문에 전역으로 올려야 insertAtricle()에서도 사용이 가능
// 3-2 ?에 데이터 대입
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setDouble(3, height);
// 3-3 실행
int su = pstmt.executeUpdate(); // insert시 항상 "n개의 행이 삽입되었습니다"처럼 개수가 리턴됨
System.out.println(su + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3-4 열어놓은거 다 닫기 (닫을때는 순서를 거꾸로 수행)
try {
if(pstmt != null) pstmt.close(); // 닫기 위해선 pstmt도 전역으로 사용해야 하므로 try구문의 PreparedStatement pstmt를 전역으로 올린다.
if(conn != null) conn.close();
scan.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 문제는 sql쪽 예외처리문구는 하나같이 SQLException으로 떨어지기때문에 어디에서 오류가 생긴건지 알기 힘들다. 때문에 각 catch구문에 println으로 찍어봐야 한다.
public static void main(String[] args) {
InsertMain im = new InsertMain();
im.insertAtricle(); // 4 결과값 수행
}
}
*결과 출력 :
드라이버 로딩 성공
이름 입력 :
코난
나이 입력 :
13
키 입력 :
153.6
접속 성공
1개의 행이 삽입되었습니다.

이번엔 Update문으로 연습 해보자
<UpdateMain.java 파일>
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class UpdateMain {
private Connection conn;
private PreparedStatement pstmt;
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "c##java";
private String password = "1231";
// 1.연결
public UpdateMain() {
try {
Class.forName(driver);
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 2. 접속
public void getConnection() {
try {
conn = DriverManager.getConnection(url, username, password);
System.out.println("접속 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. 진짜 update
public void updateAction() {
Scanner sc = new Scanner(System.in);
System.out.println("이름 입력 : ");
String name = sc.next();
this.getConnection();
String sql = "update dbtest set age=age+1 where name like ?"; // %못쓰니까 ?로 대체함 // age=?+1 이 아니다. 주의!!!!
try {
pstmt = conn.prepareStatement(sql); // sql 문장이 기니까 위로 뺴주고 아래에는 변수만 집어넣음
pstmt.setString(1, "%" + name + "%"); // 위에서 대입못한 %를 여기서 대입해야 함
int su = pstmt.executeUpdate();
System.out.println(su + "개의 행이 변경되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(pstmt !=null)pstmt.close();
if(conn !=null) conn.close();
sc.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
UpdateMain up = new UpdateMain();
up.updateAction();
}
}
*결과 출력 :
드라이버 로딩 성공
이름 입력 :
홍
접속 성공
4개의 행이 변경되었습니다.
/* 문제
드라이버 로딩
커넥션
수정할 이름 입력 : 홍
=> 위치 상관없이 홍이 들어간 이름을 찾아서 나이를 1증가 시키시오 update
*/
포인트는 String sql = "update dbtest set age=age+1 where name like ?";와 pstmt.setString(1, "%" + name + "%");이다.
마지막으로 가장 어려운 select문을 연습해보자
<SelectMain.java 파일>
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelectMain {
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs; // select문으로 가져온 결과물을 담는 변수 (자바에서 정해준 변수명이므로 변경 불가)
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "c##java";
private String password = "1231";
// 1.연결
public SelectMain() {
try {
Class.forName(driver);
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 2. 접속
public void getConnection() {
try {
conn = DriverManager.getConnection(url, username, password);
System.out.println("접속 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. 진짜 select
public void selectArticle() {
this.getConnection();
String sql = "select * from dbtest";
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); // ★★★★실행★★★★ (executeUpdate가 아니다 주의) -> (추출한 쿼리를 담을 공간이 필요 So,)ResultSet 리턴
//rs.next(); // -> 1. 현재 위치의 레코드가 있으면 true, 없으면 false
// 2. 다음 레코드로 이동
// rs.getString("name") - 컬럼명 or rs.getString(1) - 컬럼번호 // 보통은 컬럼명으로 사용
// rs.getInt("age") or rs.getInt(2);
// rs.getDouble("height") or rs.getDouble(3);
// rs.getDate("logtime") 또는 rs.getString("logtime") or rs.getDate(4); // getDate 대신에 getString써도 된다.
// next()는이터레이터와 같은 역할 so, while문으로 수행
while(rs.next()) {
System.out.println(rs.getString("name") + "\t" // rs에 담은 쿼리문에서 원하는 속성을 꺼내옴
+ rs.getInt("age") + "\t"
+ rs.getDouble("height") + "\t"
+ rs.getString("logtime"));
}//while
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
} // finally-try
} // try-catch
}
public static void main(String[] args) {
SelectMain sm = new SelectMain();
sm.selectArticle();
}
}
*출력 결과 :
드라이버 로딩 성공
접속 성공
코난 13 153.6 2023-07-28 11:29:43
타이거 33 178.9 2023-07-28 11:38:01
홍길동 28 185.57 2023-07-27 23:17:30
Hong 30 175.56 2023-07-27 23:17:30
희동이 3 0.0 null
홍당무 0 168.89 null
분홍신 7 123.5 2023-07-27 23:17:30
진분홍 0 0.0 null
포인트는 private ResultSet rs; 과 rs = pstmt.executeQuery();, 그리고 rs.next();이다.
💡 ※ longtime메서드 대신 getString메서드를 써도 되는이유??
rs.getDate(); 메서드는 데이터베이스 열에서 날짜 및 타임스탬프 데이터를 검색하는 데 사용되며, 일반적으로 날짜 관련 작업이나 비교를 수행해야 하는 경우 사용된다. 타임스탬프의 날짜 부분만 나타내는 java.sql.Date 객체로 데이터를 반환한다.
rs.getString(); 메서드는 데이터베이스 열에서 문자열로 데이터를 검색하는 데 사용되기때문에, 데이터를 문자열로 직접 조작하려는 경우에 유용하다. 문자열로 쉽게 표현할 수 있는 형식(예: "yyyy-MM-dd HH:mm:ss")의 날짜 또는 타임스탬프 데이터가 포함되어 있는 경우 rs.getDate("logtime"); 대신 사용할 수 있다.
요약하자면 getDate getString 둘다 DB 컬럼의 날짜 데이터에 접근가능하고, 일반적으로는 getDate 메서드를 많이 사용한다. 하지만 String 타입으로 선언된 날짜 데이터를 조작하거나, 위의 코드와 같이 직접 조작하지 않고 조회만 하는 경우에는 getString메서드를 사용해도 무방하다.
💡 ※ 참고 :
1. 자바는 포지션이 0부터 시작이지만 오라클의 포지션(속성)은 1부터 시작한다
2. 자바안에서 수행되는 쿼리문은 자동 commit되므로 따로 작업을 수행할 필요가 없음
[실습]
Java Project : dbtest
Package : dbtest.dao
Class : InsertMain.java
UpdateMain.java
SelectMain.java
💡 ※ DTO(Data Transfer Object)란?
계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)입니다.
※ DAO(data access object)란?
데이터베이스의 data에 접근하기 위한 객체입니다. DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용합니다.
※ VO(Value Object)란?
값 오브젝트로써 값을 위해 쓰입니다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.
DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.
[문제1]
Java Project : student
Package : student.dao
Class : Student.java
# 테이블 작성
create table student2 (
name varchar2(15) not null, -- 이름
value varchar2(15), -- 학번 or 과목 or 부서
code number -- 1이면 학생, 2이면 교수, 3이면 관리자
);
menu()
****************
관리
****************
1. 입력
2. 검색
3. 삭제
4. 종료
****************
번호선택 : 4
프로그램 종료합니다
1번인 입력인 경우 - insertArticle()
****************
1. 학생
2. 교수
3. 관리자
4. 이전메뉴
****************
번호선택 :
1-1번 학생인 경우
이름입력 :
학번입력 :
1-2번 교수인 경우
이름입력 :
과목입력 :
1-3번 관리자인 경우
이름입력 :
부서입력 :
x 행이 삽입되었습니다.
2번 검색인 경우 - selectArticle()
****************
1. 이름 검색 (1개 글자가 포함된 이름은 모두 검색)
2. 전체 검색
3. 이전메뉴
****************
번호선택 : 1
2-1번 이름 검색인 경우
검색할 이름 입력 : 이
이름 = 이교수 과목= 자바
이름 = 이관리 부서= 기획
이름 = 이학생 학번= 2002
2-2번 전체 검색인 경우
이름 = 이교수 과목 = 자바
이름 = 코난 학번 = 2022
이름 = 홍길동 학번 = 2000
이름 = 이관리 부서 = 기획
이름 = 김교수 과목 = C
이름 = 이학생 학번 = 2002
3번 삭제인 경우 - deleteArticle()
삭제를 원하는 이름 입력 : (정확하게 3개의 글자가 모두 입력된 상태)
x 행이 삭제되었습니다.
[문제2]
Project : friend
Package : friend.service
Class : FriendManager.java
Package : friend.dao
Class : FriendDAO.java
Package : friend.bean
Class : FriendDTO.java
# 테이블 생성
create table friend(
seq number primary key, -- 기본키(not null, unique)
name varchar2(15) not null,
tel1 varchar2(5),
tel2 varchar2(5),
tel3 varchar2(5), gender number, -- 남자는 0, 여자는 1
read number default 0, -- 선택해제 0, 선택 1
movie number default 0,
music number default 0,
game number default 0,
shopping number default 0);
# 시퀀스
create sequence seq_friend nocycle nocache;
<Student.java 파일>
package student.dto;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Student {
Scanner scan = new Scanner(System.in);
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
// 5. 환경변수 설정
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "c##java";
private String password = "1231";
// 1. 연결
public Student() { // 한 번만 수행하기 위해 생성자로 생성
try {
Class.forName(driver); // 5-1 전역으로 올리고 변수를 가져오게 바꿈
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 2. 접속
public void getConnection() {
try {
conn = DriverManager.getConnection(url, username, password); // 5-2 마찬가지로 전역으로 올리고 변수값만 대입
System.out.println(); System.out.println();
System.out.println(" 접속 성공\n");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. 진짜 insert
public void insertArticle() {
while(true) {
int num;
int code;
System.out.println();
System.out.println("************");
System.out.println(" 1. 학생");
System.out.println(" 2. 교수");
System.out.println(" 3. 관리자");
System.out.println(" 4. 이전메뉴");
System.out.println("************");
System.out.print(" 번호 선택 : ");
num = scan.nextInt();
System.out.println();
// 데이터 (if문 안에다 쓰면 안에서만 돌고 밖으로 나가면 사라져버림)
String name = null;
String value = null;
if(num == 4) {
System.out.println("이전 메뉴로 돌아갑니다");
break;
}
System.out.print(" 이름 입력: ");
name = scan.next();
if(num == 1) {
System.out.print(" 학번 입력");
value = scan.next();
code = 1;
} else if(num == 2) {
System.out.print(" 과목 입력: ");
value = scan.next();
code = 2;
} else if(num == 3) {
System.out.print(" 소속 입력: ");
value = scan.next();
code = 3;
} else {
System.out.println("*1~4까지만 번호를 허용합니다.");
continue;
}
// 3-1 통역가 생성
try {
this.getConnection(); // 오라클에 접속하기 위해 메소드 사용 -> 하면서 statment가 만들어짐
pstmt = conn.prepareStatement("insert into student2 values(?,?,?)");
// 3-2 ?에 데이터 대입
pstmt.setString(1, name);
pstmt.setString(2, value);
pstmt.setInt(3, code);
// 3-3 실행
int su = pstmt.executeUpdate();
System.out.println(su + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3-4 열어놓은거 다 닫기 (닫을때는 순서를 거꾸로 수행)
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("입력되었습니다.");
} // while
} //insertArticle()
public void selectAtricle() {
while(true) {
int num;
System.out.println();
System.out.println("************");
System.out.println(" 1. 이름검색");
System.out.println(" 2. 전체검색");
System.out.println(" 3. 이전메뉴");
System.out.println("************");
System.out.print(" 번호 선택 : ");
num = scan.nextInt();
if(num == 3) {
System.out.println("이전 메뉴로 돌아갑니다");
break;
}
// 데이터
String name = null;
if(num == 1) {
System.out.print(" 이름검색: ");
name = scan.next();
} else if(num == 2) {
System.out.print(" 전체검색: ");
}
// DB - select
this.getConnection(); // 오라클에 접속하기 위해 메소드 사용
String sql = null;
if(num==1) {
sql = "select * from student2 where name like ?";
} else {
sql = "select * from student2";
}
// 3-1 통역가 생성
try {
pstmt = conn.prepareStatement(sql);
if(num ==1) pstmt.setString(1, "%" + name + "%");
rs = pstmt.executeQuery(); // 3-3 실행
while(rs.next()) {
System.out.print("이름 = " + rs.getString("name") + "\t\t"); // rs에 담은 쿼리문에서 원하는 속성을 꺼내옴
if(rs.getInt("code")==1) {
System.out.print("학번 = " + rs.getString("value"));
} else if(rs.getInt("code")==2) {
System.out.print("과목 = " + rs.getString("value"));
} else if(rs.getInt("code")==3) {
System.out.print("부서 = " + rs.getString("value"));
} //if문
System.out.println();
}//while
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3-4 열어놓은거 다 닫기 (닫을때는 순서를 거꾸로 수행)
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
} // finally-try-catch
} //try-catch
System.out.println();
System.out.println(" 해당 값이 조회되었습니다.");
}
}
public void deleteAtricle() {
System.out.print("삭제할 이름 입력 : ");
String name = scan.next();
// DB - delete
getConnection(); // 접속
String sql = "delete student2 where name =?"; // mysql은 delete from~~
try {
pstmt = conn.prepareStatement(sql); // 생성
pstmt.setString(1, name);
int su = pstmt.executeUpdate(); // 개수 리턴
System.out.println(su + "개의 행이 삭제되었습니다.");
} catch(SQLException e) {
e.printStackTrace();
} finally {
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
} // finally-try-catch
} // try-catch
}
public void menu() {
while(true) {
System.out.println();
System.out.println("************");
System.out.println(" 1. 입력");
System.out.println(" 2. 검색");
System.out.println(" 3. 삭제");
System.out.println(" 4. 종료");
System.out.println("************");
System.out.print(" 번호 선택 : ");
int num = scan.nextInt();
System.out.println();
if(num == 4) {
System.out.println("프로그램 종료합니다");
scan.close();
break;
}
if(num == 1) {
Student st1 = new Student(); // 부모 = new 자식
st1.insertArticle();
} else if(num == 2) {
Student st2 = new Student();
st2.selectAtricle();
} else if(num == 3) {
Student st3 = new Student();
st3.deleteAtricle();
} else {
System.out.println("*1~4까지만 번호를 허용합니다.");
continue;
}
}
} // menu
public static void main(String[] args) {
Student st = new Student();
st.menu();
// 만약 menu()가 static이면 여기서 객체 생성할 필요없이 바로 호출이 가능함
}
}
*결과 출력 - 입력 :
드라이버 로딩 성공
************
1. 입력
2. 검색
3. 삭제
4. 종료
************
번호 선택 : 1
드라이버 로딩 성공
************
1. 학생
2. 교수
3. 관리자
4. 이전메뉴
************
번호 선택 : 3
이름 입력: 김관리자
소속 입력: 사장실
접속 성공
1개의 행이 삽입되었습니다.
입력되었습니다.
************
1. 학생
2. 교수
3. 관리자
4. 이전메뉴
************
번호 선택 : 4
이전 메뉴로 돌아갑니다
************
1. 입력
2. 검색
3. 삭제
4. 종료
************
번호 선택 : 4
프로그램 종료합니다
*결과 출력 - 검색 :
드라이버 로딩 성공
************
1. 입력
2. 검색
3. 삭제
4. 종료
************
번호 선택 : 2
드라이버 로딩 성공
************
1. 이름검색
2. 전체검색
3. 이전메뉴
************
번호 선택 : 2
전체검색:
접속 성공
이름 = 최병권 부서 = 2015000
이름 = 김코테 학번 = 영어
이름 = 오쿠배 과목 = 인사과
이름 = 하하하 학번 = 정보과
이름 = 유테스 과목 = 정처기
이름 = 김허접 학번 = 33333
이름 = 박허접 학번 = 33333
이름 = 아아아 학번 = 4544
이름 = 김관리자 부서 = 사장실
해당 값이 조회되었습니다.
************
1. 이름검색
2. 전체검색
3. 이전메뉴
************
번호 선택 : 3
이전 메뉴로 돌아갑니다
************
1. 입력
2. 검색
3. 삭제
4. 종료
************
번호 선택 : 4
프로그램 종료합니다
* 삭제 출력 결과는 생략
'데이터베이스 > Oracle' 카테고리의 다른 글
| [Oracle] Join(조인) (0) | 2023.08.02 |
|---|---|
| [Oracle] DDL / DML / DCL (0) | 2023.08.02 |
| [Oracle] Select문 연습2 (0) | 2023.08.01 |
| [Oracle] Select문 연습1 (0) | 2023.08.01 |
| [Oracle] 데이터베이스(DB)의 개념 (0) | 2023.08.01 |
댓글