JDBC ๐Ÿฅบ

losuifยท2021๋…„ 8์›” 5์ผ
0

๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
1/11
post-thumbnail

ํ•™์› ์‹œํ—˜ ๋งํ•˜๊ณ  ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” JDBC ๐Ÿ˜ญ


JDBC

  • Java Database Connectivity

  • ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ” API
    (API : Application Programming Interfaces
    / ์ž๋ฐ”API : ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง‘ํ•ฉ)

  • JDBC ์ธํ„ฐํŽ˜์ด์Šค : JDBC ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๊ธฐ ์œ„ํ•œ API, Java SE(Java Standard Edition)์—์„œ ์ œ๊ณตํ•˜๋Š” java.sql ํŒจํ‚ค์ง€

  • JDBC ๋“œ๋ผ์ด๋ฒ„ : JDBC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ ๋ชจ์Œ(jarํŒŒ์ผ)



์—ฐ๊ฒฐ ์ˆœ์„œ


๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป JDBC ์‚ฌ์šฉํ•˜๊ธฐ


โ‘  Register Driver

Class.forName~
๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ > ๊ฐ์ฒด์ƒ์„ฑ
DriverManager ํด๋ž˜์Šค > DB์— ์ ‘์†
Driver Class ๋ชป์ฐพ์œผ๋ฉด? > ClassNotFound ์˜ˆ์™ธ์ฒ˜๋ฆฌ

โ–ผ
โ‘ก Get Connection

Connection ๊ฐ์ฒด ์ƒ์„ฑ
DriverManager.getConnection(url, uid, upw)

โ–ผ
โ‘ข Create statement

stmt = conn.createStatement;

โ–ผ
โ‘ฃ Execute Query

rs=stmt.executeQuery("์ฟผ๋ฆฌ๋ฌธ");

โ–ผ
โ‘ค Close connection



Statement / PreparedStatement

  • ์ฟผ๋ฆฌ๋ฌธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด

  • Statement :
    Select
    ์‹คํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ์ปดํŒŒ์ผ ๐Ÿ‘Ž
    ๋ณด์•ˆ์— ๋” ์ทจ์•ฝํ•จ
    ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ ์‹œ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋„ฃ์Œ

  • PreparedStatement :
    Update / Insert
    ๋™์  / ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ sql ์ฟผ๋ฆฌ ์‹คํ–‰
    ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ๋ฐ˜๋ณต์ ์ธ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰
    ์ฟผ๋ฆฌ๋ฌธ ์ƒ์„ฑ ์‹œ ๋ณ€์ˆ˜๊ฐ’ ๋Œ€์‹  ? ์‚ฌ์šฉ
    ?์— set...(setInt, setString, ...)์„ ์‚ฌ์šฉํ•ด ๊ฐ’ ์ง‘์–ด๋„ฃ์Œ
    String sql = "์ฟผ๋ฆฌ๋ฌธ";    // ? ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’ ์ง€์ •
     pstmt = conn.prepareStatement(sql);	
     pstmt.setString(1, ๊ฐ’);
     pstmt.setInt(2, ๊ฐ’);
     pstmt.executeUpdate();



ResultSet

์ฟผ๋ฆฌ๋ฌธ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด, ๊ฒฐ๊ณผ ๋ฆฌํ„ด

rs = stmt.executeQuery(sql);



executeQuery / executeUpdate

  • executeQuery : Select๋ฌธ ์ˆ˜ํ–‰
  • executeUpdate : Insert / Update๋ฌธ ์ˆ˜ํ–‰



conn.createStatement

  • conn.createStatement : ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋‚ด๋ ค๊ฐ

  • TYPE_SCROLL_SENSITIVE : ์ˆœ/์—ญ๋ฐฉํ–ฅ ์ด๋™ ๊ฐ€๋Šฅ but ์ˆ˜์ • ๊ฒฐ๊ณผ ๋ฐ”๋กœ ๋ฐ˜์˜ X

  • TYPE_SCROLL_INSENSITIVE :
    ์ˆœ/์—ญ๋ฐฉํ–ฅ ์ด๋™ ๊ฐ€๋Šฅ, ์ˆ˜์ • ๊ฒฐ๊ณผ ๋ฐ”๋กœ ๋ฐ˜์˜
    rs.next()์‚ฌ์šฉ ์‹œ ๋‹ค์Œ row ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ด์ „ row๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์—†๋Š”๋ฐ, TYPE_SCROLL_INSENSITIVE ์‚ฌ์šฉ ์‹œ ์ปค์„œ๋ฅผ ์ด์ „์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

  • CONCUR_UPDATABLE : ์ˆ˜์ • ๊ฐ€๋Šฅ

  • CONCUR_READ_ONLY : ์ฝ๊ธฐ์ „์šฉ

stmt = conn.createStatement
	(ResultSet.TYPE_SCROLL_INSENSITIVE,
    		ResultSet.CONCUR_UPDATABLE);



rs.next() / rs.beforeFirst()

  • rs.next : ์ปค์„œ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์ด๋™
  • rs.beforeFirst : ์ปค์„œ๋ฅผ ์ œ์ผ ์œ„(๋นˆ๊ณต๊ฐ„)๋กœ

rs.next()๋ฅผ ํ•œ ๋ฒˆ์ด๋ผ๋„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ปค์„œ ์ด๋™
-> ํ›„์— while(rs.next())์“ฐ๋ฉด ์ด์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ๋‚˜์˜จ๋‹ค!
โ–ถ
โ‘  conn.createStatement ์“ฐ๊ณ  while๋ฌธ ์œ„์— rs.beforeFirst() ์ถ”๊ฐ€
or
โ‘ก if (res.next()) { res.beforeFirst(); } ์‚ฌ์šฉ

0๊ฐœ์˜ ๋Œ“๊ธ€