반응형
SQL - JAVA
JDBC연동
insert문
package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
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, ?, ?)";
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection
conn = DriverManager.getConnection(url, uid, upw);
System.out.println(conn);
//statement객체
pstmt = conn.prepareStatement(sql);
//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
pstmt.setString(1, "홍길동");
pstmt.setString(2, "프로그래머");
//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
int result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함
if(result == 1) {
System.out.println("성공");
} else {
System.out.println("실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Close 에러");
}
}
}
}
select문
package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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; // 결과 저장 객체
try {
// 드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// conn
conn = DriverManager.getConnection(url, uid, upw);
// stmt
pstmt = conn.prepareStatement(sql);
// sql구문에 ?가 있으면 채워줘야 함
// sql 실행
rs = pstmt.executeQuery();
while(rs.next()) { // 다음 row가 있다면 true
// 한 행에 대한 처리(getInt, getString, getDouble, getDate, getTimestamp 등등)
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) {
// TODO: handle exception
} finally {
try {
conn.close();
pstmt.close();
rs.close();
} catch (SQLException e) {
System.out.println("close 에러");
}
}
}
}
select 문 2
package naver.srlee3637.jdbc;
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 JDBCSelect2 {
public static void main(String[] args) {
/*
* 사원 수를 입력받습니다.
*
* employees, departments 테이블에서 부서별 사원 수가 입력받은 사원 수보다 큰 데이터를 select
*
* 출력할 컬럼은 부서명, 사원수, 부서아이디
*/
Scanner scan = new Scanner(System.in);
int num = 0;
try {
System.out.print("숫자를 입력하세요>");
num = scan.nextInt();
} catch (Exception e) {
scan.nextLine();
}
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "hr";
String upw = "hr";
String sql = "select * from (select d.department_name, d.department_id, count(*) as 사원수 "
+ "from departments d "
+ "left outer join employees e on e.department_id = d.department_id "
+ "group by d.department_id, d.department_name order by 사원수)"
+ " where 사원수 > ?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, num);
rs = pstmt.executeQuery();
while(rs.next()) {
String department_name = rs.getString("department_name");
int department_id = rs.getInt("department_id");
int employeeNumber = rs.getInt("사원수");
System.out.println("부서명:" + department_name + ", 사원수:" + employeeNumber + ", 부서아이디:" + department_id);
}
} catch (Exception e) {
} finally {
try {
conn.close();
pstmt.close();
rs.close();
scan.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("close 에러");
}
}
}
}
update문
package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCUpdate {
public static void main(String[] args) {
// 스캐너로 auth_id, name, job을 입력받아서 해당 auth_id의 name, job을 업데이트하는 구문
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;
Scanner scan = new Scanner(System.in);
String name = "";
String job = "";
int auth_id = 0;
try {
System.out.print("이름을 입력하세요>");
name = scan.next();
System.out.print("직업을 입력하세요>");
job = scan.next();
System.out.print("바꾸고 싶은 행의 auth_id을 숫자로 입력하세요>");
auth_id = scan.nextInt();
} catch (Exception e) {
scan.nextLine();
}
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection
conn = DriverManager.getConnection(url, uid, upw);
// System.out.println(conn);
//statement객체
pstmt = conn.prepareStatement(sql);
//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
pstmt.setString(1, name);
pstmt.setString(2, job);
pstmt.setInt(3, auth_id);
//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
int result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함
// 답은 1 or 0
if(result == 1) {
System.out.println("성공");
} else {
System.out.println("실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
pstmt.close();
scan.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Close 에러");
}
}
}
}
package naver.srlee3637.jdbc;
public class AuthVO {
// 특별한 알고리즘을 가진 클래스가 아니라, 조회한 데이터를 저장할 클래스 (1행 데이터를 VO클래스에 담음)
// 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) {
// alt shift s - generate constructor using fields
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 + "]";
}
// alt shift s - generate getter and setters
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 naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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, ?, ?)";
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//connection
conn = DriverManager.getConnection(url, uid, upw);
System.out.println(conn);
//statement객체
pstmt = conn.prepareStatement(sql);
//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
pstmt.setString(1, name);
pstmt.setString(2, job);
//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Close 에러");
}
}
return result;
}
// 조회 메소드
public ArrayList<AuthVO> selectEx() {
ArrayList<AuthVO> list = new ArrayList<>();
String sql = "select * from auth order by auth_id desc";
// 필요한 변수
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; // 결과 저장 객체
try {
// 드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
// conn
conn = DriverManager.getConnection(url, uid, upw);
// stmt
pstmt = conn.prepareStatement(sql);
// sql구문에 ?가 있으면 채워줘야 함
// sql 실행
rs = pstmt.executeQuery();
while(rs.next()) { // 다음 row가 있다면 true
// 한 행에 대한 처리(getInt, getString, getDouble, getDate, getTimestamp 등등)
int auth_id = rs.getInt("auth_id");
String name = rs.getString("name"); // 컬럼명
String job = rs.getString("job");
// VO는 한번 돌때마다 하나씩 생성되어야함
// vo에 행 저장
// vo를 list에 저장
AuthVO vo = new AuthVO(auth_id, name, job);
list.add(vo);
}
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
conn.close();
pstmt.close();
rs.close();
} catch (SQLException e) {
System.out.println("close 에러");
}
}
return list;
}
}
package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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();
boolean bool = true;
while(bool) {
try {
System.out.println("메뉴선택[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) {
if(vo.getAuth_id() > 3){
System.out.println(vo.toString());
}
}
break;
default:
System.out.println("프로그램 종료");
bool = false;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
반응형
'SQL' 카테고리의 다른 글
MYSQL 설치 (0) | 2023.02.03 |
---|---|
47일차 22.11.25 (0) | 2022.11.29 |
43일차 22.11.21 (0) | 2022.11.21 |
42일차 22.11.18 (0) | 2022.11.18 |
41일차 22.11.17 (0) | 2022.11.17 |
댓글