본문 바로가기
개발/Java

[Java] JDBC Connection - 자바와 DB 연결하기

by 코딩하는 흰둥이 2023. 6. 8.
반응형
DBConnection
import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {
    public DBConnection(){
        super();
    }
    public Connection getConnection() throws Exception{
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");       // DB와 연결되는 드라이버 클래스 지정
            String url = "jdbc:log4jdbc:oracle:thin:@localhost:1521/XE";     // DB URL
            String user = "system";                                          // DB user
            String password = "0000";                                        // DB password
            return DriverManager.getConnection(url, user, password);
        }catch (Exception e){
            throw e;
        }
    }
}

 

 

DbTestMain - 임의의 클래스
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashMap;

public class DbTestMain {
    public static void main(String[] args) throws Exception{
        Connection con = null;
        PreparedStatement ps = null;    // Statement 클래스의 상위
        ResultSet rs = null;            // Select 문의 결과를 저장하는 객체
        ResultSetMetaData rsmd = null;  // 컬럼에 대한 정보

        try{
            con = new DBConnection().getConnection();
            con.setAutoCommit(false);

            StringBuffer sql = new StringBuffer();
            sql.append("SELECT 	        \n");
            sql.append("M_ID, 	        \n");
            sql.append("M_PASSWORD , 	\n");
            sql.append("M_NAME , 	    \n");
            sql.append("M_AGE ,	        \n");
            sql.append("M_ADDR  	    \n");
            sql.append("FROM MEMBER	\n");
            sql.append("WHERE M_ID = ?	\n");


            ps = con.prepareStatement(sql.toString());
            ps.setString(1, "user"); // 조건값 세팅 , PreparedStatement 로 인해 값을 set 할 수 있음
            rs = ps.executeQuery(); // 쿼리 실행
            // insert , update , delete 실행 시 ps.executeQuery(); 로 실행됨

            // Select 문의 데이터를 가져오기 위한 로직 start
            rsmd = rs.getMetaData();
            int iColumnCount = rsmd.getColumnCount(); // 조회하는 컬럼 수
            HashMap<String , Object> data = null;
            while(rs.next()){
                data = new HashMap<>();
                for (int i = 0; i < iColumnCount; i++) {
                    String s = rsmd.getColumnName(i + 1);
                    Object o = rs.getObject(s);
                    data.put(s, o);
                }
                System.err.println("data : "+data);
            }
            // Select 문의 데이터를 가져오기 위한 로직 end

            con.commit();
        }catch (Exception e){
            con.rollback();
            e.printStackTrace();
        }finally {
            if(rs != null){
                rs.close();
            }

            if(ps != null){
                ps.close();
            }

            if(con != null){
                con.close();
            }
        }
    }
}

 

System.err.println 로 찍은 data 값

 

DBConnection 클래스는 재사용성을 위해 따로 분리해두었다

댓글