seong
JDBC INSERT (SCOTT) 본문
자바로 DB를 작성 해줄 경우 책임을 분리해 작성 해주는것이 좋다 .
1. DBConnection
package db;
import java.sql.Connection;
import java.sql.DriverManager;
// DB 연결 해줄 클래스
public class DBConnection {
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;
}
}
2. Emp 엔티티
오버로딩될 때 매개변수를 가지고 있는 생성자를 만들었기 때문에 자바에서는 디폴트 생성자를 자동으로 만들어 주지않으므로 디폴트 생성자 선언추가할 때 Emp 생성자 초기화를 위한 생성자 선언
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;
// 아래 3개는 필수 요건이다.
// 1.Getter,Setter,
// 2.디폴트 생성자
// 3.초기화를 위한 생성자
public Emp() { //디폴트 생성자
// TODO Auto-generated constructor stub
}
// 디폴트 생성자 , 우클릭 -> source -> Generate Constructor using field
public int getEmpno() {
return empno;
}
public Emp(int empno, String ename, String job, int mgr, int sal, int comm, int deptno) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
// Getter,Setter
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;
}
}
EmpDAO (메서드 집합)
문장을 전송할 때 executeQuery는 commit을 자동으로 해주지 않는다(SELECT사용할 경우 사용)
그래서 INSERT,UPDATE,DELETE를 할 경우 executeUpdate(commit해줌)를 사용해준다.
result를 쓸때 주의할 점
처음 초기화 때 0으로 초기화 하면 오류코드가 아니다 -> 0은 변화 하지 않았다는 뜻이다.
그러므로 오류코드인 1로 초기화를 해준다.
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 int 직원추가(Emp emp) {// 엔티티를 넣어야하기 때문에 Emp작성
int result = -1; // 최종 데이터를 담을 공간은 가장 위에작성 , pstmt의 result가 0 이면 오류가 아니라 행이 변경 되지 않음을 뜻함. 그러므로 catch가 실행되면 -1이 되어야함.
try {
//1. SQL작성
StringBuilder sql = new StringBuilder();// String을 차곡차곡 저장해주는 자료형이다.
sql.append("INSERT INTO emp ");
sql.append("VALUES(?,?,?,?,sysdate,?,?,?) "); // Collmn의 갯수 8개 만큼 필요 "?"의 5번째 자리는 sysdate
//2. DB세션
Connection conn = DBConnection.connection();
//3. 문장완성
PreparedStatement pstmt = conn.prepareStatement(sql.toString()); // sql은 Builder타입이다 그러므로 호출할때 String 타입으로 호출해준다.
// DB는 1번지부터 시작한다. 배열과 다르게 0번지가 없다.
pstmt.setInt(1,emp.getEmpno());
pstmt.setString(2, emp.getEname());
pstmt.setString(3,emp.getJob());
pstmt.setInt(4, emp.getMgr());
pstmt.setInt(5, emp.getSal());
pstmt.setInt(6, emp.getComm());
pstmt.setInt(7, emp.getDeptno());
//4. 문장 전송
result = pstmt.executeUpdate(); // 문장전송, commit 총2개의 역할을 수행한다. executeQuery는 commit를 수행하지 않는다.
// result == 1 행 하나 변경, 0 변경 안됨, -1 오류
}
catch (Exception e) {
e.printStackTrace();
}
return result;
}
실행해줄 main클래스
객체 호출 할때 바로 초기화 시켜줌.
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);// 7369 empno
Emp emp = new Emp(
7777,
"metacoding",
"MANAGER",
7369,
500,
0,
10
);
empDao.직원추가(emp);
}
}
DBMS로 가서 확인

'데이터베이스 > JDBC' 카테고리의 다른 글
JDBC 설계 및 만드는 순서 (0) | 2022.08.18 |
---|---|
JDBC AppService 만들기(SCOTT) (0) | 2022.08.17 |
JDBC 데이터 SELECT(reading) 실습 (0) | 2022.08.16 |
자바를 오라클 DB에 연동하기 (0) | 2022.08.12 |