ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Back End] JDBC
    Web Development/부스트코스 - Back-End(Java) 2020. 3. 14. 19:29

    JDBC(Java Database Connectivity)

    - 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 대한 규약 

    - 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API

    - SQL과 프로그래밍 언어의 통합 접근 중 한 형태

    - JAVA는 표준 인터페이스는 JDBC API 를 제공한다.

    - 데이터베이스 벤더 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버를 제공한다.

     

    JDBC 단계별 사용 방법

    1. import java.sql.*;

    2. 드라이버를 로드 한다.

    3. Connection 객체를 생성한다.

    4. Statement 객체를 생성 및 질의 수행

    5. SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.

    6. 모든 객체를 닫는다. (객체들을 사용하고 반드시 제거해줘야함, 데이터베이스에 대한 객체의 양이 한정되기 때문)

    JDBC 단계별 사용 방법(with 코드)

     

    1. IMPORT

    import java.sql.*;

     

    2. 드라이버 로드

    Class.forName( "com.mysql.jdbc.Driver" ); //MySQL 데이터베이스 드라이버 로드

    Class.forName( "com.mysql.jdbc.Driver" ); //MySQL 데이터베이스 드라이버 로드

     

    3. Connection 얻기

    String dburl = "jdbc:mysql://localhost/dbName"; 
    Connection con = DriverManager.getConnection ( dburl, ID, PWD ); //데이터베이스 id, password

     

    [예제1] 

    //DB 연결 코드를 다음과 같이 함수화하여 사용할 수도 있다.
    public static Connection getConnection() throws Exception{
    	String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
    	String user = "bbwwpark";
    	String password = "bbwwpark123";
    	Connection conn = null;
    	Class.forName("oracle.jdbc.driver.OracleDriver");
    	conn = DriverManager.getConnection(url, user, password);
    	return conn;
    }

     

    4. Statement 생성

    Statement stmt = con.createStatement();

     

    5. 질의 수행

    ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE id=1" );
    
    //참고(아래와 같이 쓸 수 있음)
    /*
    stmt.execute(“query”);         //any SQL
    stmt.executeQuery(“query”);    //SELECT
    stmt.executeUpdate(“query”);   //INSERT, UPDATE, DELETE
    */

     

    6. ResultSet으로 결과 받기

    ResultSet rs =  stmt.executeQuery( "select no from user" );
    while ( rs.next() ) // rs의 다음 객체(튜플)을 받아온다. 없다면 false 반환
          System.out.println( rs.getInt( "no") );

     

    7. Close

    rs.close();
    stmt.close();
    con.close();

    [예제2] 

    public List<GuestBookVO> getGuestBookList(){
    		List<GuestBookVO> list = new ArrayList<>();
    		GuestBookVO vo = null;
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try{
    			conn = DBUtil.getConnection();
    			String sql = "select * from guestbook";
    			ps = conn.prepareStatement(sql);
    			rs = ps.executeQuery();
    			while(rs.next()){
    				vo = new GuestBookVO();
    				vo.setNo(rs.getInt(1));
    				vo.setId(rs.getString(2));
    				vo.setTitle(rs.getString(3));
    				vo.setConetnt(rs.getString(4));
    				vo.setRegDate(rs.getString(5));
    				list.add(vo);
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally {
    			DBUtil.close(conn, ps, rs);
    		}		
    		return list;		
    	}

    [예제3] 

    public int addGuestBook(GuestBookVO vo){
    		int result = 0;
    		Connection conn = null;
    		PreparedStatement ps = null;
    		try{
    			conn = DBUtil.getConnection();
    			String sql = "insert into guestbook values("
    					+ "guestbook_seq.nextval,?,?,?,sysdate)";
    			ps = conn.prepareStatement(sql);
    			ps.setString(1, vo.getId());
    			ps.setString(2, vo.getTitle());
    			ps.setString(3, vo.getConetnt());
    			result = ps.executeUpdate();
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally {
    			DBUtil.close(conn, ps);
    		}
    		
    		return result;
    	}

     

    [예제4] 

    public static void close(Connection conn, PreparedStatement ps){
    		if (ps != null) {
    			try {
    				ps.close();
    			} catch (SQLException e) {e.printStackTrace(); }
    		}
    		if (conn != null) {
    			try {
    				conn.close();
    			} catch (SQLException e) {e.printStackTrace();}
    		}
    	}

    'Web Development > 부스트코스 - Back-End(Java)' 카테고리의 다른 글

    [Back End] Rest API  (0) 2020.03.14
    [Back End] JDBC - 실습  (0) 2020.03.14
    [Back End] JSTL, EL, Maven  (0) 2020.03.09
    [Back End] Scope  (0) 2020.03.07
    [Back End] Redirect & Forward  (0) 2020.03.06

    댓글

Designed by Tistory.