μ²΄ν¬ μμΈμ μΈν°νμ΄μ€
μλΉμ€ κ³μΈ΅μ κ°κΈμ νΉμ ꡬν κΈ°μ μ μμ‘΄νμ§ μκ³ , μμνκ² μ μ§νλ κ²μ΄ μ’λ€.
μ΄λ κ² νλ €λ©΄ μμΈμ λν μμ‘΄λ ν¨κ» ν΄κ²°ν΄μΌνλ€.
μλ₯Ό λ€μ΄μ μλΉμ€κ° μ²λ¦¬ν μ μλ SQLException μ λν μμ‘΄μ μ κ±°νλ €λ©΄ μ΄λ»κ² ν΄μΌν κΉ?
μλΉμ€κ° μ²λ¦¬ν μ μμΌλ―λ‘ λ¦¬ν¬μ§ν λ¦¬κ° λμ§λ SQLException μ²΄ν¬ μμΈλ₯Ό λ°νμ μμΈλ‘ μ νν΄μ μλΉμ€ κ³μΈ΅μ λμ§μ.
μ΄λ κ² νλ©΄ μλΉμ€ κ³μΈ΅μ΄ ν΄λΉ μμΈλ₯Ό 무μν μ μκΈ° λλ¬Έμ,
νΉμ ꡬν κΈ°μ μ μμ‘΄νλ λΆλΆμ μ κ±°νκ³ μλΉμ€ κ³μΈ΅μ μμνκ² μ μ§ν μ μλ€.
μ²΄ν¬ μμΈ μ½λμ μΈν°νμ΄μ€ λμ
public class MemberRepositoryV3 implements MemberRepositoryEx {
public Member save(Member member) throws SQLException {
String sql = "insert into member(member_id, money) values(?, ?)";
} }
μΈν°νμ΄μ€μ ꡬνμ²΄κ° μ²΄ν¬ μμΈλ₯Ό λμ§λ €λ©΄,
public interface MemberRepositoryEx {
Member save(Member member) throws SQLException;
Member findById(String memberId) throws SQLException;
void update(String memberId, int money) throws SQLException;
void delete(String memberId) throws SQLException;
}
μΈν°νμ΄μ€ λ©μλμ λ¨Όμ μ²΄ν¬ μμΈλ₯Ό λμ§λ λΆλΆμ΄ μ μΈ λμ΄ μμ΄μΌ νλ€.
κ·ΈλμΌ κ΅¬ν ν΄λμ€μ λ©μλλ μ²΄ν¬ μμΈλ₯Ό λμ§ μ μλ€.
νμ§λ§ μ΄κ²μ μ°λ¦¬κ° μνλ μμν μΈν°νμ΄μ€κ° μλλ€. (SQLException - JDBC κΈ°μ μ μ’ μμ μΈ μΈν°νμ΄μ€)
ν₯ν JDBCκ° μλ λ€λ₯Έ κΈ°μ λ‘ λ³κ²½νλ€λ©΄ μΈν°νμ΄μ€ μ체λ₯Ό λ³κ²½ν΄μΌ νλ€.
μΈν°νμ΄μ€μ λ°νμ μμΈλ₯Ό λ°λ‘ μ μΈνμ§ μμλ λλ λ°νμ μμΈλ₯Ό μ μ©νμ !
λ°νμ μμΈ μ μ©
public class MyDbException extends RuntimeException
RuntimeException μ μμλ°μλ€.
λ°λΌμ MyDbException μ λ°νμ(μΈμ²΄ν¬) μμΈκ° λλ€.
MemberRepository μΈν°νμ΄μ€ μ μ©
public class MemberRepositoryV4_1 implements MemberRepository
public Member save(Member member)
/**
* μμΈ λμ λ¬Έμ ν΄κ²°
* μ²΄ν¬ μμΈλ₯Ό λ°νμ μμΈλ‘ λ³κ²½
* MemberRepository μΈν°νμ΄μ€ μ¬μ© * throws SQLException μ κ±°
*/
catch (SQLException e) {
throw new MyDbException(e);
κΈ°μ‘΄ μ²΄ν¬ μμΈμΈ SQLException μ RuntimeException μ μμλ°μ MyDbException μΌλ‘ λ³ν
κΈ°μ‘΄ μμΈλ₯Ό μμ±μλ₯Ό ν΅ν΄μ ν¬ν¨νκ³ μλ κ²μ νμΈν μ μλ€.
κ·ΈλμΌ μμΈλ₯Ό μΆλ ₯νμ λ μμΈμ΄ λλ κΈ°μ‘΄ μμΈλ ν¨κ» νμΈν μ μλ€.
MyDbException μ΄ λ΄λΆμ SQLException μ ν¬ν¨νκ³ μλ€κ³ μ΄ν΄νλ©΄ λλ€.
μμΈλ₯Ό μΆλ ₯νμ λ μ€ν νΈλ μ΄μ€λ₯Ό ν΅ν΄ λλ€ νμΈν μ μλ€.
μμΈλ₯Ό λ³νν λλ κΈ°μ‘΄ μμΈλ₯Ό κΌ! ν¬ν¨νμ.
μ 리
μ²΄ν¬ μμΈλ₯Ό λ°νμ μμΈλ‘ λ³ννλ©΄μ μΈν°νμ΄μ€μ μλΉμ€ κ³μΈ΅μ μμμ±μ μ μ§ν μ μκ² λμλ€.
λλΆμ ν₯ν JDBCμμ λ€λ₯Έ ꡬν κΈ°μ λ‘ λ³κ²½νλλΌλ μλΉμ€ κ³μΈ΅μ μ½λλ₯Ό λ³κ²½νμ§ μκ³ μ μ§ν μ μλ€.
λ°μ΄ν° μ κ·Ό μμΈ μ§μ λ§λ€κΈ°
λ°μ΄ν°λ² μ΄μ€ μ€λ₯μ λ°λΌμ νΉμ μμΈλ 볡ꡬνκ³ μΆμ μ μλ€.
μλ₯Ό λ€μ΄μ νμ κ°μ
μ DBμ μ΄λ―Έ κ°μ IDκ° μμΌλ©΄ ID λ€μ μ«μλ₯Ό λΆμ¬μ μλ‘μ΄ IDλ₯Ό λ§λ€μ΄μΌ νλ€κ³ κ°μ ν΄λ³΄μ.
IDλ₯Ό hello λΌκ³ κ°μ
μλ νλλ°, μ΄λ―Έ κ°μ μμ΄λκ° μμΌλ©΄ hello12345 μ κ°μ΄ λ€μ μμμ μ«μλ₯Ό λΆμ¬μ κ°μ
νλ κ²μ΄λ€.
λ°μ΄ν°λ₯Ό DBμ μ μ₯ν λ κ°μ IDκ° μ΄λ―Έ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄ μλ€λ©΄, λ°μ΄ν°λ² μ΄μ€λ μ€λ₯ μ½λλ₯Ό λ°ννκ³ ,
μ΄ μ€λ₯ μ½λλ₯Ό λ°μ JDBC λλΌμ΄λ²λ SQLException μ λμ§λ€.
κ·Έλ¦¬κ³ SQLException μλ λ°μ΄ν°λ² μ΄μ€κ° μ 곡νλ errorCode λΌλ κ²μ΄ λ€μ΄μλ€.
SQLException λ΄λΆμ λ€μ΄μλ errorCode λ₯Ό νμ©νλ©΄ λ°μ΄ν°λ² μ΄μ€μμ μ΄λ€ λ¬Έμ κ° λ°μνλμ§ νμΈν μ μλ€.
μμΈλ₯Ό νμΈν΄μ 볡ꡬνλ κ³Όμ
μλΉμ€ κ³μΈ΅μμλ μμΈ λ³΅κ΅¬λ₯Ό μν΄ ν€ μ€λ³΅ μ€λ₯λ₯Ό νμΈν μ μμ΄μΌ νλ€.
κ·ΈλμΌ μλ‘μ΄ IDλ₯Ό λ§λ€μ΄μ λ€μ μ μ₯μ μλν μ μκΈ° λλ¬Έμ΄λ€.
μ΄λ¬ν κ³Όμ μ΄ λ°λ‘ μμΈλ₯Ό νμΈν΄μ 볡ꡬνλ κ³Όμ μ΄λ€.
리ν¬μ§ν 리λ SQLException μ μλΉμ€ κ³μΈ΅μ λμ§κ³ μλΉμ€ κ³μΈ΅μ μ΄ μμΈμ μ€λ₯ μ½λλ₯Ό νμΈν΄μ
ν€ μ€λ³΅ μ€λ₯( 23505 )μΈ κ²½μ° μλ‘μ΄ IDλ₯Ό λ§λ€μ΄μ λ€μ μ μ₯νλ©΄ λλ€.
κ·Έλ°λ° SQLException μ λ€μ΄μλ μ€λ₯ μ½λλ₯Ό νμ©νκΈ° μν΄ SQLException μ μλΉμ€ κ³μΈ΅μΌλ‘ λμ§κ² λλ©΄,
μλΉμ€ κ³μΈ΅μ΄ SQLException μ΄λΌλ JDBC κΈ°μ μ μμ‘΄νκ² λλ©΄μ, μ§κΈκΉμ§ μ°λ¦¬κ° κ³ λ―Όνλ μλΉμ€ κ³μΈ΅μ μμμ±μ΄ 무λμ§λ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ μμ λ°°μ΄ κ² μ²λΌ 리ν¬μ§ν 리μμ μμΈλ₯Ό λ³νν΄μ λμ§λ©΄ λλ€.
SQLException -> MyDuplicateKeyException
public class MyDuplicateKeyException extends MyDbException
κΈ°μ‘΄μ μ¬μ©νλ MyDbException(RuntimeException) μ μμλ°μμ μλ―Έμλ κ³μΈ΅μ νμ±νλ€.
μ΄λ κ²νλ©΄ λ°μ΄ν°λ² μ΄μ€ κ΄λ ¨ μμΈλΌλ κ³μΈ΅μ λ§λ€ μ μλ€.
κ·Έλ¦¬κ³ μ΄λ¦λ MyDuplicateKeyException μ΄λΌλ μ΄λ¦μ μ§μλ€.
μ΄ μμΈλ λ°μ΄ν° μ€λ³΅μ κ²½μ°μλ§ λμ ΈμΌ νλ€.
μ΄ μμΈλ μ°λ¦¬κ° μ§μ λ§λ κ²μ΄κΈ° λλ¬Έμ, JDBCλ JPA κ°μ νΉμ κΈ°μ μ μ’ μμ μ΄μ§ μλ€.
λ°λΌμ μ΄ μμΈλ₯Ό μ¬μ©νλλΌλ μλΉμ€ κ³μΈ΅μ μμμ±μ μ μ§ν μ μλ€.
(ν₯ν JDBCμμ λ€λ₯Έ κΈ°μ λ‘ λ°κΎΈμ΄λ μ΄ μμΈλ κ·Έλλ‘ μ μ§ν μ μλ€.)
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard