์ž๋Š” ์”จ์•—
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿฃ ๊ธฐ์ดˆ ๊ฐœ๋…
    • ๐Ÿ“Ž ์œ ํŠœ๋ธŒ
    • ๐Ÿ’พ ์กฐ๊ฐ๋ชจ์Œ
    • ๐Ÿ‘ฉ‍๐Ÿ’ป 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 ์ •์ƒ์šฐ.
์ž๋Š” ์”จ์•—

๐ŸŒฑ

0207 ๊ตญ๋น„ ์ˆ˜์—… JDBC transaction์ฒ˜๋ฆฌ procedure ์ž‘์„ฑ CallableStatement
๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…/JDBC

0207 ๊ตญ๋น„ ์ˆ˜์—… JDBC transaction์ฒ˜๋ฆฌ procedure ์ž‘์„ฑ CallableStatement

2023. 2. 9. 07:33

*transaction ์ฒ˜๋ฆฌ (DB์—…๋ฌด์ฒ˜๋ฆฌ์˜ ๋‹จ์œ„ – insert, update, delete๋กœ ๊ตฌ์„ฑ)

- java.sql.Connection์€ auto commit์ด ๊ธฐ๋ณธ ์„ค์ •
    Connection.setAutoCommit( true ); => ์ฟผ๋ฆฌ๋ฌธ ํ•˜๋‚˜๋กœ Transaction์ด ์™„๋ฃŒ๋จ

 

  <n๊ฐœ์˜ ์ฟผ๋ฆฌ์ผ ๊ฒฝ์šฐ>

 - ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ์ด (insert, update, delete) ํ•˜๋‚˜์˜ Transaction์„ ๊ตฌ์„ฑํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ
   setAutoCommit( false )๋กœ ๋ฐ”๊ฟ” ์„ค์ •ํ•˜๊ณ , ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ํ•œ ํ–‰์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ commit() ๋˜๋Š” rollback()์„ ์ˆ˜ํ–‰

 - Connection์ด close๊ฐ€ ๋œ๋‹ค๋ฉด(์ •์ƒ ์ข…๋ฃŒ) commit์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง 

( ์ฟผ๋ฆฌ๋ฌธ ์ˆ˜ํ–‰ ์ค‘ Connection์ด close ๋˜๋ฉด ์•ˆ๋จ – ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ ์ค‘ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ๋‚˜๋จธ์ง€๋Š” 
    commit์ด ๋˜๋Š” ์ผ๊ด€์„ฑ์˜ ๋ฌธ์ œ ๋ฐœ์ƒ) >> ๋ชจ๋“  ์ž‘์—…์ด ์‹คํŒจ ํ˜น์€ ์„ฑ๊ณตํ•˜๋Š” ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•จ

 

 

 

  • ๋‹ค๋ฅธ method์—์„œ Connection์„ ๋Š์„๋ ค๋ฉด Field์— connection์„ ์˜ฌ๋ ค์•ผํ•จ
  • transaction() : int // ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์ž‘์—…์ด ๊ตฌ์„ฑ๋œ ๋ฉ”์†Œ๋“œ, ์‹คํ–‰๋œ ํ–‰์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
  • useTransaction() : void // ์‹คํ–‰๋œ ํ–‰์ˆ˜๋ฅผ ๋ฐ›์•„ ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰(๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ–‰์ˆ˜์™€ ๋น„๊ตํ•ด์„œ) commit ํ˜น์€ rollback, DBMS ์—ฐ๊ฒฐ๋Š๊ธฐ

 

*์—ฌ๋Ÿฌ ๊ฐœ์˜ insert๊ฐ€ ํ•˜๋‚˜์˜ Transaction์œผ๋กœ ๊ตฌ์„ฑ๋  ๋•Œ์—๋Š” commit ๋˜๋Š” ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌ
*์—ฌ๋Ÿฌ ๊ฐœ์˜ update๋‚˜ delete๊ฐ€ ํ•˜๋‚˜์˜ Transaction์œผ๋กœ ๊ตฌ์„ฑ๋  ๋•Œ์—๋Š” commit๊ณผ rollback์„ ์ฒ˜๋ฆฌ

 


*Procedure

 - ์ž์ฃผ ์‚ฌ์šฉ๋  ์ฟผ๋ฆฌ๋ฌธ์„ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•˜์—ฌ ์ €์žฅํ•ด๋‘๊ณ , ํ•„์š”ํ•œ ๊ณณ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
 - PL(Procedural Language) /SQL๋ฌธ ์ค‘ ํ•˜๋‚˜
   ( ๊ธฐ๋ณธ๋ฌธ๋ฒ•, ์—ฐ์‚ฐ์ž, ์ œ์–ด๋ฌธ, function, procedure, trigger, package๋กœ ๊ตฌ์„ฑ )

  • function: ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์—…๋ฌด๋กœ์ง ์ค‘์ 
  • procedure : ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์—…๋ฌด๋กœ์ง๋„ ๊ฐ™์ด ๊ตฌํ˜„
  • trigger: ์—ฐ์‡„์ž‘์šฉ. ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ

 - ์•”์‹œ์  ์ปค์„œ์™€ ๋ช…์‹œ์  ์ปค์„œ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ

  • ์•”์‹œ์  ์ปค์„œ: insert,update,delete ์ฟผ๋ฆฌ๋ฌธ์ด ์ˆ˜ํ–‰๋œ ํ–‰์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ์ปค์„œ
                  sql    %rowcount
    (์•”์‹œ์  ์ปค์„œ) (์†์„ฑ)
  • ๋ช…์‹œ์  ์ปค์„œ: ์—ฌ๋Ÿฌ ํ–‰์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” select๋ฌธ์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•˜๋Š” ์ปค์„œ

                                                                          select ํ•จ์ˆ˜๋ช…(์ปฌ๋Ÿผ๋ช…) 

- ์‹คํ–‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ง์ ‘ ์‹คํ–‰์„ ์ˆ˜ํ–‰  (ํ•จ์ˆ˜๋Š” ๊ฐ„์ ‘ ์‹คํ–‰- ์ฟผ๋ฆฌ๋ฌธ์— ๋„ฃ์–ด์„œ ์‹คํ–‰)
   exec [ execute ]  <- sql shell์—์„œ ์ง์ ‘ ์‹คํ–‰
  
  sql> exec ํ”„๋กœ์‹œ์ €๋ช…(๊ฐ’,,,)

 - ๋ฐ˜ํ™˜ํ˜•์ด ์—†์Œ( out parameter๋ฅผ ์‚ฌ์šฉ – ํ•„์š”ํ•œ ์ˆ˜ ๋งŒํผ ์™ธ๋ถ€๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ)
 - ์ปดํŒŒ์ผ์„ ํ•˜๋ฉด (DD์— Procedure๊ฐ€ ์ถ”๊ฐ€๋จ) ๊ทธ ํ›„ ์‹คํ–‰ํ•จ // user_procedures
 - ์—…๋ฌด๋กœ์ง์€ ํ•˜๋‚˜์ด๋ฉด์„œ ํ™”๋ฉด์ด ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•  ๋•Œ procedure๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•จ

๋™์ผํ•œ ์—…๋ฌด๋ฅผ 3๋ฒˆ ๋งŒ๋“ค์–ด ์ฝ”๋”ฉํ•˜๋ฉด ์—…๋ฌด๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๊ฐ๊ฐ 3๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•จ
> ์—…๋ฌด๋กœ์ง์„ DB์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค
>>> procedure๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ธ ์ˆ˜ ์žˆ์Œ

DB์—์„œ ํ•˜๋‚˜์˜ ์—…๋ฌด๋กœ์ง์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด
>> ๋ทฐ๊ฐ€ ๋‹ค์–‘ํ•ด๋„ ๋ชจ๋‘ ์ˆ˜์ •๋œ ์—…๋ฌด ๋กœ์ง์„ ๋ฐ›์•„ ์“ธ ์ˆ˜ ์žˆ์Œ
Windows์—์„œ 
์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์„ ๊ณ ๋ คํ•œ ํ”„๋กœ๊ทธ๋žจ
1.Java
2.MFC
3.VB
4.Python
Web์—์„œ 
์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์„ ๊ณ ๋ คํ•œ ํ”„๋กœ๊ทธ๋žจ
1.JSP
2.ASP
3.PHP
4.Python
APP์œผ๋กœ 
์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์„ ๊ณ ๋ คํ•œ ํ”„๋กœ๊ทธ๋žจ
1. Android
2. IOS
3. Hybrid App

*Procedure ์ž‘์„ฑ

 

๋ฌธ๋ฒ•)

1.์ƒ์„ฑ :

create or replace procedure ํ”„๋กœ์‹œ์ €๋ช…( ๋งค๊ฐœ๋ณ€์ˆ˜๋ช… ์ข…๋ฅ˜ ๋ฐ์ดํ„ฐํ˜•,,, )
is                                    
  ๋ณ€์ˆ˜์„ ์–ธ, record์„ ์–ธ, table์„ ์–ธ, cursor ์„ ์–ธ  // record: VO์™€ ๋น„์Šทํ•œ ๊ฐ์ฒด, ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฌถ์–ด์„œ ํ•œ๋ฒˆ์— ์ €์žฅ

                                                                            // table: SQL์˜ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•œ ๊ฐ์ฒด
begin
  ์—ฐ์‚ฐ์ž, ์ œ์–ด๋ฌธ, ์ฟผ๋ฆฌ๋ฌธ, ์ปค์„œ์˜ ์‚ฌ์šฉ

end;
/

2. ์ €์žฅ : ํŒŒ์ผ๋ช….sql

3. ์ปดํŒŒ์ผ (sqlplus์— ์ ‘์†) : sql> @ํŒŒ์ผ๋ช…

--cp_emp์— ์ถ”๊ฐ€ํ•˜๋Š” procedure
create or replace procedure insert_cp_emp (empno number, ename varchar2, row_cnt out number, msg out varchar2)

is
  --๋ณ€์ˆ˜, ์ปค์„œ ๋“ฑ ์„ ์–ธ
 cnt number(1) := 0;

begin
 -- ์—ฐ์‚ฐ์ž,์ œ์–ด๋ฌธ,์ฟผ๋ฆฌ๋ฌธ,์ปค์„œ ์‚ฌ์šฉ
 insert into cp_emp ( empno, ename)
 values(empno, ename)

 cnt : = sql%rowcount; -- ์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰๋œ ํ–‰์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์•”์‹œ์  ์ปค์„œ ์‚ฌ์šฉ 
 
 if cnt = 1 then
   msg := empno||'๋ฒˆ ์‚ฌ์› ์ •๋ณด ์ž…๋ ฅ ์„ฑ๊ณต';
   commit;
 end if;

 row_cnt := cnt; -- out parameter์— ๋ณ€์ˆ˜cnt๊ฐ’ ์ €์žฅ

 exception
 when DUP_VAL_ON_INDEX then
   msg : = '์ค‘๋ณตํ‚ค ์กด์žฌ';

 when others then
   msg := '์•Œ ์ˆ˜ ์—†๋Š” ์˜ˆ์™ธ';

end;
/

(1,2,3์€ ์˜ค๋ผํด์—์„œ / 4,5,6์€ ์ž๋ฐ”์—์„œ ์ˆ˜ํ–‰ - CallableStatement๋ฅผ ์จ์„œ)

4. ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ( ํ”„๋กœ์‹œ์ €๊ฐ€ ๋‚ด๋ณด๋‚ธ out parameter์— ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด)

out parameter๋ช…๊ณผ๋Š” ๊ด€๋ จ ์—†์Œ    

var[iable] ๋ณ€์ˆ˜๋ช… ๋ฐ์ดํ„ฐํ˜•(ํฌ๊ธฐ)

var r number

var m varchar2(100)

*์ž๋ฐ”์—์„œ cstmt.registerOutParameter( ์ธ๋ฑ์Šค, Types์˜ constant  ); // java.sql.Types ํด๋ž˜์Šค ์‚ฌ์šฉ 

 

5. ์‹คํ–‰

sql> exec ํ”„๋กœ์‹œ์ €๋ช…( ๊ฐ’,,,  : ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜๋ช…,,, ) // ์ง์ ‘ ์‹คํ–‰ //out param์— ๋“ค์–ด๊ฐˆ ๊ฐ’์€ :์จ์„œ

exec insert_cp_emp (์‚ฌ์›๋ฒˆํ˜ธ, '์‚ฌ์›๋ช…', '์ง๋ฌด', '์—ฐ๋ด‰', ๋ถ€์„œ๋ฒˆํ˜ธ, :bind๋ณ€์ˆ˜๋ช…, :bind๋ณ€์ˆ˜๋ช… )  ;

*์ž๋ฐ”์—์„œ cstmt.execute();


6. ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜์—  ์ €์žฅ๋œ ๊ฐ’ ์ถœ๋ ฅ (out parameter์— ๊ฐ’์ด ์ €์žฅ๋จ)

  print ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜๋ช…

*์ž๋ฐ”์—์„œ cstmt.getXxx(์ธ๋ฑ์Šค);

 


*CallableStatement

-์ž๋ฐ”์—์„œ Procedure๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” interface

-PreparedStatement์˜ ์ž์‹ ์ธํ„ฐํŽ˜์ด์Šค (PreparedStatement์™€ Statement๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

 

์‚ฌ์šฉ๋ฒ•)

1. CallableStatement๋ฅผ Connection์—์„œ ์–ป๊ธฐ

  CallableStatement cstmt = con.prepareCall(    "{ call ํ”„๋กœ์‹œ์ €๋ช… (?,?,?) }"   );

                                                                                                         bind๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ

 

2. ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹น (procedure์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” 2๊ฐœ)

  • in parameter: ์™ธ๋ถ€ ๊ฐ’์„ procedure ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•˜๊ธฐ/๋ฐ›๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜
    PreparedStatement์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ ๊ทธ๋Œ€๋กœ
    -์ •์ˆ˜: cstmt.setInt(์ธ๋ฑ์Šค,๊ฐ’) // ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ๋ฅผ ์”€, ๋ถ€๋ชจ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉ


  • out parameter: procedure ๋‚ด๋ถ€์˜ ๊ฐ’์„ procedure ์™ธ๋ถ€๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜
    SQL์˜ ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•จ (์ž๋ฐ”์—์„œ ์„ ์–ธํ•ด์•ผํ•จ) > out parameter๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉ
    cstmt.registerOutParameter( ์ธ๋ฑ์Šค, Types์˜ constant  );

     // Types: ํŠน์ • DBMS์— ๊ท€์†๋˜์ง€ ์•Š๋Š” ๊ณตํ†ต ๋ฐ์ดํ„ฐํ˜•์„ ์ •์˜ํ•œ ํด๋ž˜์Šค
        Number๋Š” ์—†์Œ(์˜ค๋ผํด์—๋งŒ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐํ˜•) >> NUMERIC (์ƒ์œ„์˜ ๋ฐ์ดํ„ฐํ˜•)
        Varchar2๋Š” ์˜ค๋ผํด์—๋งŒ ์กด์žฌ >> VARCHAR (์ƒ์œ„์˜ ๋ฐ์ดํ„ฐํ˜•)

    ex) Oracle์˜ Number๊ฐ€ out parameter์ธ ๊ฒฝ์šฐ
    cstmt.registerOutParameter(  ์ธ๋ฑ์Šค,  Types.NUMERIC );

    ex) Oracle์˜ Varchar2๊ฐ€ out parameter์ธ ๊ฒฝ์šฐ
    cstmt.registerOutParameter(  ์ธ๋ฑ์Šค,  Types.VARCHAR );

3. procedure ์‹คํ–‰

cstmt.execute();

 

4. out parameter์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ›๊ธฐ

๋ณ€์ˆ˜ = cstmt.getXxx(  ์ธ๋ฑ์Šค  );

 

5. ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ (์ถœ๋ ฅ,์—ฐ์‚ฐ,,)


์‚ฌ์šฉ๋ฒ•)


3.ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด ์–ป๊ธฐ

  CallableStatement cstmt=con.prepareCall(“{ call ํ”„๋กœ์‹œ์ €๋ช…(?,?,?, ? ,? ,? ,?)  }”);

  //in parameter 5๊ฐœ, out parameter 2๊ฐœ
  
  CallableStatement cstmt=con.prepareCall(“{ call insert_cp_emp(?,?,?, ? ,? ,? ,?) }”);


4. ๋ฐ”์ธ๋“œ๋ณ€์ˆ˜์— ๊ฐ’ ์„ค์ •

  •   in parameter ( ๋ถ€๋ชจ์ธ PreparedStatement์˜ method๋ฅผ ์‚ฌ์šฉ)
       cstmt.setInt(1, empno );
       cstmt.setString( 2, ename );
       cstmt.setInt(3, job);
       cstmt.setInt(4, sal );
       cstmt.setInt(5, deptno );

  •   out parameter : oracle bind ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”( var ๋ณ€์ˆ˜๋ช… ๋ฐ์ดํ„ฐํ˜•(ํฌ๊ธฐ )
       cstmt.registerOutParameter( 6, Types.NUMERIC );
       cstmt.registerOutParameter( 7, Types.VARCHAR );

 

5. ํ”„๋กœ์‹œ์ € ์‹คํ–‰ ( ๋ถ€๋ชจ ์ธํ„ฐํŽ˜์ด์Šค์ธ PreparedStatement์˜ ์‹คํ–‰ method๋ฅผ ํ˜ธ์ถœ)

  cstmt.execute();

 

 

6. Oracle์˜ bind๋ณ€์ˆ˜ (out parameter) ์— ์ €์žฅ๋œ ๊ฐ’ ๋ฐ›๊ธฐ ( cstmt.getXxx( out parameter์˜ ์ธ๋ฑ์Šค) )

  int cnt=cstmt.getInt(out paramaeter ์ธ๋ฑ์Šค);
  String msg=cstmt.getString(out paramaeter ์ธ๋ฑ์Šค);

   int row_cnt=cstmt.getInt(6);
   String msg=cstmt.getString(7); // ์˜ค๋ผํด์—์„œ ์ค€๋น„๋œ ๋ฉ”์‹œ์ง€ > view์˜ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง

 

public class UseInsertCpEmp {

	public ResultVO insertCpEmp(cpEmpVO ceVO) throws SQLException {
		// ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ„์†Œํ™” ์œ„ํ•ด VO๋กœ ๋„ฃ์–ด์คŒ
		//procedure ์ˆ˜ํ–‰ ํ›„ ๋ฐ˜ํ™˜๋˜๋Š” out parameter๊ฐ’๋“ค์„ ์ €์žฅํ•จ
		ResultVO rVO = new ResultVO();

		DbConnection db = DbConnection.getInstance();
		Connection con = null;
		CallableStatement cstmt = null;

		try {
			// 1.
			// 2.
			con = db.getConn();
            
			// 3.
			//procedure๋ฅผ ์“ฐ๋ฉด ์ž๋ฐ”์—์„œ๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์—†์Œ
			//con์—์„œ callableStatement ์–ป๊ธฐ (ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด)
            cstmt = con.prepareCall("{call insert_cp_emp(?,?,?,?)}");
            
			// 4.๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹น
			// in param(procedure ๋‚ด๋ถ€๋กœ ๊ฐ’ ์ „๋‹ฌ)
			cstmt.setInt(1, ceVO.getEmpno());
			cstmt.setString(2, ceVO.getEname());

			// out param (procedure ์™ธ๋ถ€๋กœ ๊ฐ’ ์ „๋‹ฌ)
			// row_cnt out number(์ˆ˜ํ–‰๋œ ํ–‰์ˆ˜), msg out varchar2(๋ฉ”์‹œ์ง€)
			cstmt.registerOutParameter(3, Types.NUMERIC);
			cstmt.registerOutParameter(4, Types.VARCHAR);

			// 5.procedure ์‹คํ–‰
			cstmt.execute();
            
			// 6. out parameter์— ์ €์žฅ๋œ ๊ฐ’ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ธฐ
			int cnt = cstmt.getInt(3);
			String msg = cstmt.getString(4);

			rVO.setCnt(cnt);
			rVO.setMsg(msg);

		} finally {
			// 7.์—ฐ๊ฒฐ ๋Š๊ธฐ
			db.dbClose(null, cstmt, con);
		} // end finally

		return rVO;
        
	}// insertCpEmp
    
    
    public static void main(String[] args) {
		
        //VO ์ƒ์„ฑ
		cpEmpVO ceVO = new cpEmpVO(1112, "๋ฐ•oo");
		UseInsertCpEmp uice = new UseInsertCpEmp();
        
		try {
        	//VO ๋„ฃ์–ด procedure ํ˜ธ์ถœ ๋ฐ ์ˆ˜ํ–‰
			ResultVO rVO = uice.insertCpEmp(ceVO);
            
			System.out.println(rVO.getCnt() + "๊ฑด ์ถ”๊ฐ€");
			System.out.println(rVO.getMsg());

		} catch (SQLException e) {
			e.printStackTrace();
		} // end catch

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

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

0209 ๊ตญ๋น„ ์ˆ˜์—… JDBC SQLInjection ๊ณต๊ฒฉ union์„ ์‚ฌ์šฉํ•œ ํ•ดํ‚น SQL Injection ๋ฐฉ์–ด ์ฝ”๋“œ  (0) 2023.02.10
0208 ๊ตญ๋น„ ์ˆ˜์—… JDBC CallableStatement๋กœ SYS_REFCURSOR ๋ฐ›๊ธฐ  (0) 2023.02.10
0206 JDBC like ์‚ฌ์šฉ ResultSetMetaData CLOB(Character Large Object) ๋ฐ์ดํ„ฐ ํ˜•์˜ ์‚ฌ์šฉ  (0) 2023.02.06
0203 ๊ตญ๋น„ ์ˆ˜์—… PreparedStatement ์ž‘์—…์ˆœ์„œ bind ๋ณ€์ˆ˜ Singleton Pattern  (0) 2023.02.05
0202 ๊ตญ๋น„ ์ˆ˜์—… JDBC ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ๊ฐ์ฒด DAO VO Service Statement ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ CRUD (insert update delete select)  (0) 2023.02.05
    '๐Ÿ‘ฉ‍๐Ÿ’ป ๊ตญ๋น„ ์ˆ˜์—…/JDBC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • 0209 ๊ตญ๋น„ ์ˆ˜์—… JDBC SQLInjection ๊ณต๊ฒฉ union์„ ์‚ฌ์šฉํ•œ ํ•ดํ‚น SQL Injection ๋ฐฉ์–ด ์ฝ”๋“œ
    • 0208 ๊ตญ๋น„ ์ˆ˜์—… JDBC CallableStatement๋กœ SYS_REFCURSOR ๋ฐ›๊ธฐ
    • 0206 JDBC like ์‚ฌ์šฉ ResultSetMetaData CLOB(Character Large Object) ๋ฐ์ดํ„ฐ ํ˜•์˜ ์‚ฌ์šฉ
    • 0203 ๊ตญ๋น„ ์ˆ˜์—… PreparedStatement ์ž‘์—…์ˆœ์„œ bind ๋ณ€์ˆ˜ Singleton Pattern

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