코딩이란 무엇일까

JDBC[36일차] JDBC 사용하여 데이터 삽입 본문

국비지원수업

JDBC[36일차] JDBC 사용하여 데이터 삽입

둥구는 지굴다 2022. 12. 13. 23:34

데이터 삽입

JDBC를 사용해 ORACLE과 JAVA를 연동 한 뒤

테이블에 값을 삽입해 볼 것이다.

연동

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

//db연결
public class DBConnecter {
	public static Connection getConnection() {
		Connection conn=null;
		
		String url="jdbc:oracle:thin:@localhost:1521:XE";
		String user="PROJECT";
		String pw="1234";
		
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn=DriverManager.getConnection(url,user,pw);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();	
		}catch(SQLException e) {
			e.printStackTrace();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
}

해당 클래스는 ORACLE과 자바가 연동될 수 있게 따로 메소드로 만들어 두었다.

따라서 기능을 만들 때 마다 메소드를 호출하여 연동시켜줄 수 있다.

VO클래스 만들기

import java.sql.Date;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class H_MEMBER_VO {
	private int MEMBER_NO;
	private int TRAINER_NO;
	private String ID;
	private String PW;
	private String name;
	private String PHONE;
	private String GENDER;
	private String  BIRTH_DATE;
}

해당 테이블에 해당되는 컬럼의 변수들을 만들고

lombok을 사용하여 getter,생성자를 만들어 주었다.

DAO클래스 만들기

public class H_MEMBER_DAO {
	Connection conn;
	PreparedStatement pstm;
	ResultSet rs;
	//싱글톤 객체 생성
	private static H_MEMBER_DAO dao=new H_MEMBER_DAO();
	private H_MEMBER_DAO() {}
	public static H_MEMBER_DAO getMemberDao() { return dao;}
    }

DAO클래스에는 Connection,PreparedStatement,ResultSet타입의 변수를 선언해준 뒤

싱글톤 객체를 생성해 주었다.

싱글톤 객체를 생성하면 메모리 낭비를 방지할 수 있고 클래스 간에 데이터 공유가 쉽다..

라는 장점이 있다지만 JDBC 사용할 때 그냥 사용하길래 사용해봤다.

데이터 삽입 메소드 만들어보기(INSERT)

public boolean insert(H_MEMBER_VO member) throws SQLException {
		boolean check=false;
		String query="INSERT INTO H_MEMBER\r\n"
		+ "(MEMBER_NO, TRAINER_NO, NAME, ID, PASSWORD, PHONE, GENDER, BIRTH_DATE)"					
                + "VALUES(SQ_MEMBER_NO.nextval,?,?,?,?,?,?,?)";
				
			conn = DBConnecter.getConnection();
			pstm= conn.prepareStatement(query);
			pstm.setInt(1, member.getTRAINER_NO());
			pstm.setString(2, member.getName());
			pstm.setString(3, member.getID());
			pstm.setString(4, member.getPW());
			pstm.setString(5, member.getPHONE());
			pstm.setString(6, member.getGENDER());
			pstm.setString(7, member.getBIRTH_DATE());
			if(pstm.executeUpdate()==1) {check=true;}
			if(pstm!=null) {pstm.close();}
			if(conn!=null) {conn.close();}
			return check;
			}

데이터 삽입 메소드를 만들어 봤다.

참고로 DAO클래스 안에 만들었다.

우선 메소드의 반환 타입은 boolean이다.

데이터 삽입이 성공했는지 실패했는지 true, false로 반환하기 위함이다.

매개변수로는 위에 설정한 H_MEMBER_VO타입을 받는다.

String query에 담은 문자열이 쿼리문인데 데이터를 삽입해야 하니까 insert를 사용했다.

pstm변수에 query문을 담아준 뒤

쿼리문에 있는 ? 에 값을 전달해 주기 위해서

setXXX메소드를 사용해야 한다.

XXX는 참고로 타입이다. 해당 컬럼에 맞게 타입을 사용하면 된다.

? 에 맞게 값을 다 설정해주었다면

pstm.executeUpdate( )의 반환 값이 1인지 확인한다.

executeUpdate메소드는 레코드의 건수를 반환하기 때문에

1이 반환되었다면 데이터 삽입이 성공된 것이다.

따라서 check를 true로 바꾸어 준 뒤

사용했던 변수들은 다 닫아주자.

그리고 check를 반환해준다.

데이터 삽입 테스트해보기

	public static void main(String[] args) throws SQLException {
			H_MEMBER_DAO dao=H_MEMBER_DAO.getMemberDao();
			H_MEMBER_VO vo=new H_MEMBER_VO(0, 
					1, 
					"먕먕", 
					"1234", 
					"1234", 
					"010-1234-1234", 
					"M", 
					"1970-09-01");
			if(dao.insert(vo)) { System.out.println("데이터 삽입 성공");}
			else {System.out.println("데이터 삽입 실패");}
			}

H_MEMBER_DAO의 메서드를 사용하기 위해 dao변수를 하나 만들었고

H_MEMBER_VO에 값을 넣기 위해서 H_MEMBER_VO타입 객체도 만들어 주었다.

dao.insert( )메소드에 값을 전달해 주기 위해서 H_MEMBER_VO의 생성자에 값을 넣어주었다.

값을 넣어준 vo변수를 doa.insert( )메소드에 넣어준 뒤 true면 데이터 삽입이 성공한 것이고

false라면 데이터 삽입 실패이다.

실행해 보자.

데이터 삽입 성공이 떴지만 불안하니 테이블도 확인해 보자

H_MEMBER테이블을 SELECT 해보았다.

너무 잘 들어가 있다.

Comments