2020.10.08 자바프로그래밍 싱글톤패턴, 게시판 연결

 package k_jdbc;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


public class JDBCUtil {


//싱글톤 패턴 : 인스턴스의 생성을 제한하여 하나의 인스턴스만 사용하는 디자인 패턴 

//인스턴스(객체) 하나만 생성을 한다. -> 

//현재 있는 클래스에 객체를 생성하고 다른 클래스가 객체가 필요하면 빌려주게 된다. 

//private 을 붙여서 다른 클래스에서 생성자를 호출할 수 없다. 

private JDBCUtil (){ 

}

//다른 클래스에서 생성자를 호출 할 수 없으니까, 

//인스턴스를 보관할 변수 

private static JDBCUtil instance; 

//인스턴스를 빌려주는 메서드 

public static JDBCUtil getInstance(){ 

if (instance == null){ 

instance = new JDBCUtil (); 

}

return instance;

}

private     String url = "jdbc:oracle:thin:@localhost:1521:xe"; 

private String user = "Aurora"; 

private String password = "java"; 

private Connection con = null ; 

private     PreparedStatement ps = null ; 

private     ResultSet rs = null ;

/*메소드 종류 

* Map<String, Object> selectOne(String sql ) //물음표가 없는 경우 

* Map<String, Object> selectOne(String sql , List<Object> param) //물음표가 있는경우  List<Object> param 물음표에 담을것 List 는 Arraylist 의 

* List<Map<String, Object>> selectList(String sql ) //물음표가 없는 경우

* List<Map<String, Object>> selectList(String sql , List<Object> param  ) //물음표가 있는 경우 

* int update(String sql) //물음표가 있는경우 -> return 값은 

* int update(String sql, List<Object> param) //물음표가 없는경우 

*/

//메소드를 생성했다. 

List<Map<String, Object>> selectList(String sql , List<Object> param  ){

// 리턴타입이 List<Map<String, Object>> 이다. 메소드 이름이 selectList 이고 파라미터가 String sql 과 List<Object> param 이다. 

// String 타입의 sql 을 받았고 ( insert나 select 등등 ) 물음표에 넣어줘서 대괄호를 수행할 때 필요한 값을 List<Object> param 으로 받아준것. 

List<Map<String, Object>> list = new ArrayList<>();

//이 메소드는 리턴을 해줘야하기때문에 try 안에다가 만들어 줄 수 없다. 트라이 밖에 만들어줌 

try {

con = DriverManager.getConnection(url, user, password);

            ps = con.prepareStatement(sql);

            for(int i = 0 ; i < param.size(); i++){

            ps.setObject(i+1, param.get(i));

            }

            rs = ps.executeQuery();

            

            ResultSetMetaData md = rs.getMetaData();

            int columnCount = md.getColumnCount();

            while(rs.next()){

            Map<String, Object > row = new HashMap<>(); 

            //hashMap 을 바깥에 놔주면 HashMap이 저장이 안되서 얘는 while 문 안에 있어야 한다. 

            for(int i = 1; i <= columnCount; i++){ 

            String key = md.getColumnName(i);

            Object value = rs.getObject(i);

            row.put(key, value); 

           

            }

            list.add(row); 

            }

            

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  finally { 

if(rs != null) try { rs.close(); } catch(Exception e) { } 

if(ps != null) try { ps.close(); } catch(Exception e) { } 

if(con != null) try { con.close(); } catch(Exception e) { } 

}

return list; 

}

//물음표가 없는 경우  -> sql에서 컬럼값이 모두 정해져있는것. 

public Map<String, Object> selectOne(String sql){

Map<String, Object> map = new HashMap<>() ; 

try {

con = DriverManager.getConnection(url, user, password);

ps = con.prepareStatement(sql); 

rs = ps.executeQuery(); 

ResultSetMetaData md = rs.getMetaData(); 

int columnCount = md.getColumnCount(); 

while(rs.next()){ 

 

for( int i = 1 ; i <=columnCount ; i++){

String key = md.getColumnName(i); 

Object value = rs.getObject(i); 

map.put(key, value);

}

} //while(rs.next()) 얘의 것 

} catch (SQLException e) {

e.printStackTrace();

}finally { 

if(rs != null) try { rs.close(); } catch(Exception e) { } 

if(ps != null) try { ps.close(); } catch(Exception e) { } 

if(con != null) try { con.close(); } catch(Exception e) { } 

}

return map ; 

} //Map<String, Object> selectOne(String sql ) 의 끝

public Map<String, Object> selectOne(String sql , List<Object> param){ //물음표가 있는경우  List<Object> param 물음표에 담을것 List 는 Arraylist 의 

 

Map<String, Object> map = new HashMap<>() ;

 

try {

con = DriverManager.getConnection(url, user, password);

ps = con.prepareStatement(sql); 

for(int i = 0 ; i < param.size(); i++){ 

ps.setObject(i+1, param.get(i));

}

rs = ps.executeQuery(); 

ResultSetMetaData md = rs.getMetaData(); 

int columnCount = md.getColumnCount(); 

while(rs.next()){ 

 

for(int i = 1 ; i < columnCount; i++ ) { 

String key = md.getColumnName(i); 

Object value = rs.getObject(i); 

map.put(key, value); 

}

}//while 의 끝 

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally { 

if(rs != null) try { rs.close(); } catch(Exception e) { } 

if(ps != null) try { ps.close(); } catch(Exception e) { } 

if(con != null) try { con.close(); } catch(Exception e) { } 

}

return map ;

} //Map<String, Object> selectOne(String sql , List<Object> param) 의 끝 

 

public List<Map<String, Object>> selectList(String sql ){ //물음표가 없는 경우, 여러열이 있는경우 

//파라미터를 받은 메소드

List<Map<String, Object>> list = new ArrayList<>(); 

// 리턴타입 먼저 선언해줌 

try {

con = DriverManager.getConnection(url, user, password);

ps = con.prepareStatement(sql); 

rs = ps.executeQuery(); 

ResultSetMetaData md = rs.getMetaData(); 

int columnCount = md.getColumnCount(); 

while(rs.next()){ 

Map<String, Object> row = new HashMap<>(); 

for(int i = 1 ; i <=columnCount; i++){ 

String key = md.getColumnName(i); 

Object value = rs.getObject(i); 

row.put(key, value); 

}

list.add(row); 

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  finally { 

if(rs != null) try { rs.close(); } catch(Exception e) { } 

if(ps != null) try { ps.close(); } catch(Exception e) { } 

if(con != null) try { con.close(); } catch(Exception e) { } 

}

return list; 

 

 

} //List<Map<String, Object>> selectList(String sql ) 의 끝  // 물음표가 없는 경우. 

}


댓글