BackEnd/JAVA
[JAVA] 자바와 DB 연결, JDBC, CONNECTION
best
2016. 3. 11. 11:42
자바 프로그램에서 SQL문을 실행하기 위해 DB를 연결해 주는 작업
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 |
package com.ktds.jmj.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ktds.jmj.vo.EmployeesVO;
public class EmployeesDAO { //data access object
public List<EmployeesVO> getAllEmployees() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); // 동적 클래스 로드 (oracleDriver이라는 클래스를 로드하는것)
} catch (ClassNotFoundException e) { // catch에 있는 모든 것들은 이와 같이 쓴다.
throw new RuntimeException(e.getMessage(), e);
}
Connection conn = null;
PreparedStatement stmt = null; // statement와 PreparedStatement는 데이터를 어떤식으로 바이딩하는가의 차이가 있다.
ResultSet rs = null; // select 할 때만 필요하다. 결과를 담아야 하므로
//employees list에 데이터를 하나씩 넣을 것이다.
List<EmployeesVO> employees = new ArrayList<EmployeesVO>();
// 담아주는 코드
try {
// DB에 연결함
conn = DriverManager.getConnection(Const.DB_URL, Const.DB_USER, Const.DB_PASSWORD);
//query를 실행할 준비를 함
String query = " SELECT * FROM EMPLOYEES "; //앞뒤로 공간두기
stmt = conn.prepareStatement(query); // 쿼리 실행 준비 완료
// Query의 실행 결과를 가져온다.
// Select 쿼리 일 때만 사용한다.
rs = stmt.executeQuery();
EmployeesVO employee = null;
while ( rs.next() ) { //next의 의미 : 읽어올때 데이터의 처음부터 읽어오므로 next를 만나면 한 로우를 읽어오고 다음로우로 내려간다. next하면 한줄한줄 내려가면서 데이터를 가져오게 하는 역할 끝까지 가서 next를 만나면 반복이 끝난다.
employee = new EmployeesVO();
employee.setEmployeeId(rs.getInt("EMPLOYEE_ID")); // 가져올 컬럼의 데이터 타입에 따라서 결정, 괄호 안에는 컬럼 이름을 적어준다. EMPLYOEE_ID에 해당하는 데이터를 가져온다.
employee.setFirstName(rs.getString("FIRST_NAME"));
employee.setLastName(rs.getString("LAST_NAME"));
employee.setEmail(rs.getString("EMAIL"));
employee.setPhoneNumber(rs.getString("PHONE_NUMBER"));
employee.setHireDate(rs.getString("HIRE_DATE"));
employee.setJobId(rs.getString("JOB_ID"));
employee.setSalary(rs.getInt("SALARY"));
employee.setCommissionPct(rs.getDouble("COMMISSION_PCT"));
employee.setManagerId(rs.getInt("MANAGER_ID"));
employee.setDepartmentId(rs.getInt("DEPARTMENT_ID"));
//만들어둔 리스트에 넣는다.
employees.add(employee);
}
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
finally { //다쓰면 연결을 해제해야한다. 해제를 안시키면 다른 사용자가 쓸수 없으므로. 닫을때 finally를 사용하여 닫는다.
// 열렸는지 체크하면서 닫아줘야한다. 값이변경됬는지 보고 열린지 판단 / resultset부터 반대로 확인 > statement > connection 순으로
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {}
}
}
return employees;
}
}
|
cs |