-
CRUD 클래스 생성하기JDBC 2022. 2. 3. 18:32
**유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.
우리는 여태 앞에서 가장 기본적인 4가지인 SELECT, INSERT, UPDATE, DELETE를 해봤는데 이 것들을 CRUD라고 표현한다.
C - INSERT (CREATE 작업)
R - RETRIEVE (반환받는것)
U - UPDATE
D - DELETE
이다.
이것들을 다 다른 클래스로 만들었기때문에 재사용이 불가능했다.
재사용이 가능하게 하려면 메인함수에서 떼어내서 별도의 함수로 존재해야한다.
별로의 NOTICESERVICE를 만들고 거기에 CRUD를 모아서 만드는 것을 배워보자.
noticeService라는 클래스를 생성해서
List함수 안에 처음에 만들었던 SELECT 코드를 복사해서 붙여넣기 해준다 .
public class NoticeService { //목록반환이 list를 통해서 어떤 걸 반환 할 것인지 getList를 통해서 반환하겠디 public List<?> getList() { String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql = "SELECT * FROM NOTICE WHERE HIT >=10"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url,"sys as sysdba", "Ew170916!!"); Statement st = con. createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()) { //다음으로 넘어가기 int id = rs.getInt("ID"); String title = rs.getString("TITLE");//title이라는 컬럼명을 조회 String writerid = rs.getString("WRITER_ID"); Date regDate = rs.getDate("REGDATE"); String content = rs.getString("CONTENT"); int hit = rs.getInt("HIT"); //System.out.println(title); //제대로 가져와지는지 출력문으로 확인해보기 System.out.printf("id:%d, title:%s, writerid:%s,regDate:%s,content:%s,hit:%d\n" ,id,title,writerid,regDate,content,hit); } rs.close(); st.close(); con.close(); } return ?; }이때 가지고 있는 속성이 6개 이다.(ID,TITLE,WRITERID,REGDATE,CONTENT,HIT)
이 6개의 컬럼을 한번에 담을 수 있는 더 큰 그릇이 필요하게 된다.
그럼 NOTICE라는 그릇을 추가 해 주자.
package com.jae.app.entity; import java.util.Date; public class Notice { //값을 담을 수 있는 좀 더 그룹화 된 클래스 //셀렉트 시 사용했던 코드를 복사 붙여넣기 해준다. //이 컬럼들이 가지고 있는 기본 속성만 정의 하는 것이기때문에 rs~~는 지워준다. //1.이 구조가 노출 되지 않도록 private 선언 private int id; private String title;//title이라는 컬럼명을 조회 private String writerid; private Date regDate; private String content; private int hit; //이 녀석들의 가진 기본적인 데이터값을 채울 떄에 여러가지 용도로 초기화를 하면서 값을 채울 수 있어야 하기 때문에 //3.생성자 하나 만들어주기 public Notice() {} //4.이 생성자 외에 필드를 가진 생성자도 필요하니깐 //source->~~using Fields클릭 public Notice(int id, String title, String writerid, Date regDate, String content, int hit) { //super(); this.id = id; this.title = title; this.writerid = writerid; this.regDate = regDate; this.content = content; this.hit = hit; } //2.private선언 후 이 값들 세팅 하기 위해 getter setter 추가 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getWriterid() { return writerid; } public void setWriterid(String writerid) { this.writerid = writerid; } public Date getRegDate() { return regDate; } public void setRegDate(Date regDate) { this.regDate = regDate; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public int getHit() { return hit; } public void setHit(int hit) { this.hit = hit; } }그런 다음 다시 noticeService로 넘어와서
package com.jae.app.service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.jae.app.entity.Notice; public class NoticeService { //목록반환이 list를 통해서 어떤 걸 반환 할 것인지 getList를 통해서 반환하겠디 //notice이름으로 반환하겠따 하고 써주는 것 import 해주기 public List<Notice> getList(){ String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql = "SELECT * FROM NOTICE WHERE HIT >=10"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url,"sys as sysdba", "Ew170916!!"); Statement st = con. createStatement(); ResultSet rs = st.executeQuery(sql); //반환하기 위한 준비 List<Notice> list = new ArrayList<Notice>(); while(rs.next()) { //다음으로 넘어가기 int id = rs.getInt("ID"); String title = rs.getString("TITLE");//title이라는 컬럼명을 조회 String writerId = rs.getString("WRITER_ID"); Date regDate = rs.getDate("REGDATE"); String content = rs.getString("CONTENT"); int hit = rs.getInt("HIT"); //1.담은 값을 notice라는 객체를 만들면서 초기화 하는 녀석을 만들어준다. //객체를 만들었다. 이것을 반환하기 위해서는 (위로 올라가서 List에) Notice notice = new Notice( id, title, writerId, regDate, content, hit ); list.add(notice); //반환 될 떄마다 리스트에 추가 되는 것 } rs.close(); st.close(); con.close(); return list;//close가 끝나면 list반 } }여기까지 하고 나면 19번줄부터 빨간줄이 생기는 애들이 있는데 예외처리를 해야하는 애들이다.
여기서는 그냥 다 던져버리자
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"sys as sysdba", "");이 두개를 예외처리 해 버리면 빨간줄은 사라질것이다.
그럼 다음 세가지 함수를 만들어 주자
//세가지 함수를 만들어 줄 것이다. //반환 타입은 int. 데이터는 notice의 값을 넘겨 받아서 구현 public int insert(Notice notice) { return 0; //기본 반환값 설정 } public int update(Notice notice) { return 0; //기본 반환값 설정 } //삭제 할 때는 notice전체말고 id만 넣어주어도 된다. public int delete(int id) { return 0; //기본 반환값 설정 }저번에 만들었던 insert 코드를 복사해서 insert함수에 붙여넣기해준다.
//반환 타입은 int. 데이터는 notice의 값을 넘겨 받아서 구현 public int insert(Notice notice) throws SQLException, ClassNotFoundException { String title ="TEST3"; String writerId="BANDAL"; String content = "haha"; String files = "file03"; String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql = "INSERT INTO notice (" + " title," + " writer_id," + " content," + " files" + ") VALUES (?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url,"sys as sysdba", "Ew170916!!"); //Statement st = con. createStatement(); //ResultSet rs = st.executeQuery(sql); insert/update/delete에는 사용 하지 않는다. PreparedStatement st = con.prepareStatement(sql); st.setString(1, title); st.setString(2, writerId); st.setString(3, content); st.setString(4, files); int result = st.executeUpdate(); st.close(); con.close(); return result; //위에 보면 원래 반환 값으로 result를 가지고 있었기 때문에 여기서도 //result로 반환 }여기서도 빨간줄은 예외처리 부분이므로 던져버리자
값을 담았던 부분은 notice로 가져 올거기때문에
String title = notice.getTitle();
String writerId= notice.getWriterId();
String content = notice.getContent();
String files = notice.getFiles();로 변경 해준다.
그 다음 update문을 복사해와서
public int update(Notice notice) throws ClassNotFoundException, SQLException { String title = notice.getTitle(); String content = notice.getContent(); String files = notice.getFiles(); int id = notice.getId(); String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql = "UPDATE NOTICE " + "SET " + " TITLE =?," + " CONTENT = ?," + " FILES = ?" + "WHERE ID = ?"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url,"sys as sysdba", "Ew170916!!"); //Statement st = con. createStatement(); //ResultSet rs = st.executeQuery(sql); insert/update/delete에는 사용 하지 않는다. PreparedStatement st = con.prepareStatement(sql); st.setString(1, title); st.setString(2, content); st.setString(3, files); st.setInt(4, id); int result = st.executeUpdate(); System.out.println(result); st.close(); con.close(); return 0; //기본 반환값 설정 }예외처리는 던져준다.
다음은 delete
public int delete(int id) throws ClassNotFoundException, SQLException { //여기서 인자로 받고 있으니깐 //int id = 3; 여기 주석 처리 해준다. String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql = "DELETE NOTICE WHERE ID = ?"; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url,"sys as sysdba", "Ew170916!!"); //Statement st = con. createStatement(); //ResultSet rs = st.executeQuery(sql); insert/update/delete에는 사용 하지 않는다. PreparedStatement st = con.prepareStatement(sql); st.setInt(1, id); int result = st.executeUpdate(); st.close(); con.close(); return 0; //기본 반환값 설정 } }여기서도 예외처리는 다 던져주기
'JDBC' 카테고리의 다른 글
JDBC 페이징 쿼리 (0) 2022.02.03 JDBC 콘솔로 간단한 게시판 목록 만들어보기 (0) 2022.02.03 JDBC 데이터 삭제하기 (0) 2022.02.03 JDBC 데이터 수정하기 (0) 2022.02.03 JDBC를 이용해서 쿼리 입력하는 코드 (0) 2022.02.03