1. jdbc 다운로드
- 오라클 홈페이지 → jdbc 검색한 후 다운로드
- 다운받은 파일을 이클립스에서 폴더 생성 후 옮기기
- 이클립스에서 build path 들어가기
- JDBC insert
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JDBCInsert {
public static void main(String[] args) {
//insert
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "hr"; //계정
String upw = "hr"; //비밀번호
String sql = "insert into auth values(seq_auth.nextval,?,?)";
//첫번째 값 nextval, 두번째 값에는 name
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 객체 생성, = 앞에 connection 인터페이스
conn = DriverManager.getConnection(url, uid, upw);
System.out.println(conn);
//statement 객체
//conn.createStatement(); 도 사용 가능
//함수 호출하고 객체 타입 반환
pstmt = conn.prepareStatement(sql);
//3. ?값을 세팅하기 - 첫번째부터 1번 순서
//(setString, setInt, setDate, setTimeStamp-날짜 형식)
//밑에 두 줄이 물음표(2,3번째) 값으로 들어감
pstmt.setString(1, "홍길동");
pstmt.setString(2, "프로그래머");
//4. sql 실행
//(select 문은 query 문장 실행, insert, delete, update문은 update 메서드로 실행)
int result = pstmt.executeUpdate(); //위에 sql 들어가 있으니까 매개변수 없는 걸로 사용
//성공과 실패를 반환
if(result == 1) {
System.out.println("성공");
} else {
System.out.println("실패");
}
} catch (Exception e) {
e.printStackTrace(); //에러 로그를 봐야하니까
} finally { //(connection 해제 필수)
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
}
}
- JDBC select
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCSelect {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "hr"; //계정
String upw = "hr"; //비밀번호
String sql = "select * from auth order by auth_id desc";
Connection conn = null;
PreparedStatement pstmt = null;
//결과 저장 객체
ResultSet rs = null; //select 결과를 반환 받을 객체
try {
//드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 연결
conn = DriverManager.getConnection(url, uid, upw);
//stmt
pstmt = conn.prepareStatement(sql);
//? 값에 대한 처리
//sql 실행(select의 실행)
//select는 반환이 있으니까 rs 필요
rs = pstmt.executeQuery();
while (rs.next()) {
//다음행이 있으면 true를 반환 받아서 while문 실행
//한 행에 대한 처리(getInt, getString, getDouble, getTimestamp, getDate)
int auth_id = rs.getInt("auth_id");
String name = rs.getString("name"); //컬럼명
String job = rs.getString("job");
System.out.println("번호:" + auth_id + ", 이름:" + name + ", 직업:" + job);
}
} catch (Exception e) {
e.printStackTrace();
} finally { //(connection 해제 필수) - 오류가 생기면 꺼지지 않기 때문에 아래 finally에 써줘야 함.
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
}
}
- JDBC select 2
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class JDBCSelect2 {
public static void main(String[] args) {
/*
* 사원 수를 입력 받습니다.
* employees, departments 테이블에서 부서별 사원 수가 입력 받은 사원수 보다 큰 데이터를 select 해보세요.
* 출력할 컬럼은 부서명, 사원수, 부서 id
* null이 아닌 데이터만 출력
*/
Scanner scan = new Scanner(System.in);
System.out.println("사원수: ");
int num = scan.nextInt();
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "hr"; //계정
String upw = "hr"; //비밀번호
String sql = "select d.department_id,\r\n"
+ " d.department_name,\r\n"
+ " a.total \r\n"
+ "from departments d\r\n"
+ "inner join(select department_id,\r\n"
+ " count(*) total\r\n"
+ " from employees\r\n"
+ " group by department_id) a\r\n"
+ "on d.department_id = a.department_id\r\n"
+ "where total > ?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; //select 결과를 반환 받을 객체
try {
//드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 연결
conn = DriverManager.getConnection(url, uid, upw);
//stmt
pstmt = conn.prepareStatement(sql);
//? 값에 대한 처리
pstmt.setInt(1, num);
//sql 실행(select의 실행)
rs = pstmt.executeQuery();
while (rs.next()) {
//다음행이 있으면 true를 반환 받아서 while문 실행
//한 행에 대한 처리(getInt, getString, getDouble, getTimestamp, getDate)
String department_id = rs.getString("department_id");
String department_name = rs.getString("department_name"); //컬럼명
int total = rs.getInt("total");
System.out.println("부서 아이디:" + department_id + ", 부서명:" + department_name + ", total:" + total);
}
} catch (Exception e) {
e.printStackTrace();
} finally { //(connection 해제 필수) - 오류가 생기면 꺼지지 않기 때문에 아래 finally에 써줘야 함.
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
}
}
db: select d.department_id,
d.department_name,
a.total
from departments d
inner join(select department_id, --null인 데이터는 나오지 않았으면 해서
count(*) total
from employees
group by department_id) a
on d.department_id = a.department_id
where total > 10;
- JDBC update
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class JDBCUpdate {
public static void main(String[] args) {
//update
//scanner로 auth_id, name, job을 입력 받아서 해당 auth_id의 name, job을 업데이트 하는 구문
//db에서 commit 해야 함.
Scanner scan = new Scanner(System.in);
System.out.println("수정할 auth_id:");
int auth_id = scan.nextInt();
System.out.println("수정할 name:");
String name = scan.next();
System.out.println("수정할 job:");
String job = scan.next();
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "hr"; //계정
String upw = "hr"; //비밀번호
String sql = "update auth set name=? , job=? where auth_id = ?";
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 객체 생성, = 앞에 connection 인터페이스
conn = DriverManager.getConnection(url, uid, upw);
System.out.println(conn);
//statement 객체
//conn.createStatement(); 도 사용 가능
//함수 호출하고 객체 타입 반환
pstmt = conn.prepareStatement(sql);
//3. ?값을 세팅하기 - 첫번째부터 1번 순서
//(setString, setInt, setDate, setTimeStamp-날짜 형식)
//밑에 두 줄이 물음표(2,3번째) 값으로 들어감
pstmt.setInt(3, auth_id);
pstmt.setString(1, name);
pstmt.setString(2, job); //db에서 commit 해야 함.
//4. sql 실행
//(select 문은 query 문장 실행, insert, delete, update문은 update 메서드로 실행)
int result = pstmt.executeUpdate(); //위에 sql 들어가 있으니까 매개변수 없는 걸로 사용
//성공과 실패를 반환
if(result == 1) {
System.out.println("성공");
} else {
System.out.println("실패");
}
} catch (Exception e) {
e.printStackTrace(); //에러 로그를 봐야하니까
} finally { //(connection 해제 필수) - 오류가 생기면 꺼지지 않기 때문에 아래 finally에 써줘야 함.
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
}
}
- 예제(AuthVO, AuthDAO, main)
package jdbc.model;
public class AuthVO {
//특별한 알고리즘을 가진 클래스가 아니라, 조회한 데이터를 저장할 클래스
//1. 변수는 은닉하고, 테이블이 가지고 있는 멤버 변수를 그대로 사용합니다.
//2. getter, setter
private int auth_id;
private String name;
private String job;
//생성자 - 기본 생성자, 모든 멤버 변수를 저장하는 생성자
public AuthVO() {} //ctrl+space+enter
public AuthVO(int auth_id, String name, String job) {
super();
this.auth_id = auth_id;
this.name = name;
this.job = job;
}
//toString
@Override
public String toString() {
return "AuthVO [auth_id=" + auth_id + ", name=" + name + ", job=" + job + "]";
}
//getter, setter
public int getAuth_id() {
return auth_id;
}
public void setAuth_id(int auth_id) {
this.auth_id = auth_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
package jdbc.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class AuthDAO {
//접근 제한자가 붙은 멤버 변수로 만들어줌
private String url = Main.url;
private String uid = Main.uid; //계정
private String upw = Main.upw; //비밀번호
//메서드화
public int insertEx(String name, String job) {
int result = 0;
//여기서부터 끝까지 메서드로 만들기
String sql = "insert into auth values(seq_auth.nextval,?,?)";
//첫번째 값 nextval, 두번째 값에는 name
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 객체 생성, = 앞에 connection 인터페이스
conn = DriverManager.getConnection(url, uid, upw);
System.out.println(conn);
//statement 객체
//conn.createStatement(); 도 사용 가능
//함수 호출하고 객체 타입 반환
pstmt = conn.prepareStatement(sql);
//3. ?값을 세팅하기 - 첫번째부터 1번 순서
//(setString, setInt, setDate, setTimeStamp-날짜 형식)
//밑에 두 줄이 물음표(2,3번째) 값으로 들어감
pstmt.setString(1, name);
pstmt.setString(2, job);
//4. sql 실행
//(select 문은 query 문장 실행, insert, delete, update문은 update 메서드로 실행)
result = pstmt.executeUpdate(); //위에 sql 들어가 있으니까 매개변수 없는 걸로 사용
//result를 반환 받아서 가지고 나갈 것이기 때문에 성공, 실패에 대한 것은 없어도 됨.
} catch (Exception e) {
e.printStackTrace(); //에러 로그를 봐야하니까
} finally { //(connection 해제 필수) - 오류가 생기면 꺼지지 않기 때문에 아래 finally에 써줘야 함.
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
return result;
}
//조회 메서드
//한 행일때는 arraylist 제외 VO만 사용함.
public ArrayList<AuthVO> selectEx(){ //ArrayList<AuthDAO>-반환 타입
ArrayList<AuthVO> list = new ArrayList<>();
String sql = "select * from auth order by auth_id desc";
Connection conn = null;
PreparedStatement pstmt = null;
//결과 저장 객체
ResultSet rs = null; //select 결과를 반환 받을 객체
try {
//드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection 연결
conn = DriverManager.getConnection(url, uid, upw);
//stmt
pstmt = conn.prepareStatement(sql);
//? 값에 대한 처리
//sql 실행(select의 실행)
rs = pstmt.executeQuery();
while (rs.next()) {
//다음행이 있으면 true를 반환 받아서 while문 실행
//한 행에 대한 처리(getInt, getString, getDouble, getTimestamp, getDate)
int auth_id = rs.getInt("auth_id");
String name = rs.getString("name"); //컬럼명
String job = rs.getString("job");
//VO에 행 데이터 저장
//VO를 list에 저장
AuthVO vo = new AuthVO(auth_id, name, job);
list.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally { //(connection 해제 필수) - 오류가 생기면 꺼지지 않기 때문에 아래 finally에 써줘야 함.
try {
conn.close(); //finally 안에 try-catch문
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
System.out.println("close 에러");
}
}
return list;
}
}
package jdbc.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
//상수로 선언
public static final String url = "jdbc:oracle:thin:@localhost:1521:xe";
public static final String uid = "hr";
public static final String upw = "hr";
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//DAO클래스 선언
AuthDAO authDAO = new AuthDAO();
while(true) {
try {
System.out.print("메뉴 선택[1.조회, 2.저장] \n>");
String menu = scan.next();
switch (menu) {
case "1":
case "조회":
System.out.print("이름>");
String name = scan.next();
System.out.print("직업>");
String job = scan.next();
int result = authDAO.insertEx(name, job);
if(result == 1) {
System.out.println("정상 입력되었습니다.");
} else {
System.out.println("입력 오류 발생");
}
break;
case "2":
ArrayList<AuthVO> list = authDAO.selectEx();
for(AuthVO vo : list) {
System.out.println(vo.toString());
}
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace(); //에러가 나도 멈추지 않음.
}
}
}
}
'TIL > SQL' 카테고리의 다른 글
서브쿼리 정리 (0) | 2023.05.18 |
---|---|
day38-DB: sql (0) | 2022.11.25 |
day36-DB: sql (0) | 2022.11.21 |
day35-DB: sql (0) | 2022.11.18 |
day34-DB: sql (0) | 2022.11.17 |