열심히 끝까지
디바이스 융합 자바(Java) day21 - 학생부 with MVC, Oracle 본문
디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)
디바이스 융합 자바(Java) day21 - 학생부 with MVC, Oracle
노유림 2022. 7. 5. 17:13>> StudentVO
package model;
public class StudentVO {
private int sid;
private String name;
private int score;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "StudentVO [sid=" + sid + ", name=" + name + ", score=" + score + "]";
}
}
>> StudentDAO
pstmt.executeUpdate();
>> CUD insert() update() delete()
>> 이 세개를 테이블에 업데이트 할 때 사용
pstmt.executeQuery();
>> R selectOne() selectAll()
>> R을 불러올 때 사용
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class StudentDAO {
// int pk;
// ArrayList<> datas 필요했지만 이제 필요없당!!
Connection conn;
// Statement stmt;
PreparedStatement pstmt;
// statement의 자식 >> stmt의 향상된 버전이다!
final String sql_insert ="INSERT INTO STUDENT VALUES((SELECT NVL(MAX(SID),0)+1 FROM STUDENT),?,?)";
final String sql_delete ="DELETE FROM STUDENT WHERE SID=?";
final String sql_update ="UPDATE STUDENT SET SCORE=? WHERE SID=?";
final String sql_selectAll ="SELECT * FROM STUDENT WHERE NAME LIKE '%'||?||'%' ORDER BY SID ASC";
// JDBC에서는 이름을 검색할 때에는 '%'||?||'%'로 해야한다.
final String sql_selectOne ="SELECT * FROM STUDENT WHERE SID=?";
public boolean insertStudent(StudentVO vo) {
conn = JDBCUtil.connect();
try {
// stmt = conn.createStatement();
pstmt = conn.prepareStatement(sql_insert);
// stmt -> 일단 만들고, 직접 코드를 메서드의 인자로 전달
// pstmt -> 만들 당시에 쿼리문(SQL문)을 전달하고, 이후의 값을 메서드의 인자로 전달
// stmt.executeQuery(driverName);
// ?위치에 내가 원하는 값을 전달하는 방법 >> pstmt 사용
/*
pstmt.executeQuery(); // R selectOne() selectAll()
pstmt.executeUpdate(); // CUD insert() update() delete()
*/
pstmt.setString(1, vo.getName());
// 1은 ?의 몇번째 자리
// ? 카운팅은 1부터 센다!
pstmt.setInt(2, vo.getScore());
int res = pstmt.executeUpdate();
if(res == 0) {
return false;
}
System.out.println(" 로그 : insertStudent() 완료");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true;
}
public boolean updateStudent(StudentVO vo) {
conn=JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_update);
pstmt.setInt(1, vo.getScore());
pstmt.setInt(2, vo.getSid());
int res = pstmt.executeUpdate();
if(res == 0) {
return false;
}
}catch(SQLException e) {
e.printStackTrace();
return false;
}finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true;
}
public boolean deleteStudent(StudentVO vo) {
conn=JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_delete);
pstmt.setInt(1, vo.getSid());
int res = pstmt.executeUpdate();
if(res == 0) {
return false;
}
}catch(SQLException e) {
e.printStackTrace();
return false;
}finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true;
}
public StudentVO selectOne(StudentVO vo) {
conn=JDBCUtil.connect();
ResultSet rs = null; // scope 공부
try {
pstmt = conn.prepareStatement(sql_selectOne);
pstmt.setInt(1, vo.getSid());
rs = pstmt.executeQuery();
if(rs.next()) {
StudentVO data = new StudentVO();
data.setName(rs.getString("NAME"));
data.setScore(rs.getInt("SCORE"));
data.setSid(rs.getInt("SID"));
return data;
}
else {
return null;
}
}catch(SQLException e) {
e.printStackTrace();
return null;
}finally {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtil.disconnect(pstmt, conn);
}
}
public ArrayList<StudentVO> selectAll(StudentVO vo){
ArrayList<StudentVO> datas= new ArrayList<StudentVO>();
conn=JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_selectAll);
pstmt.setString(1, vo.getName());
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
StudentVO data = new StudentVO();// vo 만들어서
// vo에 setter
data.setName(rs.getString("NAME"));
data.setSid(rs.getInt("SID"));
data.setScore(rs.getInt("SCORE"));
// vo를
datas.add(data);
}
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.disconnect(pstmt, conn);
}
return datas;
}
}
>> Test
- JDBCUtil
1) C R R U D 에서 많이 쓰인다
2) DAO가 증가하면 또 CRUD도 증가됨 -> ...
>> 커넥션 연결하고 해제하는 것이 계속 되자..
>> CTRL + C / CTRL + V
: 코드 재사용 중복 코드 최소화 -> 모듈화 Util 클래스 생성!
- Util류 클래스
: static 로직을 담아놓는 클래스라서..
package main;
import java.util.ArrayList;
import java.util.Scanner;
import model.StudentDAO;
import model.StudentVO;
// C
// V
// Client
public class Test {
public static void main(String[] args) {
StudentDAO sDAO = new StudentDAO();
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println();
System.out.println("1.추가 2.목록 3.검색 4.변경 5.삭제 6.종료 7.이름검색");
System.out.print("입력) ");
int act = sc.nextInt();
if(act==1) {
System.out.print("학생이름입력) ");
String name = sc.next();
System.out.print("학생성적입력) ");
int score = sc.nextInt();
// [V]
StudentVO vo = new StudentVO();
vo.setName(name);
vo.setScore(score);
// [C] - 1
if(sDAO.insertStudent(vo)) {
System.out.println("학생추가 완료되었습니다.");
}
else {
System.out.println("학생추가 실패했습니다...");
}
// [C] - 2 vo값 sDAO에게 보내주기
}
else if(act==2) {
StudentVO vo = new StudentVO();
ArrayList<StudentVO> datas = sDAO.selectAll(vo);
if(datas.size()==0) {
System.out.println("출력할 학생데이터가 없습니다...");
continue;
}
System.out.println("===학생 목록===");
for(StudentVO data : datas) {
System.out.println(data);
}
}
else if(act==3) {
// selectOne() 써볼까?
// -> 2개 이상이면 절대 안된다!
// 검색할 때 pk로만 검색 가능!
System.out.print("검색할 학생 번호 입력 : ");
int sid = sc.nextInt();
// [V]
StudentVO vo = new StudentVO();
vo.setSid(sid);
vo = sDAO.selectOne(vo);
if(vo==null) {
System.out.println("검색 실패..");
continue;
}
System.out.println(vo);
}
else if(act==4) {
StudentVO vo = new StudentVO();
System.out.print("점수를 바꿀 학생번호 입력 : ");
int sid = sc.nextInt();
System.out.print("바뀐 점수 : ");
int score = sc.nextInt();
vo.setSid(sid);
vo.setScore(score);
if(sDAO.updateStudent(vo)) {
System.out.println("성적이 업데이트 되었습니다");
}
else {
System.out.println("성적 업데이트를 실패하였습니다...");
}
}
else if(act==5) {
System.out.print("삭제할 학생번호 입력 : ");
int sid = sc.nextInt();
// [V]
StudentVO vo = new StudentVO();
vo.setSid(sid);
// [C] - 1
if(sDAO.deleteStudent(vo)) {
System.out.println("학생삭제 완료되었습니다.");
}
else {
System.out.println("학생삭제 실패했습니다...");
}
}
else if(act==6) {
break;
}
else if(act==7) {
// selectAll()
System.out.print("검색어 입력 : ");
String str = sc.next();
//[V]
StudentVO vo = new StudentVO();
vo.setName(str);
ArrayList<StudentVO> datas = sDAO.selectAll(vo);
//[C]
if(datas.size()==0) {
System.out.println("검색결과없음...");
continue;
}
System.out.println("===학생목록===");
for(StudentVO data : datas) {
System.out.println(data);
}
}
}
}
}
>> JDBCUtil
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCUtil {
// JDBCUtil
// 1) C R R U D 에서 많이 쓰인다
// 2) DAO가 증가하면 또 CRUD도 증가됨 -> ...
// >> 커넥션 연결하고 해제하는 것이 계속 되자..
// >> CTRL + C / CTRL + V
// : 코드 재사용 중복 코드 최소화 -> 모듈화 Util 클래스 생성!
// Util류 클래스
// : static 로직을 담아놓는 클래스라서..
static final String driverName = "oracle.jdbc.driver.OracleDriver";
static final String url = "jdbc:oracle:thin:@localhost:1521:xe";
static final String user = "ryo";
static final String passwd = "1234";
// conn 객체 반환
public static Connection connect() { // Connection 확보 로직
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, user, passwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
// conn 객체 받아서 연결해제
public static void disconnect(PreparedStatement pstmt, Connection conn) {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day23 - 웹 크롤링 (0) | 2022.07.13 |
---|---|
디바이스 융합 자바(Java) day22 - 외래키,깃허브,비즈니스메서드(핵심관심,횡단관심(공통로직)),JDBC이용한 홈페이지 제작 (0) | 2022.07.12 |
디바이스 융합 자바(Java) day20 - 오라클(GROUP BY절,HAVING절,실행순서,페이징처리,조인(JOIN)-이퀄조인),자바&데이터베이스 연결 및 실습(추가,삭제,선택,목록출력) (0) | 2022.07.04 |
디바이스 융합 자바(Java) day19 - 오라클(SQL)설치 및 실행,생성,삽입 (0) | 2022.07.01 |
디바이스 융합 자바(Java) day18 - [재코딩] 자판기 with MVC (0) | 2022.06.30 |