보라코딩
Day37_230217_Java와 DB 연동 (JDBC, DAO) 본문
어제 학원 PC 교체가 있었다.
그러다보니 새로 설치를 했는데 실행시 오류가 나서
compile 레벨을 변경해주었다.
Java와 DB 연동
새로운 자바프로젝트 만든 후에
java build path 설정해주었다. (ojdbc8.jar)
StudentVO 클래스 만들어주고
StudentDAO 클래스
package com.mystudy.student.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import co
m.mystudy.student.vo.StudentVO;
// XxxDAO, XxxDao : Data Access Object
// 데이터베이스와 연동해서 CRUD 를 구현하는 클래스
// 데이터베이스와 연동해서 CRUD 작업을 할 수 있는 기능을 제공
public class StudentDAO {
private static final String DRIVER = "oracle.jdbc.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
private static final String USER = "mystudy";
private static final String PASSWORD = "mystudypw";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
// static 초기화 구문 (한번만 실행됨!! 최초!)
static {
System.out.println(":: static 초기화 구문 실행");
// 1. JDBC 드라이버 로딩
try {
Class.forName(DRIVER);
System.out.println(">> JDBC 드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
System.out.println("[예외발생] JDBC 드라이버 로딩 실패ㅠ.ㅠ");
}
}
// 인스턴스 초기화 구문
{
System.out.println(":: 인스턴스 초기화 구문 실행");
}
public StudentDAO() {
System.out.println(">> 생성자 실행");
}
// SELECT : 데이터 1개 ID로 조회 - selectOne : Student VO
public StudentVO selectOne(String id) {
StudentVO vo = null;
// DB연결 SQL문 실행 => 결과값 vo 변수에 저장하고 리턴
//2. DB연결 - Connection 객체 생성 <- DriverManager
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3. Statement 문 실행(SQL 문 실행)
//3-1. Connection 객체로 부터 PreparedStatement 객체 생성
StringBuilder sql = new StringBuilder();
sql.append("SELECT ID,NAME,KOR,ENG,MATH,TOT,AVG ");
sql.append(" FROM STUDENT ");
sql.append(" WHERE ID = ? ");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, id);
rs = pstmt.executeQuery();
//4. SQL 실행 결과에 대한 처리
if (rs.next()) {
vo = new StudentVO(
rs.getString("ID"),
rs.getString("NAME"),
rs.getInt("KOR"),
rs.getInt("ENG"),
rs.getInt("MATH"),
rs.getInt("TOT"),
rs.getDouble("AVG"));
}
System.out.println(">> SELECT 작업 끝");
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
return vo;
}
// SELECT : 데이터 1개를 전달받은 VO로 조회 - selectOne : StudentVO
public StudentVO selectOne(StudentVO student) {
return selectOne(student.getId());
}
private void close(Connection conn, PreparedStatement pstmt,
ResultSet rs) {
// 5. 클로징 처리에 의한 자원 반납
// close 순서는 역순
try {
if(rs != null) rs.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
try {
if(pstmt != null) pstmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
if (conn != null) conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
private void close(Connection conn, PreparedStatement pstmt) {
// 5. 클로징 처리에 의한 자원 반납
// close 순서는 역순
try {
if(pstmt != null) pstmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
if (conn != null) conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
// INSERT : VO 객체를 받아서 입력 - insert : int
public int insert(StudentVO vo) {
int result = 0;
//2. DB연결 - Connection 객체 생성 <- DriverManager
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println(">> DB 연결 성공!");
//3. Statement 문 실행(SQL 문 실행)
// 3-1. Connection 객체로부터 PrepareStatement 객체 생성
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO STUDENT ");
sql.append(" (ID, NAME, KOR, ENG, MATH, TOT, AVG) ");
sql.append("VALUES (?, ?, ?, ?, ?, ?, ?)");
pstmt = conn.prepareStatement(sql.toString());
// 3-2. ?(바인드변수) 위치에 값 설정 (매칭, 대입)
pstmt.setString(1, vo.getId());
pstmt.setString(2, vo.getName());
pstmt.setInt(3, vo.getKor());
pstmt.setInt(4, vo.getEng());
pstmt.setInt(5, vo.getMath());
pstmt.setInt(6, vo.getTot());
pstmt.setDouble(7, vo.getAvg());
// 3-3. SQL 실행 요청 처리 (INSERT, UPDATE, DELETE는 executeUpdate())
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt);
}
return result;
}
//-----------------------------------------------------------
// (실습) UPDATE : VO 받아서 수정처리 - update(vo) - int
// - 수정항목 : 국어,영어,수학,총점,평균
// (실습) DELETE : id 받아서 삭제 처리 - delete(id) - int
// (실습) DELETE : VO 받아서 삭제처리 - delete(vo) - int
// (실습) SELECT : 전체데이터 조회 - selectAll() - List<StudentVO>
// (실습) SELECT : 이름으로 검색 - selectList(name) - List<StudentVO>
// (실습) UPDATE : ID,NAME 받아서 이름 수정 처리 - updateName(id,name) : int
// (실습) UPDATE : VO 받아서 이름 수정 처리 - updateName(vo) : int
// (실습) UPDATE : 모든 데이터 총점, 평균 계산처리 - computeTotAvg() : int
// (실습) SELECT : 전체 데이터 건수 selectCount() : int
//-----------------------------------------------------------
// (실습) UPDATE : VO 받아서 수정처리 - update(vo) - int
// - 수정항목 : 국어,영어,수학,총점,평균
public int update(StudentVO vo) {
int result = 0;
try {
// 2.
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3-1
StringBuilder sql = new StringBuilder();
sql.append(" UPDATE STUDENT ");
sql.append(" SET KOR = ? ");
sql.append(" , ENG = ? ");
sql.append(" , MATH = ? ");
sql.append(" , TOT = ? ");
sql.append(" , AVG = ? ");
sql.append(" WHERE ID = ? ");
pstmt = conn.prepareStatement(sql.toString());
// 3-2
int idx = 1;
pstmt.setInt(idx++, vo.getKor());
pstmt.setInt(idx++, vo.getEng());
pstmt.setInt(idx++, vo.getMath());
pstmt.setInt(idx++, vo.getTot());
pstmt.setDouble(idx++, vo.getAvg());
pstmt.setString(idx++, vo.getId());
//3-3
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt);
}
return result;
}
// (실습) DELETE : id 받아서 삭제 처리 - delete(id) - int
public int delete(String id) {
int result = 0;
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
String sql = " DELETE FROM STUDENT WHERE ID = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt);
}
return result;
}
// (실습) DELETE : VO 받아서 삭제처리 - delete(vo) - int
public int delete(StudentVO vo) {
int result = 0;
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
String sql = " DELETE FROM STUDENT WHERE ID = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getId());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt);
}
return result;
}
// (실습) SELECT : 전체데이터 조회 - selectAll() - List<StudentVO>
public List<StudentVO> selectAll(){
List<StudentVO> list = new ArrayList<StudentVO>();
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
StringBuilder sql = new StringBuilder();
sql.append("SELECT ID,NAME,KOR,ENG,MATH,TOT,AVG ");
sql.append(" FROM STUDENT ");
//sql.append(" WHERE ID = ? ");
pstmt = conn.prepareStatement(sql.toString());
//pstmt.setString(1, id);
rs = pstmt.executeQuery();
while (rs.next()) {
// StudentVO vo = new StudentVO();
// vo.setId(rs.getString("ID"));
// vo.setName(rs.getString("NAME"));
// vo.setKor(rs.getInt("KOR"));
// vo.setEng(rs.getInt("ENG"));
// vo.setMath(rs.getInt("MATH"));
// vo.setTot(rs.getInt("TOT"));
// vo.setAvg(rs.getDouble("AVG"));
StudentVO vo = new StudentVO(
rs.getString("ID"),
rs.getString("NAME"),
rs.getInt("KOR"),
rs.getInt("ENG"),
rs.getInt("MATH"),
rs.getInt("TOT"),
rs.getDouble("AVG"));
list.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
return list;
}
// (실습) SELECT : 이름으로 검색 - selectList(name) - List<StudentVO>
public List<StudentVO> selectList(String name) {
List<StudentVO> list = new ArrayList<StudentVO>();
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
StringBuilder sql = new StringBuilder();
sql.append("SELECT ID,NAME,KOR,ENG,MATH,TOT,AVG ");
sql.append(" FROM STUDENT ");
sql.append(" WHERE NAME LIKE ? ");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, name);
rs = pstmt.executeQuery();
while (rs.next()) {
StudentVO vo = new StudentVO(
rs.getString("ID"),
rs.getString("NAME"),
rs.getInt("KOR"),
rs.getInt("ENG"),
rs.getInt("MATH"),
rs.getInt("TOT"),
rs.getDouble("AVG"));
list.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
return list;
}
// (실습) UPDATE : ID,NAME 받아서 이름 수정 처리 - updateName(id,name) : int
public int updateName(String id, String name) {
int result = 0;
StudentVO vo = new StudentVO();
try {
// 2.
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3-1
StringBuilder sql = new StringBuilder();
sql.append(" UPDATE STUDENT ");
sql.append(" SET NAME = ? ");
// sql.append(" , KOR = ? ");
// sql.append(" , ENG = ? ");
// sql.append(" , MATH = ? ");
// sql.append(" , TOT = ? ");
// sql.append(" , AVG = ? ");
sql.append(" WHERE ID = ? ");
pstmt = conn.prepareStatement(sql.toString());
// 3-2
int idx = 1;
pstmt.setString(idx++, name);
// pstmt.setInt(idx++, vo.getKor());
// pstmt.setInt(idx++, vo.getEng());
// pstmt.setInt(idx++, vo.getMath());
// pstmt.setInt(idx++, vo.getTot());
// pstmt.setDouble(idx++, vo.getAvg());
pstmt.setString(idx++, id);
//3-3
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt);
}
return result;
}
}
StudentDao_Test 클래스
package com.mystudy.student.dao;
import java.util.*;
import com.mystudy.student.vo.StudentVO;
public class StudentDao_Test {
public static void main(String[] args) {
StudentDAO dao = new StudentDAO();
String id ="2023001";
StudentVO stu1 = dao.selectOne(id);
System.out.println("stu1 : " + stu1);
System.out.println("--- selectOne(vo) ---");
StudentVO stu2 = new StudentVO("2023002", "",0,0,0);
System.out.println("전달한 vo : " + stu2);
StudentVO student = dao.selectOne(stu2);
System.out.println("student : " + student);
// System.out.println("--- insert(vo) ---");
// student = new StudentVO("2023005", "1테스트5", 82, 90, 100);
// System.out.println("입력할 학생 : " + student);
// int result = dao.insert(student);
// System.out.println("입력결과(건수) : " + result);
// System.out.println("-----------");
// System.out.println("DB데이터 : " + dao.selectOne(student.getId()));
System.out.println("update 실습!!!!!!!!!!!!!!!!!");
StudentVO student2 = new StudentVO("2023001", "싼쵸",1,2,3);
dao.update(student2);
System.out.println("DB데이터 : " + dao.selectOne(student.getId()));
// System.out.println("delete 실습!!!!!!!!!!!!!!!!!");
// int result = dao.delete("2023222");
// System.out.println("입력결과(건수) : " + result);
System.out.println("selectAll 실습!!!!!!!!!!!!!!!!!");
List<StudentVO> list = dao.selectAll();
System.out.println("ID"+"\t"+"이름"+"\t"+"총점"+"\t"+"평균"+"\t");
System.out.println("============================================");
for (StudentVO vo : list) {
System.out.println(vo.getId() +"\t"+ vo.getName() + "\t"
+ vo.getTot() + "\t" + vo.getAvg());
}
System.out.println("\n selectList 실습!!!!!!!!!!!!!!!!!");
list = dao.selectList("%테스트%");
for (StudentVO vo : list) {
System.out.println(vo.getId() +"\t"+ vo.getName() + "\t"
+ vo.getTot() + "\t" + vo.getAvg());
}
System.out.println(dao.updateName("2023005", "1테스트111"));
}
}
StudentDAO.java
0.01MB
StudentDao_Test.java
0.00MB
StudentVO.java
0.00MB
내일은 정처기 시험!
다음주부터 일주일은 프로젝트!
'코딩 > DB' 카테고리의 다른 글
MariaDB 설치 (0) | 2023.07.23 |
---|---|
MySQL 설치하기 + 스프링부트 MySQL 연결 설정하기 (0) | 2023.07.17 |
Day36_230216_ORACLE (시퀀스), JDBC (0) | 2023.02.16 |
Day35_230215_ORACLE (프로시저, 함수, 커서, 트리거) (0) | 2023.02.15 |
Day34_230214_ORACLE (VIEW, INDEX, FK, CASCADE, 프로시저) (0) | 2023.02.14 |