๐Ÿ’ปProgramming/โ˜•๏ธJava

    Transaction(ํŠธ๋žœ์žญ์…˜)

    ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ๋‹จ์œ„ ๋˜๋Š” ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ์ผ๋ จ์˜ ์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ๋ณ‘ํ–‰ ์ œ์–ด ๋ฐ ํšŒ๋ณต ์ž‘์—… ์‹œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„ ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ์š”๊ตฌ ์‹œ ์‹œ์Šคํ…œ์ด ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ ๋ณ€ํ™˜ ๊ณผ์ •์˜ ์ž‘์—… ๋‹จ์œ„ ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•(ACID) 1) ์›์ž์„ฑ(Atomic) ALL OR NOTHING - ํŠธ๋žœ์žญ์…˜์€ ํ•œ ๊ฐœ ์ด์ƒ์˜ ๋™์ž‘์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•œ ๊ฐœ์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ฌถ์Œ - ์›์ž์„ฑ์€ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„์— ์žˆ๋Š” ๋ชจ๋“  ๋™์ž‘์ด ๋ชจ๋‘ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋ชจ๋‘— ์‹คํ–‰์ด ์ทจ์†Œ๋จ์„ ๋ณด์žฅ 2) ์ผ๊ด€์„ฑ (Consistent) ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃ“๋˜๋ฉด, ์‹œ์Šคํ…œ์€ ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ๊ธฐ๋Œ€ํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋จ ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ์  ๊ตฌ๋งค ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ๊ฒฐ์ œ๋‚ด์—ญ, ๊ตฌ๋งค๋‚ด์—ญ..

    CallableStatement ํ™œ์šฉ(1) - ์˜ค๋ผํด ํ”„๋กœ์‹œ์ €

    1. ํ”„๋กœ์‹œ์ € ์ž‘์„ฑ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •, ํ•™๋ฒˆ ๊ฒ€์ƒ‰, ์ด๋ฆ„ ๊ฒ€์ƒ‰, ์ „์ฒด ๋ฆฌ์ŠคํŠธ, ํ‰๊ท  ๊ณ„์‚ฐ ํ”„๋กœ์‹œ์ € ์ž‘์„ฑ ์‹œ ์œ ์˜์‚ฌํ•ญ developer์—์„œ๋Š” ์ž๋™ ์ปค๋ฐ‹์ด ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ COMMIT ํ•ด์•ผํ•จ %TYPE ํผ์„ผํŠธํƒ€์ž… ํŠน์ • ํ…Œ์ด๋ธ”์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ปฌ๋Ÿผ์˜ ์ž๋ฃŒํ˜•์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์˜๋ฏธ pHak score.hak%TYPE pHak์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ช…์˜ ํƒ€์ž…์„ score ํ…Œ์ด๋ธ”์˜ hak ์ปฌ๋Ÿผ์˜ ํƒ€์ž…์„ ๊ฐ€์ ธ์™€์„œ ์“ฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ 1. SCORE ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ”„๋กœ์‹œ์ € CREATE OR REPLACE PROCEDURE insertScore ( pHak IN score.hak%TYPE, pName IN score.name%TYPE, pBirth IN score.birth%TYPE, pKor IN score...

    CallableStatement

    CallableStatement - PreparedStatement ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค - SQL ์ €์žฅ ํ”„๋กœ์‹œ์ €(stored procedure)๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด - ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๊ตฌ๋ฌธ์—๋Š” ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ์™€ ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ํ˜•ํƒœ ๋‘ ํ˜•ํƒœ ๋ชจ๋‘ IN ๋งค๊ฐœ๋ณ€์ˆ˜(์ž…๋ ฅ), OUT ๋งค๊ฐœ๋ณ€์ˆ˜(์ถœ๋ ฅ) , ๋˜๋Š” INOUT ๋งค๊ฐœ๋ณ€์ˆ˜(์ž…์ถœ๋ ฅ)๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ณ€์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๋ฉฐ ?๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ €์žฅ์œ„์น˜๋กœ ๋‚˜ํƒ€๋ƒ„ - CallableStatement ๊ฐ์ฒด๋Š” Connection์˜ prepareCall(String sql) ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์–ป๋Š”๋‹ค - ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ(function) {? = call procedure_name[(?, ?, ...)]} ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” OUT ๋งค..

    PreparedStatement ํ™œ์šฉ

    PreparedStatement ํ™œ์šฉ

    myBatis๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์— ์„ค๋ช…๋œ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์„ ๊ฐ„ํŽธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค... MemberDTO ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด ํ•œ ํšŒ์›์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ getter, setter์„ ํ†ตํ•ด ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ package db.member2; public class MemberDTO { private String id; private String pwd; private String name; private String birth; private String email; private String tel; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { re..