알고보면코딩천재
JavaDB통신 Entity, ArrayList 본문
디버깅
첫줄에 전체적인 오류 확인
내가 쓴 클래스만 보면 된다.
System.out.println(1);
1. log 넣어주면 오류 어디서 터졌는지 알 수 있다
2. 디버그
on premese
on demend
프로비저닝 세팅
프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.
catch (Exception e) {
e.printStackTrace();
StackTrace();오류 잡기
SELECT * FROM EMP;
1. 행(EMPNO, ENAME, JOB,,,,) (클래스)
int , String, String int, int, int, int ->클래스 옮기기(Entity)
Entity 테이블 이름과 똑같이 만든다
private 상태
package db;
import java.sql.Timestamp;
// 엔티티
public class Emp {
private int empno;
private String ename;
private String job;
private int mgr;
private Timestamp hiredate;
private int sal;
private int comm;
private int deptno;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getMgr() {
return mgr;
}
public void setMgr(int mgr) {
this.mgr = mgr;
}
public Timestamp getHiredate() {
return hiredate;
}
public void setHiredate(Timestamp hiredate) {
this.hiredate = hiredate;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public int getComm() {
return comm;
}
public void setComm(int comm) {
this.comm = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
}
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SelectAndPush {
static void send() {
}
static Connection connection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SCOTT", "TIGER");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
try {
// 1.디비연결
Connection conn = connection();
// 2.문장완성
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp");
// 3.문장정송
ResultSet rs = pstmt.executeQuery();
// 4.커서 false 때까지 내리기
while (rs.next()) { // 14바퀴
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
바이트 통신이니까 모든것은 String으로 받을 수 있다.
DB에 있는거 가져와서 java에 데이터로 담고
{} 스택
커서는 한번 내려가면 못올라가서 데이터 날아간다. 그래서 담는다
2.행 14줄 ArrayList에 차곡 차곡 담기 =(table)
ArrayList<Emp> emps = new ArrayList<>();
while (rs.next()) { // 14바퀴
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
emps.add(emp);
}
최종적으로 담겨야할 데이터는 최상단에 올려야한다.
// 데이터 확인하기
int size = emps.size();
for (int i = 0; i < size; i++) {
System.out.println(emps.get(i).getEname());
}
send(); 호출
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class SelectAndPush {
// 통신은 하지 않지만, 통신을 한다고 가정하고
static void send(ArrayList<Emp> datas) {
// 내부는 안적음.
}
static Connection connection() { // 똑똑
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SCOTT", "TIGER");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
ArrayList<Emp> emps = new ArrayList<>();
try {
// 1.디비연결
Connection conn = connection();
// 2.문장완성
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp");
// 3.문장정송
ResultSet rs = pstmt.executeQuery();
// 4.커서 false 때까지 내리기
while (rs.next()) { // 14바퀴
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
emps.add(emp);
}
} catch (Exception e) {
e.printStackTrace();
}
// 데이터 확인하기
int size = emps.size();
for (int i = 0; i < size; i++) {
System.out.println(emps.get(i).getEname());
}
// 데이터 전송하기
send(emps);
}
}
코드 리팩토링
1.EmpDao.java
2. DBConnection.java
3. EmpApp.java
만들기
package db;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
// public이 붙어야 다른 패키지에서 import 가능
public static Connection connection() { // 똑똑
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SCOTT", "TIGER");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
// Data, Access, Object
public class EmpDao {
public ArrayList<Emp> 직원목록보기() {
ArrayList<Emp> emps = new ArrayList<>();
try {
Connection conn = DBConnection.connection();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
emps.add(emp);
}
} catch (Exception e) {
e.printStackTrace();
}
return emps;
} // end of 직원목록보기
}
}
package db;
import java.util.ArrayList;
public class EmpApp {
public static void main(String[] args) {
EmpDao empDao = new EmpDao();
ArrayList<Emp> emps = empDao.직원목록보기();
}
}
실습
직원한건보기라는 매서드를 만들어서
empno가 7369인 직원 이름을 출력하여라.
package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
// Data, Access, Object
public class EmpDao {
public ArrayList<Emp> 직원목록보기() {
ArrayList<Emp> emps = new ArrayList<>();
try {
Connection conn = DBConnection.connection();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
emps.add(emp);
}
} catch (Exception e) {
e.printStackTrace();
}
return emps;
} // end of 직원목록보기
public Emp 직원한건보기(int empno) {
Emp emp = new Emp();
try {
Connection conn = DBConnection.connection();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp WHERE empno="+empno);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setJob(rs.getString("job"));
emp.setMgr(rs.getInt("mgr"));
emp.setHiredate(rs.getTimestamp("hiredate"));
emp.setSal(rs.getInt("sal"));
emp.setComm(rs.getInt("comm"));
emp.setDeptno(rs.getInt("deptno"));
}
} catch(Exception e) {
e.printStackTrace();
}
return emp;
}
}
package db;
import java.util.ArrayList;
public class EmpApp {
public static void main(String[] args) {
EmpDao empDao = new EmpDao();
ArrayList<Emp> emps = empDao.직원목록보기();
Emp emp = empDao.직원한건보기(7369);
System.out.println(emp.getEname());
}
}
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM emp WHERE empno="+empno);
Comments