[Oracle] JDBC


Contents


JDBC

Java DataBase Connection

์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๋™ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— workspace์— lib ํด๋”๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๊ด€๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

  • lib : ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • bin : ์‹คํ–‰ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”
  • src : ์ฝ”๋“œ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋”

๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•œ ํ›„ ๋นŒ๋“œ ํŒจ์Šค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. (๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋”ฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ)



์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•

๋‹ค์Œ์˜ ํ˜•์‹์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

Connection conn = null;

try {
    Class.forName("oracle.jdbc.OracleDriver");
    System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ์„ฑ๊ณต");

    conn = DriverManager.getConnection(url, id, pwd);
    System.out.println("์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์„ฑ๊ณต!");
} catch (ClassNotFoundException e) {
    // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}
  1. Connection interface๋ฅผ ์ƒ์„ฑ
  2. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
  3. ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†ํ•œ ํ›„ Connection ๊ฐ์ฒด์— ๋Œ€์ž…
    • DriverManager.getConnection()์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ url์™€ ์ ‘์†ํ•  ๊ณ„์ •์˜ id, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.




Query ์‹คํ–‰

Java์™€ DB๊ฐ€ ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•˜์˜€์œผ๋ฉด ๋‹ค์Œ์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด Query๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. Statement

์‚ฌ์šฉ์ž์˜ ๊ฐœ์ž…์ด ์—†์ด Query๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

import java.sql.Statement;

...

Statement stmt = null; // ์ฟผ๋ฆฌ ์ „์†ก ๊ฒฐ๊ณผ ๊ฐ€์ ธ์˜ค๊ธฐ

stmt = conn.createStatement();

// insert into "INFO" values (101, 'ํ™๊ธธ๋™', 'AB');
String name = "'ํ™๊ธธ๋™'";
String bloodType = "'AB'";
String sql = "insert into \"INFO\" values (101, " + name + ", '1444-01-01', " + bloodType + ")";
  • ์‹คํ–‰ํ•  sql์„ String ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค.

  • stmt.executeUpdate(sql) : insert, delete์™€ ๊ฐ™์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
      int result = stmt.executeUpdate(sql); 
    

    update๋œ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • stmt.executeQuery(sql) : select ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
      import java.sql.ResultSet;
      ...
      ResultSet rs = null;
      String sql = "select \"NUMBER\", \"NAME\" as \"NICKNAME\", \"BLOOD_TYPE\" from \"INFO\"";
      rs = stmt.executeQuery(sql); // ์ฟผ๋ฆฌ ์ „์†ก!
      while (rs.next()) {
          System.out.print(rs.getLong(1) + ",");
          System.out.println(rs.getString("NICKNAME") + ", ");
          System.out.println(rs.getString(3));
      }
    
    • ResultSet์œผ๋กœ select ๋ฌธ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š”๋‹ค.
    • ResultSet์„ ์ถœ๋ ฅํ•  ๋•Œ๋Š” index๋กœ ์ ‘๊ทผ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ column๋ช…์œผ๋กœ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(get์ž๋ฃŒํ˜•()์€ ํ•„์ˆ˜)



2. PreparedStatement

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ Statement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SQL Injection์ด ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค.

  • SQL Injection : ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์•ˆ์ƒ์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ, ์ž„์˜์˜ SQL๋ฌธ์„ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰๋˜๊ฒŒ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๋Š” ํ–‰์œ„
import java.sql.PreparedStatement;

...

PreparedStatement pstmt = null; 

String name = "ํ™๊ธธ๋™";
String bloodType = "AB";
String sqlD = "delete from \"INFO\" where \"NAME\" = ? and \"BLOOD_TYPE\" = ?";

pstmt = conn.prepareStatement(sqlD);
pstmt.setString(1, name);
pstmt.setString(2, bloodType);

int result = pstmt.executeUpdate();
  1. SQL ์ฟผ๋ฆฌ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•  PreparedStatement๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. SQL๋ฌธ String ์ž๋ฃŒํ˜• ์ƒ์„ฑ
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ๋ฐ›์€ ์ž๋ฆฌ๋Š” ?๋ฅผ ๋„ฃ๋Š”๋‹ค.
  3. prepareStatement(sql)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น SQL๋ฌธ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ค€๋น„ํ•œ๋‹ค.
  4. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ ?๋ฅผ ์ฑ„์›Œ๋„ฃ๋Š”๋‹ค.
    • pstmt.setString(index, value) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋„ฃ์„ ?์˜ ์ธ๋ฑ์Šค์™€ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
    • ์ธ๋ฑ์Šค๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  5. SQL ๋ฌธ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด update๋œ ํ–‰์˜ ๊ธธ์ด๋‚˜ select๋œ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.





ยฉ 2022. by Yejin Ha

Powered by JihyunRyu