반응형
최근 담당한 업무에서 다양한 DB를 만져야할 필요가 생겨 개발환경 구축을 했고 그 기록을 남긴다.
작업환경 및 전제조건
- Windows10 Home의 wsl에서 도커환경을 구축
- DBeaver설치(DB접속확인용)
- https://koiking.tistory.com/121 이 포스트대로 DB설치가 끝나있을 것
1. 라이브러리 준비하기
라이브러리 의존성관리는 gradle을 사용했다.
// 11g의 드라이버는 MavenCetral에서 다운로드가 안되므로 직접 다운로드 하여 경로를 지정
implementation files('libs/ojdbc6.jar') // ojdbc6.jar 파일의 경로를 지정합니다.
// MySQL JDBC 드라이버 의존성 추가
implementation 'mysql:mysql-connector-java:8.0.27'
// PostgreSQL JDBC 드라이버 의존성 추가
implementation 'org.postgresql:postgresql:42.2.24'
오라클의 11g를 지원하는 jdbc 드라이버는 mavenCentral에서 다운로드가 되지 않아.
파일을 직접 참조할 수 있도록 했다.
2. 코드 설명
※ 전체코드
https://github.com/leeyoungseung/database-ex/commit/8df39dcc05637bdb87f4c7273c4b92f5084253c6
public class DB_01_Connection {
static Map<String, DB_Env> dbs;
// 1. DB에 접속하기 위한 설정 값을 Map에 저장
public static void init() {
dbs = new HashMap<String, DB_Env>();
dbs.put("oracle", new DB_Env("jdbc:oracle:thin:@localhost:1521:xe",
"hr",
"1234",
"oracle.jdbc.driver.OracleDriver",
"SELECT * FROM JOB_HISTORY WHERE ROWNUM <= 100"));
dbs.put("mysql", new DB_Env("jdbc:mysql://localhost:3307/world",
"root",
"mysql",
"com.mysql.cj.jdbc.Driver",
"SELECT * FROM city LIMIT 100"));
dbs.put("postgresql", new DB_Env("jdbc:postgresql://localhost:5433/postgres",
"admin",
"postgres",
"org.postgresql.Driver",
"SELECT * FROM category LIMIT 100"));
}
// 2. 실행시 파라미터로 oracle 또는 mysql 또는 postgresql을 설정한다.
public static void main(String[] args) {
init();
if (args.length == 0 || args[0].equals("") || !dbs.containsKey(args[0])) {
System.out.println("Param Error : "+args[0]);
System.exit(100);
}
// JDBC 연결 정보 설정
DB_Env env = dbs.get(args[0]);
String url = env.getUrl();
String username = env.getUserName();
String password = env.getPasswd();
String driver = env.getDriver();
String sql = env.getTestSql();
// JDBC 드라이버 로드
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
// 데이터베이스 연결
PreparedStatement ps;
ResultSet rs;
try (Connection conn = DriverManager.getConnection(url, username, password)) {
System.out.println("Connection Success -> " + env.toString());
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
switch (args[0]) {
case "oracle":
selectTestOracle(rs); break;
case "mysql":
selectTesMySQL(rs); break;
case "postgresql":
selectTestPostgreSQL(rs); break;
default: break;
}
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. ResultSet을 통해 SQL의 실행결과를 가져오는데 데이터 타입을 미리알고 있어야 한다.
public static void selectTestOracle(ResultSet rs) throws SQLException {
while (rs.next()) {
int employeeId = rs.getInt("EMPLOYEE_ID");
Date startDate = rs.getDate("START_DATE");
Date endDate = rs.getDate("END_DATE");
String jobId = rs.getString("JOB_ID");
System.out.printf("%s, %s, %s, %s \n", employeeId, startDate, endDate, jobId);
}
}
public static void selectTesMySQL(ResultSet rs) throws SQLException {
while (rs.next()) {
int id = rs.getInt("ID");
String name = rs.getString("Name");
String countryCode = rs.getString("CountryCode");
String district = rs.getString("District");
int population = rs.getInt("Population");
System.out.printf("%s, %s, %s, %s %s \n", id, name, countryCode, district, population);
}
}
public static void selectTestPostgreSQL(ResultSet rs) throws SQLException {
while (rs.next()) {
String category_major_cd = rs.getString("category_major_cd");
String category_major_name = rs.getString("category_major_name");
String category_medium_cd = rs.getString("category_medium_cd");
String category_medium_name = rs.getString("category_medium_name");
String category_small_cd = rs.getString("category_small_cd");
String category_small_name = rs.getString("category_small_name");
System.out.printf("%s, %s, %s, %s, %s, %s \n",
category_major_cd, category_major_name, category_medium_cd,
category_medium_name, category_small_cd, category_small_name);
}
}
}
// DB 접속을 위한 설정값을 넣기위한 클래스
class DB_Env {
private String url;
private String userName;
private String passwd;
private String driver;
private String testSql;
public DB_Env(String url, String userName, String passwd, String driver, String testSql) {
super();
this.url = url;
this.userName = userName;
this.passwd = passwd;
this.driver = driver;
this.testSql = testSql;
}
@Override
public String toString() {
return "DB_Env [url=" + url + ", userName=" + userName + ", passwd=" + passwd + ", driver=" + driver + ", testSql=" + testSql + "]";
}
public String getUrl() { return url; }
public String getUserName() { return userName; }
public String getPasswd() { return passwd; }
public String getDriver() { return driver; }
public String getTestSql() { return testSql; }
}
3. 연결확인
반응형
'데이터베이스 > 환경설정 및 개발' 카테고리의 다른 글
Java를 사용하여 Insert, Select, Update, Delete SQL사용하기 (0) | 2023.07.23 |
---|---|
Python을 사용하여 DB연결 (0) | 2023.07.12 |
도커를 사용하여 DB설치 (0) | 2023.07.09 |
댓글