์ž๋Š” ์”จ์•—
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿฃ ๊ธฐ์ดˆ ๊ฐœ๋…
    • ๐Ÿ“Ž ์œ ํŠœ๋ธŒ
    • ๐Ÿ’พ ์กฐ๊ฐ๋ชจ์Œ
    • ๐Ÿ‘ฉ‍๐Ÿ’ป Error
    • โ„ React
    • ๐ŸฅPython
    • ๐Ÿ€ Spring
    • ๐Ÿฅž JS
    • ๐Ÿ‹ Docker
    • ๐Ÿงญ WSO2
    • ๐Ÿง Linux
    • ๐Ÿ”— SQL
    • ๐Ÿข C#
    • ๐Ÿ“‘ ์ฝ์„๊ฑฐ๋ฆฌ
    • ๐Ÿ‘€์งˆ๋ฌธ๋“ค
    • ๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…
      • Java ์ž๋ฐ”
      • Oracle ์˜ค๋ผํด
      • JDBC
      • HTML & CSS
      • JavaScript
      • JSP
      • Servlet
      • Spring
      • MyBatis
    • ๐Ÿ“• ๊ฐœ๋ฐœ ํ˜ผ๊ณต
      • ์ž๋ฐ”์˜ ์ •์„
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ
hELLO ยท Designed By ์ •์ƒ์šฐ.
์ž๋Š” ์”จ์•—

๐ŸŒฑ

0203 ๊ตญ๋น„ ์ˆ˜์—… PreparedStatement ์ž‘์—…์ˆœ์„œ bind ๋ณ€์ˆ˜ Singleton Pattern
๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…/JDBC

0203 ๊ตญ๋น„ ์ˆ˜์—… PreparedStatement ์ž‘์—…์ˆœ์„œ bind ๋ณ€์ˆ˜ Singleton Pattern

2023. 2. 5. 22:24

*PreparedStatement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ CRUD

*์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ n๊ฐœ์˜ ํ–‰์ผ ๋•Œ (๋ช‡ ๊ฐœ์˜ ํ–‰์ด ๋ฐ˜ํ™˜๋ ์ง€ ๋ชจ๋ฅผ ๋•Œ)

 

๊ฐ’์ด ๋ช‡๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ €์žฅํ•˜๋ ค๋ฉด ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š”?

  • ๊ฐ’ ์ค‘๋ณต ๊ฐ€๋Šฅ > List
  • ๊ฐ’ ์œ ์ผํ•ด์•ผํ•จ > Set

ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ๊ตฌ์„ฑ ์ƒ

๋ช‡ ๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ์ค‘๋ณต๋  ๊ฑฐ ๊ฐ™์œผ๋ฉด > list (๋ช‡๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๋Š”๋ฐ ์ค‘๋ณต ๊ฐ€๋Šฅ)

๋ช‡ ๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ์œ ์ผํ•  ๊ฑฐ ๊ฐ™์œผ๋ฉด > Set (๋ช‡๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๋Š”๋ฐ ์ค‘๋ณต ๋ถˆ๊ฐ€)

 


*๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์‚ฌ์›๋ช…์„ ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž‘์„ฑ

๋ถ€์„œ๋ฒˆํ˜ธ ํ•˜๋‚˜์— ์‚ฌ์›๋ช…์ด n๋ช… > 0~n๊ฐœ ๋‚˜์˜ด

public List<String> selectJob( int deptno )

๋‹จ์ผํ˜•, ๋ช‡๊ฐœ์ผ์ง€ ๋ชจ๋ฅด๋Š” ๊ฐ’์„ ๊ฐ’์„ ๋ฌถ์–ด์„œ list๋กœ ๋ฐ˜ํ™˜

๋‹จ์ผํ˜•: ํ•œ๊ฐœ์˜ ์ปฌ๋Ÿผ๊ฐ’์ด ๋ฐ˜ํ™˜๋  ๊ฒƒ


*๋งค๋‹ˆ์ €๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ์‚ฌ์›๋ฒˆํ˜ธ ์กฐํšŒํ•˜๋Š” ์ผ method์ž‘์„ฑ

public Set<Integer> selectJob(int mgr)
๋‹จ์ผํ˜•, ๋ช‡ ๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฐ’๋“ค์„ ๋ฌถ์–ด์„œ ๋ฐ˜ํ™˜, ๊ฐ’๋“ค์ด ์œ ์ผ > Set


*๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ์‚ฌ์›๋ฒˆํ˜ธ,์‚ฌ์›๋ช… ์กฐํšŒํ•˜๋Š” ์ผ method์ž‘์„ฑ

public List<VO> selectJob(int deptno)

์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ๋“ค์˜ ๊ฐ’์ธ ๋ณตํ•ฉ๊ฐ’, ๋ช‡๊ฐœ์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฐ’๋“ค์„ ๋ฌถ์–ด์„œ ๋ฐ˜ํ™˜

VO: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ๊ฐ’ / List: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ 

 

 

                                                                                            ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’๋“ค(์กฐํšŒ๋œ ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜)์€ VO์— ์ €์žฅ
                                                                                            ๊ฐ™์€ ์ด๋ฆ„์˜ VO๊ฐ์ฒด๋ฅผ ์ค‘๋ณต๋˜์ง€์•Š๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด List์— ์ถ”๊ฐ€

 


*์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์˜ ํ–‰์ผ ๋•Œ

*์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ์‚ฌ์›๋ช…,๋ถ€์„œ๋ฒˆํ˜ธ,๋งค๋‹ˆ์ €๋ฒˆํ˜ธ,์ž…์‚ฌ์ผ ์กฐํšŒํ•˜๋Š” ์ผ method์ž‘์„ฑ

pk: ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์œ ์ผํ•˜๊ณ , null ํ—ˆ์šฉ ์•ˆํ•จ

pk๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์กฐํšŒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒƒ > List ์•ˆ์”€ 

public  VO  selectJob( int empno)  {


*์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ์‚ฌ์›๋ช… ์กฐํšŒํ•˜๋Š” ์ผ method์ž‘์„ฑ

Public String selectJob(int empno)


*์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ๋ถ€์„œ๋ฒˆํ˜ธ ์กฐํšŒํ•˜๋Š” ์ผ method์ž‘์„ฑ

public int selectJob(int empno)


 *PreparedStatement

 - ์ฟผ๋ฆฌ๋ฌธ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด
 - ์ฟผ๋ฆฌ๋ฌธ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์„ bind๋ณ€์ˆ˜(?)๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฌธ์˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ๊ฐ์ฒด
 - ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋”๋ผ๋„(๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค ํ™˜๊ฒฝ, ์ ‘์†์ž ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ) ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ํšจ์œจ ์ข‹์Œ
 - SQLInjection ๊ณต๊ฒฉ์— ์•ˆ์ „


์ž‘์—… ์ˆœ์„œ)

1. ๋“œ๋ผ์ด๋ฒ„๋กœ๋”ฉ
2. ์ปค๋„ฅ์…˜ ์–ป๊ธฐ
3. ์ฟผ๋ฆฌ๋ฌธ์ƒ์„ฑ๊ฐ์ฒด ์–ป๊ธฐ
4. ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜์— ๊ฐ’ ์„ค์ •
5. ์ฟผ๋ฆฌ๋ฌธ ์ˆ˜ํ–‰ ํ›„ ๊ฒฐ๊ณผ ์–ป๊ธฐ
6. ์—ฐ๊ฒฐ ๋Š๊ธฐ

*bind๋ณ€์ˆ˜ ( ? )

 - ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ’์„ ๋ฌถ์„ ๋•Œ(binding) ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜
 - ์ฟผ๋ฆฌ๋ฌธ์— ?๋กœ ์‚ฌ์šฉ
 - ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜๋Š” L -> R ์ง„ํ–‰ํ•˜๋ฉฐ ์ˆœ์„œ๋Œ€๋กœ 1๋ฒˆ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง
 - ์ปฌ๋Ÿผ๋ช…,ํ…Œ์ด๋ธ”๋ช…์— ์ ˆ๋Œ€๋กœ ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ > SQL๊ณต๊ฒฉ์— ์•ˆ์ „
 - ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜์—๋Š” ๋ฌธ์ž์—ด ์ผ์ง€๋ผ๋„ ‘๋ฅผ ๋ถ™์ด์ง€ ์•Š์Œ


*์ฝ”๋“œ ์˜ˆ

 

3. ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ๊ฐ์ฒด ์–ป๊ธฐ

- ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ                                                            (Bind๋ณ€์ˆ˜ : ๋ฌธ์ž์—ด์ผ์ง€๋ผ๋„ ‘๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)
 String insert=“insert into ํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ช…,,) values(?,?,?,?)”;


 PreparedStatement pstmt=con.prepareStatement( insert );

์ฟผ๋ฆฌ๋Š” ์žˆ์ง€๋งŒ ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐˆ์ง€ ๋ชจ๋ฆ„(์กฐ๋ฆฝ๋œ ๋นˆ ์ด ์ƒํƒœ)

 


4. bind๋ณ€์ˆ˜์— ๊ฐ’ ์„ค์ • ( ์ฟผ๋ฆฌ๋ฌธ์— ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด ์ƒ๋žต)

   -์ •์ˆ˜
    pstmt.setInt( ์ธ๋ฑ์Šค, ์ •์ˆ˜๊ฐ’); // setLong()
   -์‹ค์ˆ˜
     pstmt.setDouble(์ธ๋ฑ์Šค, ์‹ค์ˆ˜๊ฐ’); //setFloat()
   -๋ฌธ์ž์—ด
     pstmt.setString( ์ธ๋ฑ์Šค, ๋ฌธ์ž์—ด ๊ฐ’);
   -๋‚ ์งœ
     pstmt.setDate( ์ธ๋ฑ์Šค, java.sqlDate๊ฐ์ฒด);

 


5. ์ฟผ๋ฆฌ๋ฌธ ์ˆ˜ํ–‰ ํ›„ ๊ฒฐ๊ณผ ์–ป๊ธฐ 

   ( ์ฃผ์˜ : ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š๋„๋ก => error )

    ๋ถ€๋ชจ์ธ Statement์—์„œ ์ œ๊ณตํ•˜๋Š” method(์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜

   pstmt.executeUpdate();// insert, update, delete
   pstmt.executeQuery(); // select

 


 6. ์—ฐ๊ฒฐ๋Š๊ธฐ

๋Š์„ ๋•Œ๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ~   

 pstmt.close();  ,  con.close();


*Singleton Pattern

 - ์‹คํ–‰์ค‘์ธ JVM์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ , ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“œ๋Š” Design Pattern (๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฐœ๋ฐœ ํŒจํ„ด)
 - ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์‹œ๊ฐ„์ด ์งง์Œ(๋น ๋ฆ„)
 - ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Œ
 - JVM์—์„œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ ์ดํ›„์—๋Š”(null) ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ(ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ)

 

์ž‘์„ฑ๋ฒ•)

1. ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ง์ ‘ ๊ฐ์ฒดํ™”ํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰์Œ

(์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ private์œผ๋กœ ๋ง‰์Œ, ๋ฐ–์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€, ๋‚ด ํด๋ž˜์Šค ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)



public class Test {

private  static Test t;  //static์œผ๋กœ ์ค˜์•ผ ์ฐธ์กฐ ๊ฐ€๋Šฅ

private Test(){

  }//Test

}//class



2. ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ์œ ์ง€ํ•˜๊ณ , ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ผ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ธฐ

public static Test getInstance() { // ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ, ๊ฐ์ฒดํ™” ์—†์ด ํด๋ž˜์Šค๋ช…์œผ๋กœ ๋ฐ”๋กœ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Œ(static)



//์กฐ๊ฑด-๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด์žˆ์ง€ ์•Š์„๋•Œ๋งŒ ๋งŒ๋“ค๊ธฐ, ๊ฐ์ฒด๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ ๋‹ค์‹œ ์‚ด๋ ค์„œ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ

 if(t==null) { // ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด

  t = new Test();

  }//end if

 return t;

}//getInstance

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ‘ฉโ€๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—… > JDBC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

0207 ๊ตญ๋น„ ์ˆ˜์—… JDBC transaction์ฒ˜๋ฆฌ procedure ์ž‘์„ฑ CallableStatement  (0) 2023.02.09
0206 JDBC like ์‚ฌ์šฉ ResultSetMetaData CLOB(Character Large Object) ๋ฐ์ดํ„ฐ ํ˜•์˜ ์‚ฌ์šฉ  (0) 2023.02.06
0202 ๊ตญ๋น„ ์ˆ˜์—… JDBC ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ๊ฐ์ฒด DAO VO Service Statement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ CRUD (insert update delete select)  (0) 2023.02.05
0201 ๊ตญ๋น„ ์ˆ˜์—… JDBC driver DBMS ์ž‘์—…์ˆœ์„œ, DB ์—ฐ๊ฒฐ ์ž‘์—… ์ž๋ฐ” ์ฟผ๋ฆฌ ์‹คํ–‰  (0) 2023.02.05
0201 ๊ตญ๋น„ ์ˆ˜์—… JDBC driver DBMS ์ž‘์—… ์ˆœ์„œ DB ์—ฐ๊ฒฐ ์ž‘์—… ์ž๋ฐ” ์ฟผ๋ฆฌ ์‹คํ–‰  (0) 2023.02.02
    '๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…/JDBC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • 0207 ๊ตญ๋น„ ์ˆ˜์—… JDBC transaction์ฒ˜๋ฆฌ procedure ์ž‘์„ฑ CallableStatement
    • 0206 JDBC like ์‚ฌ์šฉ ResultSetMetaData CLOB(Character Large Object) ๋ฐ์ดํ„ฐ ํ˜•์˜ ์‚ฌ์šฉ
    • 0202 ๊ตญ๋น„ ์ˆ˜์—… JDBC ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ๊ฐ์ฒด DAO VO Service Statement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ CRUD (insert update delete select)
    • 0201 ๊ตญ๋น„ ์ˆ˜์—… JDBC driver DBMS ์ž‘์—…์ˆœ์„œ, DB ์—ฐ๊ฒฐ ์ž‘์—… ์ž๋ฐ” ์ฟผ๋ฆฌ ์‹คํ–‰

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”