반응형

 

 

 

 

 

 

 

 

 

 

 

 

JDBC란? (Java Database Connectivity)

- 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API

 

즉, DB와 자바 프로그램을 연결시켜주는 연결 다리의 역할을 한다는 것이다.

 

 

JDBC 클래스 생성 관계

 

 

 

 

 

 

eclipse EE 버전에서 JDBC 설정을 하고, 터미널에서 mysql을 켜서 테스트해보도록 하겠습니다.

 

 

< JBDC 설정 >

1. Maven Project 로 시작하기

 

 

 

 

2. pom.xml 에  mysql dependency 추가하기

<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.45</version>
</dependency>

 

 

+ 버전 1.8로 수정하기

 

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

 

 

*** 반드시 프로젝트명 우클릭 -> maven -> update project 해주기 !!

 

 

 

3. Mysql 키기

mysql -h127.0.0.1 -uconnectuser -p connectdb

-> 비밀번호 치기

 

 

- ROLE 테이블 만들기

 

 

 

 

 

 

3. DTO 만들기

- 생성자와 get & set, toString 메서드 만들어주기 

 

: mysql 에서 roleId, description 을 참조해서 만들어줍니다.

package kr.or.connect.jdbcRole.dto;

public class Role {
	
	private Integer roleId;
	private String description;

	public Role() {

	}

	public Role(Integer roleId, String description) {
		super();
		this.roleId = roleId;
		this.description = description;
	}

	public Integer getRoleId() {
		return roleId;
	}

	public void setRoleId(Integer roleId) {
		this.roleId = roleId;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@Override
	public String toString() {
		return "Role [roleId=" + roleId + ", description=" + description + "]";
	}
	
}

 

 

 

 

 

 

4. DAO 만들기

 

1) SELECT 

** dburl 뒤에 ?serverTimezone=UTC 를 꼭 추가해주기 !!

** jdbc driver 도 com.mysql.cj.jdbc.Driver 로 cj 를 넣어주면 에러가 발생하지 않는다.

 

package kr.or.connect.jdbcRole.dao;

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

import kr.or.connect.jdbcRole.dto.Role;

public class RoleDao {
	private static String dburl = "jdbc:mysql://localhost:3306/connectdb?serverTimezone=UTC";
	private static String dbUser = "connectuser";
	private static String dbpasswd = "connect123!@#";

	public Role getRole(Integer roleId) {
		Role role = null;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String sql = "SELECT description,role_id FROM role WHERE role_id = ?";
				
			conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
			ps = conn.prepareStatement(sql);
			ps.setInt(1, roleId);		// 첫 번째 물음표에 roleId 를 넣어주겠다.
			rs = ps.executeQuery();		// 실행해주세요 !!

			if (rs.next()) {			// roleId 에 해당하는 결과값이 없을 수도 있기 때문에
				String description = rs.getString(1);	// SELECT문에 나열한 순서대로 1 description, 2 role_id // description 의 값을 꺼내옴
				int id = rs.getInt("role_id");			// 숫자로 써도 되고, 컬럼 이름을 적어주어도 된다.
				role = new Role(id, description);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}

		return role;
	}
}

 

 

 

 

2) INSERT

public int addRole(Role role) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "INSERT INTO card (name, tel) VALUES ( ?, ? )";
		ps = conn.prepareStatement(sql);
	
		ps.setString(1, role.getName());
		ps.setString(2, role.getTel());

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

 

 

 

3) DELETE

public int deleteRole(Integer roleId) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "DELETE from role where role_id = ?";
		ps = conn.prepareStatement(sql);
	
		ps.setInt(1, roleId);

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

 

 

4) UPDATE

public int updateRole(Role role) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "UPDATE role set description = ? where role_id = ?";
		ps = conn.prepareStatement(sql);
	
		ps.setString(1, role.getDescription());
		ps.setInt(2, role.getRoleId());

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

DriverManager를 이용해 connection을 가져오고,

conn 객체를 이용해 statement를 가져오고,

statement를 통해 ResultSet을 가져옴을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts