ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA ์ž๋ฐ” JDBC ์˜ค๋ผํด DB ์—ฐ๋™
    JAVA 2020. 8. 18. 09:16

    ๐ŸŽฏ ์ž๋ฐ” JDBC ์˜ค๋ผํด DB ์—ฐ๊ฒฐ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

     

     

     

     

    ์ž๋ฐ” JDBC

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” API์ด๋‹ค.

     

     

    ์˜ค๋ผํด DB ์—ฐ๋™ํ•˜๊ธฐ

    ์ž๋ฐ” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ์˜ค๋ผํด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค. JDBC ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋“œ๋ผ์ด๋ฒ„๋ฅผ buildPath์— ์ถ”๊ฐ€ํ•˜๋Š” ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

     

    ojdbc5_g.jar ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค

    ์˜ค๋ผํด ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ €์žฅ๋œ ํด๋” ์œ„์น˜ : C:\app\User\product\11.2.0\dbhome_1\jdbc\lib

     

    ์ฐพ๊ธฐ์‰ฝ๊ฒŒ ๋”ฐ๋กœ ๋นผ๋†“๊ธฐ

    ๋งค๋ฒˆ ์ € ๊ธด ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„๊ฐ€๊ธฐ ํž˜๋“ค ๋• ์งง์€ ๊ฒฝ๋กœ์˜ ํด๋”๋ฅผ ํ•˜๋‚˜ ํŒŒ์„œ ๋ณด๊ด€ํ•œ๋‹ค.

     

    ์ž๋ฐ” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์—์„œ ์˜ค๋ฅธ์ชฝ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  Build Path -> Configure Build Path๋ฅผ ํด๋ฆญํ•œ๋‹ค.

     

    Libraries ํƒญ์—์„œ ์™ธ๋ถ€ jarํŒŒ์ผ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  oracle_jar ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

     

    ํ”„๋กœ์ ํŠธ์— ์ƒ์„ฑ๋จ

     

     

     

    ์ฝ”๋“œ ์‹คํ–‰ ์ˆœ์„œ

            //1. 4๊ฐ€์ง€ ์ •๋ณด
            String driver = "oracle.jdbc.driver.OracleDriver"; 
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            String userid = "scott";
            String passwd = "tiger";

    ๊ฐ€์žฅ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์„ ์œ„ํ•œ 4๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด์— ์ €์žฅํ•œ๋‹ค. ์˜ค๋ผํด์— ์ €์žฅ๋œ scott ๊ณ„์ •์˜ DB๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

    	//2.๋“œ๋ผ์ด๋ฒ„ ์ƒ์„ฑ
            Connection con = null; //db ์—ฐ๊ฒฐ
            Statement stmt null; //connect๋ฅผ ์ด์šฉํ•ด sql๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด
            ResultSet rs = null; //sql์‹คํ–‰ ํ›„ select ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด

    ๋“œ๋ผ์ด๋ฒ„ ์—ฐ๋™์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Connection, sql ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ Statement, ๋ช…๋ น ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ResultSet์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    ์ฝ”๋“œ์— ๋นจ๊ฐ„์ค„์ด ์ƒ๊ธฐ๋ฉด ํด๋ฆญํ•ด์„œ java.sql์„ importํ•œ๋‹ค. ํด๋ž˜์Šค์˜ ๊ฐ€์žฅ ์œ„์— import ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

     

    ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ถ€ํ„ฐ try ๋ธ”๋ก ์•ˆ์— ์ž‘์„ฑํ•œ๋‹ค.

    1. ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉํ•œ๋‹ค.

    Class.forName(driver);

     

    2. ์˜ค๋ผํด ์—ฐ๊ฒฐ( Connection ์—ฐ๊ฒฐ) url, userid, passwd ์‚ฌ์šฉ

    con = DriverManager.getConnection(url, userid, passwd);

     

    3. sql๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค. ์ŠคํŠธ๋ง ์•ˆ์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค.

    String sql = "select deptno, dname, loc from dept";

     

    4. SQL ์‹คํ–‰์ค€๋น„ ๋‹จ๊ณ„. Statement, PreparedStataement ๋‘ ๊ฐ์ฒด๋ฅผ ์ฃผ๋กœ ์ด์šฉํ•œ๋‹ค. Connection์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์ค„ Statement ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

    stmt = con.createStatement();

     

    5. Statement์˜ sql๋ช…๋ น ๊ฒฐ๊ณผ๋ฅผ ResultSet์œผ๋กœ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•œ๋‹ค. select๋ฌธ์ผ ๊ฒฝ์šฐ executeQuery()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, DML๋ฌธ์ผ ๊ฒฝ์šฐ์—” executeUpdate()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

    rs = stmt.executeQuery(sql);

     

    6. while ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด rs๋กœ ๋ฐ›์€ ์ •๋ณด๋ฅผ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ try๋ฌธ์ด ๋๋‚ฌ๋‹ค.

    while(rs.next()) {
    	int deptno = rs.getInt("deptno");
    	String dname = rs.getString("daname");
    	String loc = rs.getString("loc");
    	System.out.println(deptno + "\t"+dname + "\t"+loc);
    }

    while ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•  ๋•Œ ์ปฌ๋Ÿผ๋ช… ๋Œ€์‹  ์ปฌ๋Ÿผ ์ˆœ์„œ์— ๋งž๋Š” ๋ฒˆํ˜ธ ๋˜๋Š” ๋ณ„์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    while(rs.next()) {
        int deptno = rs.getInt(1);
        String dname = rs.getString(2);
        String loc = rs.getString(3);
        System.out.println(deptno + "\t"+dname + "\t"+loc);
    }

     

    7. catch๋ฌธ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    }catch(ClassNotFoundException e){ 
    	e.printStackTrace();
    }catch(SQLException e) {
    	e.printStackTrace();
    }

     

    8. finally๋ฌธ์—์„œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•œ๋‹ค. ์‹คํ–‰ํ–ˆ๋˜ ๋ฐ˜๋Œ€ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

    finally {
    	try {
    		if(rs!=null)rs.close();
    		if(stmt!=null)stmt.close();
    		if(con!=null)con.close();
    	}catch(SQLException e) {
    		e.printStackTrace();
    	}
    }	

     

    ์ฝ”๋“œ ์ „์ฒด ํ™•์ธํ•˜๊ธฐ

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBC_Test {
    
        public static void main(String[] args) throws SQLException{
            String driver = "oracle.jdbc.driver.OracleDriver";
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            String userid = "scott";
            String passwd = "tiger";
    
            Connection con = null;
            Statement stmt = null;
            ResultSet rs = null;
    
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url, userid, passwd);
    
                String sql = "select deptno, dname, loc from dept";
                stmt = con.createStatement();
                rs = stmt.executeQuery(sql);
    
                while (rs.next()) {
                    int deptno = rs.getInt("deptno");
                    String dname = rs.getString("dname");
                    String loc = rs.getString("loc");
                    System.out.println(deptno + "\t" + dname + "\t" + loc);
                }
            } catch (ClassNotFoundException e) {
                e.getStackTrace();
            } catch (SQLException e) {
                e.getStackTrace();
            } finally {
                try {
                    if (rs != null) rs.close();
                    if (stmt != null) stmt.close();
                    if ( con != null) con.close();
                } catch (SQLException e) {
                    e.getStackTrace();
                }
            }
    
        }
    
    }

     

     

     SQL๋ฌธ ์—ฐ์Šตํ•˜๊ธฐ

    String sql = "select deptno, dname, loc from dept where dname IN('SALES')";

    SELET๋ฌธ์œผ๋กœ ๋ถ€์„œ์ด๋ฆ„์ด ์„ธ์ผ์ฆˆ์ธ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ

        String name = "SALES";
        String sql = "select deptno x, dname, loc from dept where dname='"+ name+"'";

    statement๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ๋”ฐ์˜ดํ‘œ๊ฐ€ ๋“ค์–ด๊ฐ„ ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์›Œ์ง„๋‹ค.

    PreparedStatement pstmt = null; 
    
    String sql = "select deptno, dname, loc from dept"; 
    pstmt = con.prepareStatement(sql); 
    rs = pstmt.executeQuery();

    ๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ๋Š” ์ฃผ๋กœ PreparedStatement๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    String sql2 = "select deptno, dname, loc from dept where dname='๊ฐœ๋ฐœ' or dname='์˜์—…'";
    pstmt = con.prepareStatement(sql2);
    rs = pstmt.executeQuery();
    			
    while (rs.next()) {
    	int deptno = rs.getInt(1);
    	String dname = rs.getString(2);
    	String loc = rs.getString(3);
    	System.out.println(deptno + "\t" + dname + "\t" + loc);
    }

    ๋ถ€์„œ์ด๋ฆ„์ด '๊ฐœ๋ฐœ' ์ด๊ฑฐ๋‚˜ '์˜์—…'์ธ ๋ถ€์„œ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ

     

    int deptno= 13;
    String deptname="๊ฐœ๋ฐœ";
    String loc="์„œ์šธ";
    
    String sql="insert into dept (deptno,dname,loc)"
    +"values ("+deptno+", '"+deptname+"','"+ loc+"')";
    
    stmt = con.createStatement();
    int result= stmt.executeUpdate(sql);
    System.out.println("์‹คํ–‰๋œ ๋ ˆ์ฝ”๋“œ ๊ฐฏ์ˆ˜:" + result);

    INSERT๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ. DML ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ executeUpdate() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

    String sql = "insert into dept(deptno, dname, loc)" + "values (?,?,?)";
    pstmt = con.prepareStatement(sql);
    pstmt.setInt(1, 99);
    pstmt.setString(2, "์„ธ์ผ");
    pstmt.setString(3, "๊ฒฝ๊ธฐ");
    
    int n = pstmt.executeUpdate();
    System.out.println(n + "๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ ์ €์žฅ");

    INSERT๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•. values์—์„œ ์ถ”๊ฐ€ํ•  ๋ฐ์ดํ„ฐ ๋Œ€์‹  ? ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‚˜์ค‘์— PreparedStatement ๊ฐ์ฒด์˜ set๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ?๊ธฐํ˜ธ์˜ ์ˆœ์„œ(1๋ถ€ํ„ฐ์‹œ์ž‘)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๊ฐ’์„ set๋ฉ”์†Œ๋“œ๋กœ ์„ค์ •ํ•œ๋‹ค. set๋ฉ”์†Œ๋“œ๋Š” ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐํ˜•์— ๋”ฐ๋ผ์„œ setInt, setString (์ˆœ์„œ, ๊ฐ’) ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

     

    String dname = "์˜์—…";
    String loc = "์ œ์ฃผ";
    int deptno = 90;
    
    String sql = "update dept set dname='" + dname + "', loc='" + loc + "'" + "where deptno=" + deptno;
    
    stmt = con.createStatement();
    int num = stmt.executeUpdate(sql);
    System.out.println("์‹คํ–‰๋œ ๋ ˆ์ฝ”๋“œ ๊ฐฏ์ˆ˜: " + num);

    update๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ

     

     

     

    ๐Ÿ˜œ NEXT : JDBC ๋ฌธ์ œ ์—ฐ์Šตํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€