Skip to content

Latest commit

ย 

History

History
298 lines (195 loc) ยท 9.03 KB

File metadata and controls

298 lines (195 loc) ยท 9.03 KB

JDBC

java๋กœ JDBC์—ฐ๋™ํ•˜๋Š” ๊ธฐ์ˆ 

(SQL๋ฌธ์„ ์ž๋ฐ”๋กœ ๋งŒ๋“  ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ž๋ฐ”์˜ ๊ธฐ์ˆ )

[ JDBC api ์‚ฌ์šฉ ์ „ ์ฒ˜๋ฆฌ ์ˆœ์„œ ]

  1. jdbc๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ์กฐ์‚ฌ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.

    • C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib ํด๋”์— ์žˆ๋Š” ojdbc.jarํŒŒ์ผ
  2. JVM์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ์—ฐ๊ฒฐ

    1. ์ดํด๋ฆฝ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(Application)

    โ‘  ์ž‘์—… ์ค‘์ธ ํ”„๋กœ์ ํŠธ ์„ ํƒ

    โ‘ก ํ”„๋กœ์ ํŠธ์—์„œ ๋‹จ์ถ•๋ฉ”๋‰ด ์„ ํƒ -> [Build path] - [Configure Build parth] - [library]

    โ‘ข ๋Œ€ํ™”์ƒ์ž์—์„œ ์„ธ ๋ฒˆ์งธ ํƒ‘์ธ [Librariesํƒญ ์„ ํƒ] ( ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, API๋ฅผ ์ธ์‹์‹œํ‚ฌ ๋•Œ๋„ ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ๋„ฃ๋Š”๋‹ค.)

    โ‘ฃ [Add External jar...] ์„ ํƒํ•˜๊ณ  1๋ฒˆ์œ„์น˜์— ์žˆ๋Š” ojdbc6.jarํŒŒ์ผ์„ ๋“ฑ๋ก

[ JDBC api ์‚ฌ์šฉํ•˜๊ธฐ ]

  1. jdbc๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ์กฐ์‚ฌ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.

    • ์˜ค๋ผํด ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ : JVM์—์„œ ๋“œ๋ผ์ด๋ฒ„ ๋‚ด์˜ api๋ฅผ ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Classํด๋ž˜์Šค์˜ forName๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ•ต์‹ฌํด๋ž˜์„œ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์ž‘์—…

      [๋ฌธ๋ฒ•]

      Class.forName("DBMS๋“œ๋ผ์ด๋ฒ„์˜ ํ•ต์‹ฌํด๋ž˜์Šค๋ช…")
          		  -------------------------โ‡’ํŒจํ‚ค์ง€๋ช…๊นŒ์ง€ ๋ช…์‹œ
      • ์˜ค๋ผํด: oracle.jdbc.driver.OracleDriver

      • MySQL : com.mysql.jdbc.Driver

  2. DBMS์— ์—ฐ๊ฒฐํ•˜๊ธฐ

    • DriverManagerํด๋ž˜์Šค์˜ getConnection๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ž‘์—…

      1. static๋ฉ”์†Œ๋“œ์ด๋ฏ€๋กœ ํด๋ž˜์Šค์ด๋ฆ„์œผ๋กœ ์•ก์„ธ์Šค

      2. throws SQLExceptionํ•˜๊ณ  ์žˆ๊ณ , SQLException์€ RuntimeException์˜ ํ•˜์œ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ try~catch๋ฅผ ์ด์šฉํ•ด์„œ exception์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

      3. ๋งค๊ฐœ๋ณ€์ˆ˜

      url : DBMS๋‚ด๋ถ€์—์„œ ์ธ์‹ํ•  ์—ฐ๊ฒฐ๋ฌธ์ž์—ด (์–ด๋–ค DBMS๋ฅผ ์“ฐ๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.)

      โ€‹ [์˜ค๋ผํด]

      jdbc:oracle:thin:@70.12.115.50:1521:xe
      • jdbc:oracle:thin: ์˜ค๋ผํด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ
      • @70.12.115.50: DBMS๊ฐ€ ์„ค์น˜;๋˜์–ด ์žˆ๋Š” PC์˜ ip
      • 1521 : port
      • xe : ์„œ๋น„์Šค๋ช…

      ex) jdbc:oracle:thin:@127.0.0.1:1521:xe => localhost์™€ ๋™์ผ - ๋กœ์ปฌ์— ์—ฐ๊ฒฐ

      [mysql]

      jdbc:mysql://ip:port/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…(port - 3306)

      user : ์ ‘์†๊ณ„์ •

      password : ์ ‘์†ํ• ๊ณ„์ •์˜ ํŒจ์Šค์›Œ๋“œ

      1. ๋ฆฌํ„ดํƒ€์ž…
      • ์—ฐ๊ฒฐ์ •๋ณด๋ฅผ java.sql.Connectionํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด DriverManager์˜getConnection๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด DBMS์— ์—ฐ๊ฒฐ ํ›„ ์—ฐ๊ฒฐ์ •๋ณด๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฆฌํ„ดํ•œ๋‹ค.
      • ์—ฐ๊ฒฐ๊ฐ์ฒด์˜ ํƒ€์ž…์€ java.sql.Connection์ด์ง€๋งŒ ์–ด๋–ค DBMS๋ฅผ ์ ‘์†ํ–ˆ๋ƒ์— ๋”ฐ๋ผ Cpnnection์˜ ํ•˜์œ„ ๊ฐ์ฒด๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
      • ๋‚ด๋ถ€์—์„œ๋Š” ์ ‘์†๋œ DBMSํšŒ์‚ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์† Connection์ด๋ฆฌํ„ด๋˜๋„๋ก ๋‹คํ˜•์„ฑ์ด ์ ์šฉ๋˜์–ด ์žˆ๋‹ค.
      1. ์‚ฌ์šฉ๋ฐฉ๋ฒ•
      Connection con = 
          	DriverManager.getConnection(url,user,password)

      => ์–ด๋–ค DBMS๋ฅผ ์“ฐ๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ฆฌ์ปจ๋˜๋Š” Connection๊ฐ์ฒด๋ฅผ con์ด๋ผ๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ• ๋‹น

  3. SQL์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” Statement๊ฐ์ฒด ์ƒ์„ฑ

    statement : ์ •์  SQL์„ ์‹คํ–‰ (๋ณด์•ˆ์— ์ทจ์•ฝ - SQLInjection์— ์ทจ์•ฝ) โ†‘ ์ƒ์†

    preparedStatement : ๋™์  SQL์„ ์‹คํ–‰ (์‹œํ์–ด์ฝ”๋”ฉ์— ์ ํ•ฉ)

    โ€‹ โ†‘ ์ƒ์†

    CallableStatement : ๊ฐ DBMS์— ํŠนํ™”๋œ SQL์„ ์‹คํ–‰ ex.์˜ค๋ผํด : PL-SQL

    1. Statement๊ฐ์ฒด๋ฅผ ์ด์šฉ Connection ๊ฐ์ฒด์— ์žˆ๋Š” createStatement๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ Connection ์ •๋ณด๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
    Statement stmt = con.createStatement();
    --------
    	โ””> java.sql.Statemetํƒ€์ž…์ด์ง€๋งŒ
    		๋“œ๋ผ์ด๋ฒ„ํŒŒ์ผ์— ํฌํ•จ๋œ Statement ๊ฐ์ฒด๊ฐ€ ๋ฆฌํ„ด.
    1. PreparedStatement๊ฐ์ฒด๋ฅผ ์ด์šฉ
  4. SQL์‹คํ–‰

    1. Statement ์ด์šฉ

    โ‘  executeUpdate : insert, updeate, delete๋ฌธ์„ ์‹คํ–‰

    int ๊ฒฐ๊ณผ๊ฐ’ = stmt.executeUpdate(sql๋ฌธ)
    ---------					   -----
    โ””> sql๋ฌธ ์‹คํ–‰ ๊ฒฐ๊ณผ			     โ””>insert, delete, update

    ๋ช‡ ๊ฐœ์˜ row๊ฐ€ ๋ณ€๊ฒฝ๋๋Š”์ง€ ๋ฆฌํ„ด

    1. PreparedStatement ์ด์šฉ => ๋™์ SQL๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    • sql์ด ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์€ (๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋จ)

      • ์ฟผ๋ฆฌ๋ฌธ์„ ์ฝ๊ณ  ๋ถ„์„
      • ์ปดํŒŒ์ผ
      • ์‹คํ–‰
    • statement๋Š”์œ„์˜ ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ  ์ž‘์—…ํ•˜์ง€๋งŒ, PreparedStatement๋Š” ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ์บ์‹œ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์บ์‹œ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด์„œ ์ž‘์—…ํ•จ. (ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋จ)

    • PreparedStatement์˜ sql๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ sql๋ฌธ์„ ๋ฏธ๋ฆฌ ํŒŒ์‹ฑํ•œ ํ›„, ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•ด์„œ ์ž‘์—…ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’๋“ค๋งŒ ๋‚˜์ค‘์— ์—ฐ๊ฒฐํ•ด์„œ ์ธ์‹์‹œํ‚ค๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

      โ‘  sql๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ ์™ธ๋ถ€์—์„œ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์„ ?๋กœ ์ •์˜ํ•œ๋‹ค.

      โ‘ก sql๋ฌธ์„ ๋ฏธ๋ฆฌ ํŒŒ์‹ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹คํ–‰ํ•  ๋•Œ sql์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  PreparedStatement๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ sql๋ฌธ์„ ์ „๋‹ฌํ•œ๋‹ค.

      preparedStatement ptmt = con.prepareStatement(sql๋ฌธ)

      โ‘ข?์— ๊ฐ’์„ ์…‹ํŒ… PreparedStatement ๊ฐ์ฒด์— ์ •์˜๋˜์–ด ์žˆ๋Š” setXXXX๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉ ResultSet๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ์„ฑ

      setXXXX(index, ๊ฐ’)
      ------- -----  --
      ์ปฌ๋Ÿผํƒ€์ž…  ?์ˆœ์„œ    โ””> ์ปฌ๋Ÿผ์— ์„ค์ •ํ•  ๊ฐ’
      		1๋ถ€ํ„ฐ์‹œ์ž‘

      ์˜ค๋ผํด ํƒ€์ž…๊ณผ ๋งค์นญ๋˜๋Š” setXXXX ๋ฉ”์†Œ๋“œ

      • char, varchar2 -> setString(1,"XXXX")

      • number, integer -> setInt (1,0000)

      • ์†Œ์ˆ˜์ ์ด ์žˆ๋Š” number -> setDouble(1, 0.0)

      • date -> setDate(1, java.sql.Date๊ฐ์ฒด)

      โ‘ฃ ์‹คํ–‰๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

      • insert, delete, update

        int result = ptmt.executeUpdate();
      • select

        ResultSet rs = ptmt.executeQuery();
  5. ๊ฒฐ๊ณผ๊ฐ’ ์ฒ˜๋ฆฌ

    1. insert, delete, update๋ชจ๋‘ ๋™์ผ
    • int๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅ
    1. select

    โ‘  select๋ฌธ์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ResultSet์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•œ๋‹ค.

    ResultSet rs = stmt.excuteQuery("sql๋ฌธ");

    โ‘ก ResultSet์•ˆ์—์„œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌ (ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ฐ–์— ๋ชป์ฝ์œผ๋‹ˆ๊นŒ.) ์ฒ˜์Œ ๋ฐ˜ํ™˜๋˜๋Š” ResultSet์—์„œ Cursor๊ฐ€ ๋ ˆ์ฝ”๋“œ์— ์œ„์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Cursor๋ฅผ ResultSet์•ˆ์˜ ๋ ˆ์ฝ”๋“œ์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ถ€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

    while(rs.next()){
          ----------> ๋‹ค์Œ ๋ ˆ์ฝ”๋“œ๋กœ Cursor๋ฅผ ์ด๋™ํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด 					true๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ 
    					๋ ˆ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
                            
           } 

    โ‘ข ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’์„ ์ฝ๋Š” ์ž‘์—…

    • ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    • ResultSet๋‚ด๋ถ€์—์„œ ์ œ๊ณต๋˜๋Š” getXXXX๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค. (๋Œ€๋ถ€๋ถ„ XXXX๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋  ๊ฒƒ์ž„)

      • rs.getXXXX(1) --------- > ๋ฐ์ดํ„ฐํƒ€์ž…, ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ์›๋ž˜์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์กฐํšŒ๋œ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ(indext๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘)
    • ์˜ค๋ผํด(DBMS)์˜ ํƒ€์ž…๊ณผ ๋งค์นญ๋˜๋Š” ์ž๋ฐ”์˜ ํƒ€์ž…์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ช…์ด ๊ตฌ์„ฑ๋จ.

      • varchar2 of char๋กœ ์ •์˜๋œ ์ปฌ๋Ÿผ๊ฐ’ : getString(์ปฌ๋Ÿผ์˜ ์ˆœ์„œ or ์ปฌ๋Ÿผ๋ช…)

      • ์†Œ์ˆ˜์ ์—†๋Š” number or integer : getInt(์ปฌ๋Ÿผ์˜์ˆœ์„œ or ์ปฌ๋Ÿผ๋ช…)

      • ์†Œ์ˆ˜์ ์ด ์žˆ๋Š” number : getDouble(์ปฌ๋Ÿผ์˜์ˆœ์„œ or ์ปฌ๋Ÿผ๋ช…)

      • ๋‚ ์งœ๋ฐ์ดํ„ฐ : getDate(์ปฌ๋Ÿผ์˜์ˆœ์„œ or ์ปฌ๋Ÿผ๋ช…)

      while(rs.next()){
      	 ----------> ์กฐํšŒ๋œ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์—
      					๋ฐ˜๋ณต ์ž‘์—…ํ•˜๊ฒ ๋‹ค๋Š” ๋ง.
      	 sysout(rs.getString(1)) -> ์กฐํšŒ๋œ ๋ ˆ์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ								๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ๋ง.
      	 sysout(rs.getString("ename")) -> ์กฐํšŒ๋œ ๋ ˆ์ฝ”๋“œ์˜ ์ปฌ๋Ÿผ๋ช…์ด 					ename์ธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ๋ง.
      	 	   
      	 	   }
  6. ์ž์› ๋ฐ˜๋‚ฉ

    • ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ์ƒํƒœ. ResultSet, Statement, Connection๋ชจ๋‘ ๋ฐ˜๋‚ฉํ•ด์•ผ ํ•œ๋‹ค. close๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ž์›ํ•ด์ œ. ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ถ€ํ„ฐ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.
  7. ๋“œ๋ผ์ด๋ฒ„ํŒŒ์ผ์„ JVM์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š”์œ„์น˜์— ์—ฐ๊ฒฐ

  8. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ (ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ)

    • ๋‚ด๊ฐ€ new๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚ด๋ถ€ ์ŠคํŽ™์„ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ (lock ๊ฑธ๋ ค์žˆ์Œ) ์™ธ๋ถ€์—์„œ ๊ฐ–๊ณ ์˜จ jar ํŒŒ์ผ = ์™ธ๋ถ€์—์„œ ๊ฐ–๊ณ ์˜จ API.
  9. DBMS์—ฐ๊ฒฐ

  10. SQL์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

  11. SQL ์‹คํ–‰