40.JDBC(SRP)

Jan 19, 2024
40.JDBC(SRP)
๐Ÿ’ก
๋ชจ๋“ˆ:์ฝ”๋“œ,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ,๋“ฑ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๋“ค์„ ๋ฌถ์–ด์„œ ๊ตฌํ˜„ ํ•˜๋Š” ๋‹จ์œ„๋กœ ์ฆ‰ ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์–˜๊ธฐํ•œ๋‹ค. SRP :๊ฐ ๋ชจ๋“ˆ(๋ ˆ์ด์–ด)๋งˆ๋‹ค ์ตœ์†Œํ•œ์˜ ์ฑ…์ž„๋งŒ ๋ถ€์—ฌํ•˜๊ฒŒํ•œ๋‹ค. ๋ฉ”์ธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํ•  ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“ ๋‹ค. ๋” ๊ตฌ์ฒด์ ์œผ๋กœ jdbc์— ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•˜๋ฉด main์ฝ”๋“œ, DAO์ฝ”๋“œ,DB์— ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ ๊ฐ์ž๋ฅผ ๋ชจ๋“ˆํ™” ์‹œ์ผœ์„œ ๋งŒ๋“ ๋‹ค. DAO(Data Acceess Object) :๋งŒ๊ตญ ๊ณตํ†ต ์—‘์„ธ์Šค ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์กฐ์ž‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. to string() :๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ controller: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ๋ถ„๋น„ ์‹œํ‚ค๋Š” ์• (์‹๋ณ„์ž ์‚ฌ์šฉ)
 
srp
main ํŒŒ์ผ
import dao.BankDAO; import db.DBConnection; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner; public class BankApp { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("์‚ญ์ œํ•  ๊ณ„์ขŒ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”: "); int number = sc.nextInt(); BankDAO dao = new BankDAO(); int result = dao.deleteByNumber(number); if (result == 1){ System.out.println("์‚ญ์ œ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค."); }else{ System.out.println("์‚ญ์ œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค"); } } }
DAOํŒŒ์ผ
package dao; import db.DBConnection; import model.Account; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; /** * DAO -Data Access Object * SRP - ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™ */ public class BankDAO { public int deleteByNumber(int number) { Connection conn = DBConnection.getInstance(); try { String sql = "delete from account_tb where number = ?"; PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„ํผ ์‚ฌ์šฉ ์ฆ‰ ๋ฒ„ํผ ๋‹ฌ๊ธฐ // parameterIndex๋Š” ์ฟผ๋ฆฌ๋งˆ๋‹ค์— ๋ฌผ์Œํ‘œ ์ˆœ์„œ // ์‘๋‹ต ๊ฒฐ๊ณผ ์š”์ณฅ ๋ฐ›์€ ํ–‰ ์ด ๊ฒฐ๊ณผ๋กœ ์˜จ๋‹ค. pstmt.setInt(1, number); int num = pstmt.executeUpdate();//ํ”Œ๋Ÿฌ์‰ฌ ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ return num; } catch (Exception e) { e.printStackTrace(); } return -1; } public int insert(String password, int balnace) { Connection conn = DBConnection.getInstance(); try { String sql = "insert into account_tb(password, balance, created_at) values(?,?,now())"; PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„ํผ ์‚ฌ์šฉ ์ฆ‰ ๋ฒ„ํผ ๋‹ฌ๊ธฐ // parameterIndex๋Š” ์ฟผ๋ฆฌ๋งˆ๋‹ค์— ๋ฌผ์Œํ‘œ ์ˆœ์„œ // ์‘๋‹ต ๊ฒฐ๊ณผ ์š”์ณฅ ๋ฐ›์€ ํ–‰ ์ด ๊ฒฐ๊ณผ๋กœ ์˜จ๋‹ค. pstmt.setString(1, password); pstmt.setInt(2, balnace); int num = pstmt.executeUpdate();//ํ”Œ๋Ÿฌ์‰ฌ ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ return num; } catch (Exception e) { e.printStackTrace(); } return -1; } public int updateByNumber(int balance, int number) { Connection conn = DBConnection.getInstance(); try { String sql = "update account_tb set balance = ? where number = ?"; PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„ํผ ์‚ฌ์šฉ ์ฆ‰ ๋ฒ„ํผ ๋‹ฌ๊ธฐ // parameterIndex๋Š” ์ฟผ๋ฆฌ๋งˆ๋‹ค์— ๋ฌผ์Œํ‘œ ์ˆœ์„œ // ์‘๋‹ต ๊ฒฐ๊ณผ ์š”์ณฅ ๋ฐ›์€ ํ–‰ ์ด ๊ฒฐ๊ณผ๋กœ ์˜จ๋‹ค. pstmt.setInt(1, balance); pstmt.setInt(2, number); int num = pstmt.executeUpdate();//ํ”Œ๋Ÿฌ์‰ฌ ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ return num; } catch (Exception e) { e.printStackTrace(); } return -1; } public Account selectByNumber(int number) { Connection conn = DBConnection.getInstance(); try { String sql = "select * from account_tb where number = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, number); //select ๊ฒฐ๊ณผ๋Š” ํ…Œ์ด๋ธ”๋กœ ๋ฐ›๊ฒŒ ์„ค์ • ResultSet rs = pstmt.executeQuery(); //rs = ํ…Œ์ด๋ธ”ํ˜•ํ…Œ์— ๋ฐ์ดํ„ฐ boolean isRow = rs.next(); //์ปค์„œ ํ•œ์นธ ๋‚ด๋ฆฌ๊ธฐ //์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ์นผ๋Ÿผ๋งŒ ๊ณจ๋ผ ์ถœ๋ ฅํ•˜๊ธฐ //๋ฐ•์Šค ๋งŒ๋“ค๊ธฐ if (rs.next()){ Account account = new Account( rs.getInt("number"), rs.getString("password"), rs.getInt("balance"), rs.getTimestamp("created_at") ); return account; } } catch (Exception e) { e.printStackTrace(); } return null; } //์ „์ฒด ์กฐํšŒ ํ•  ๋•Œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์กฐํšŒ public List<Account> selectAll(){ Connection conn = DBConnection.getInstance(); try { String sql = "select * from account_tb order by number desc";//order by number desc ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ณ€๊ฒฝ PreparedStatement pstmt = conn.prepareStatement(sql); //select ๊ฒฐ๊ณผ๋Š” ํ…Œ์ด๋ธ”๋กœ ๋ฐ›๊ฒŒ ์„ค์ • ResultSet rs = pstmt.executeQuery(); //rs = ํ…Œ์ด๋ธ”ํ˜•ํ…Œ์— ๋ฐ์ดํ„ฐ //์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ์นผ๋Ÿผ๋งŒ ๊ณจ๋ผ ์ถœ๋ ฅํ•˜๊ธฐ //๋ฐ•์Šค ๋งŒ๋“ค๊ธฐ List<Account> accountList = new ArrayList<>(); while (rs.next()){ Account account = new Account( rs.getInt("number"), rs.getString("password"), rs.getInt("balance"), rs.getTimestamp("created_at") ); accountList.add(account); } return accountList; } catch (Exception e) { e.printStackTrace(); } return null; } }
DB์—ฐ๊ฒฐ ํŒŒ์ผ
package db; import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { public static Connection getInstance() { //์˜์ผ“ String username = "root"; String password = "1234"; String url = "jdbc:mariadb://localhost:3306/cosdb"; //ํ”„๋กœํ† ์ฝœ//ip์ฃผ์†Œ:ํฌํŠธ๋ฒˆํ˜ธ/ํ…Œ์ด๋ธ” ๋ช… // ํ”„๋กœํ† ์ฝœ์ด ์ ์šฉ๋œ ์†Œ์ผ“ try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println("db connect succes"); return conn; } catch (Exception e) { e.printStackTrace(); } return null; } }
DB์— SELECTํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ
package model; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.sql.Timestamp; //๋ชจ๋“  ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ ๋‹ค. /* *DB์— Slect ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ์˜ค๋ธŒ์ ํŠธ */ @ToString @AllArgsConstructor //๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๋Š” ์นœ๊ตฌ๋“ค์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” lobok ๋ผ์ด๋ธŒ๋ฒ„๋ฆฌ์ค‘ ํ•˜๋‚˜ @Getter public class Account { private int number; private String passworld; private int balance; //java.sql์˜ TimeSTAMP //์นด๋ฉœํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉํ•˜๊ธฐ private Timestamp createdAt; }
TEST ํŒŒ์ผ
๋ชจ๋“ˆ
 

jdbc๋งŒ๋“ค๊ธฐ

์‹ค์Šต
 
์›น - ๋ฏธ๋“ค์›จ์–ด -DB
์›น์—์„œ DB์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ ์š”์ฒญ์„ ํˆด์„(์ž๋ฐ”) ํ†ตํ•ด์„œ ํ•˜๋Š”๋ฐ ์ด๋•Œ ์‹๋ณ„์ž๋กœ ์š”์ฒญ์„ ํ•œ๋‹ค.
PUT UPDATE
WRITE์š”์ฒญ์˜ ์‘๋‹ต์€ ๋ฐ”๋””๊ฐ€ ํ•„์š”์—†๋‹ค OKAY๋งŒ ์ฃผ๋ฉด๋œ๋‹ค.
 
GET๊ณผ DELTE๋Š” HTTP์— ํ—ค๋”๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.
๊ทธ ์™ธ POSTํ•˜๊ณ  PUT์€ ๋ฐ”๋””๋ฐ์ดํ„ฐ๊นŒ์ง€ ํ•„์š”ํ•˜๋‹ค.
๊ทธ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•œ๋ฐ ๋ฐ”๋””์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋ฆฌ์ŠคํŽ€์Šค ๋ฐ”๋””(์‘๋‹ต ๋ฐ”๋””)
 
๋งˆ์ž„ํƒ€์ž…
(์ „์„ธ๊ณ„ ํ‘œ์ค€)
x-www-from-urlencoded
password=1234&balance=1000

๐Ÿ’ก
DB์—์„œ ํ”„๋กœ์ ์…˜:์ปฌ๋Ÿผ์„ ๊ณจ๋ผ๋‚ด๋Š”๊ฒƒ
 
 
 
Share article

p4rksk