728x90
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBLogic {
private static Connection conn = null;
private static PreparedStatement pstmt = null;
private static ResultSet rs = null;
//생성자로 받을시
public DBLogic(Connection conn) {
this.conn = conn;
}
public DBLogic() {
System.out.println("객체가 생성되었습니다. Connection을 연결시켜 주세요.");
}
//set으로 받을 시
public void setConn(Connection conn) {
this.conn = conn;
}
//조회문 List<Map> 형식으로 반환 테이블명(String), 값(Object)
//-------Select 문
public List<Map<String,Object>> con_Select(String sql) {
List<Map<String, Object>> list_map = new ArrayList<>();
Map<String, Object> map;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData setMetaData = rs.getMetaData();
int sizeOfColums = setMetaData.getColumnCount();
String column;
while (rs.next()){
map = new HashMap<>();
for(int i = 1; i<=sizeOfColums; i++){
column = setMetaData.getColumnName(i);
map.put(column,rs.getString(column));
}
list_map.add(map);
}
} catch (Exception var3) {
var3.printStackTrace();
}
return list_map;
}
public List<Map<String,Object>> con_Select(String sql,Object ... pstmt_input) {
List<Map<String, Object>> list_map = new ArrayList<>();
Map<String, Object> map;
int cnt=0;
try {
pstmt = conn.prepareStatement(sql);
for(Object s : pstmt_input){
if(s instanceof Number){
pstmt.setInt(++cnt,((Number) s).intValue());
}else if(s instanceof String) {
pstmt.setString(++cnt, s.toString());
}
}
rs = pstmt.executeQuery();
//ResultSet의 데이터를 읽어와서 set에 저장
ResultSetMetaData setMetaData = rs.getMetaData();
//setMetaData에서의 컬럼카운트를 읽어옴
int sizeOfColums = setMetaData.getColumnCount();
String column;
while (rs.next()){
//한번 할때마다 해쉬맵을 생성
map = new HashMap<>();
//컬럼 컬럼 사이즈 만큼 for문을 돌림
for(int i = 1; i<=sizeOfColums; i++){
//컬럼 name을 읽어서 온다.
column = setMetaData.getColumnName(i);
// 맵에 컬럼명과 값을 String으로 넣는다.
map.put(column,rs.getString(column));
}
//반환받은 rs를 리스트에 추가한다.
list_map.add(map);
}
} catch (Exception var3) {
var3.printStackTrace();
}
return list_map;
}
// -------------Insert Delete 문
public void con_Update(String sql){
try {
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
} catch (Exception var3) {
var3.printStackTrace();
}
}
public void con_Update(String sql, Object ... pstmt_input) {
int cnt =0;
try {
pstmt = conn.prepareStatement(sql);
for(Object s : pstmt_input){
if(s instanceof Number){
pstmt.setInt(++cnt,((Number) s).intValue());
}else if(s instanceof String) {
pstmt.setString(++cnt, s.toString());
}
}
pstmt.executeUpdate();
} catch (Exception var3) {
var3.printStackTrace();
}
}
//닫기
public void close() {
try {
rs.close();
pstmt.close();
conn.close();
} catch (Exception var2) {
var2.printStackTrace();
}
}
}
먼저 DBLogic에서 는 sql문만의 로직을 구현하도록 합니다. 먼저 sql을 적고 ?가 있으면 가변인자로 Int와 String을 판별해서 넣도록 합니다.
반드시 Connection을 연결해 주어야 합니다.
public interface DBManager {
Connection getConnection();
Connection getConnection(String id, String pw);
abstract Connection getConnection(String db, String id, String pw);
}
외부에서 Connection을 무엇으로 받을지 연결해 주어야 합니다.
셋중에 하나는 무조건 구현해야하여 넣어 주어야합니다.
package project_A_0805.DB_Connection.db.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class MySqlDBManager implements DBManager{
@Override
public Connection getConnection() {
Connection connection = null;
String myDriver="com.mysql.jdbc.Driver";
String myUrl="jdbc:mysql://localhost:3306/{Db}";
String myId="{Id}";
String myPassword="{Pw}";
try{
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl,myId,myPassword);
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
@Override
public Connection getConnection(String db, String id, String pw) {
Connection connection = null;
String myDriver="com.mysql.jdbc.Driver";
String myUrl="jdbc:mysql://localhost:3306/"+db;
String myId=id;
String myPassword=pw;
try{
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl,myId,myPassword);
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
@Override
public Connection getConnection(String id, String pw) {
Connection connection = null;
String myDriver="com.mysql.jdbc.Driver";
String myUrl="jdbc:mysql://localhost:3306/track2_4";
String myId=id;
String myPassword=pw;
try{
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl,myId,myPassword);
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
}
예를 들면 mysql 이라면 이런식으로 구현을 합니다.
public class OracleDBManager implements DBManager{
public Connection getConnection() {
Connection connection = null;
String myDriver= "oracle.jdbc.driver.OracleDriver";
String myUrl = "jdbc:oracle:thin:@localhost:1521:XE";
String myId = "hr";
String myPassword = "1234";
try {
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl, myId, myPassword);
} catch (Exception var6) {
var6.printStackTrace();
}
return connection;
}
@Override
public Connection getConnection(String db, String id, String pw) {
Connection connection = null;
String myDriver= "oracle.jdbc.driver.OracleDriver";
String myUrl = "jdbc:oracle:thin:@localhost:1521:"+db;
try {
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl, id, pw);
} catch (Exception var6) {
var6.printStackTrace();
}
return connection;
}
public Connection getConnection(String id, String pw) {
Connection connection = null;
String myDriver= "oracle.jdbc.driver.OracleDriver";
String myUrl = "jdbc:oracle:thin:@localhost:1521:XE";
try {
Class.forName(myDriver);
connection = DriverManager.getConnection(myUrl, id, pw);
} catch (Exception var6) {
var6.printStackTrace();
}
return connection;
}
}
오라클이라면 이런식으로 구현하여 연결해주고 DBLogic만 생성자로 구현해서 Dao에서 생성만 해주고 사용하면 됩니다.
오류가 있으면 댓글로 부탁드립니다~
728x90
'프로그래밍 > 자바' 카테고리의 다른 글
자바에서 구글메일로 메일보내기 (0) | 2015.06.05 |
---|---|
[자바3일차] 파일클래스/오브젝트/파일관리 (0) | 2014.10.14 |
[자바2일차] JDK라이브러리 시간/수학/함수/문자열/랜덤 (0) | 2014.10.13 |
[자바]레퍼런스와 널값 (0) | 2014.10.12 |