seong

JDBC INSERT (SCOTT) 본문

데이터베이스/JDBC

JDBC INSERT (SCOTT)

hyeonseong 2022. 8. 16. 15:22

자바로 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로 가서 확인

7777이 제대로 INSERT가 되었다.

'데이터베이스 > 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