인터페이스 설계
package ch04;
import java.util.ArrayList;
public interface IUserDAO {
// memberTBL 전체 조회 기능
ArrayList<UserDTO> select();
// user 정보 저장 기능
int insert(UserDTO dto);
// user 정보 수정 기능
int update(UserDTO dto, String targetUserName);
// user 정보 삭제 기능
boolean delete(String username);
}
DTO 설계
package ch04;
public class UserDTO {
String username;
String birthYear;
String addr;
String mobile;
public UserDTO(String username, String birthYear, String addr, String mobile) {
this.username = username;
this.birthYear = birthYear;
this.addr = addr;
this.mobile = mobile;
}
public String getUsername() {
return username;
}
public String getBirthYear() {
return birthYear;
}
public String getAddr() {
return addr;
}
public String getMobile() {
return mobile;
}
}
기능 구현하기
package ch04;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class UserDAO implements IUserDAO {
private DBClient dbClient;
public UserDAO() {
initData();
}
private void initData() {
dbClient = new DBClient();
}
@Override
public ArrayList<UserDTO> select() {
ArrayList<UserDTO> list = new ArrayList<>();
Connection conn = dbClient.getConnection();
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM usertbl ");
while (rs.next()) {
String username = rs.getString("username");
String birthYear = rs.getString("birthYear");
String addr = rs.getString("addr");
String mobile = rs.getString("mobile");
UserDTO dto = new UserDTO(username, birthYear, addr, mobile);
list.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
@Override
public int insert(UserDTO dto) {
String sqlFormat = "INSERT INTO " + " usertbl(username, birthYear, addr, mobile) "
+ " VALUES('%s', '%s', '%s', '%s') ";
String sql = String.format(sqlFormat, dto.getUsername(), dto.getBirthYear(), dto.getAddr(), dto.getMobile());
Connection conn = dbClient.getConnection();
int resultRowCount = 0;
Statement stmt = null;
try {
stmt = conn.createStatement();
resultRowCount = stmt.executeUpdate(sql);
} catch (Exception e) {
// e.printStackTrace();
System.err.println("잘 확인해주세요");
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return resultRowCount;
}
@Override
public int update(UserDTO dto, String targetUserName) {
String sqlFormat = "UPDATE userTbl " + " SET birthYear = '%s', addr = '%s', mobile = '%s' "
+ " WHERE username = '%s' ";
String sql = String.format(sqlFormat, dto.getBirthYear(), dto.getAddr(), dto.getMobile(), targetUserName);
int resultRow = 0;
try (Connection conn = dbClient.getConnection(); Statement stmt = conn.createStatement();) {
resultRow = stmt.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
}
return resultRow;
}
@Override
public boolean delete(String username) {
boolean isOk = true;
String sqlFormat = "DELETE FROM userTBL WHERE username = '%s' ";
String sql = String.format(sqlFormat, username);
Connection conn = dbClient.getConnection();
Statement stmt = null;
try {
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
isOk = false;
// 실행에 흐름이 여기로 빠졌을 경우
// 구매 테이블에 데이터가 남아 있어서 유저 테이블에 삭제가 가능하다.
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return isOk;
}
}
테스트
package ch04;
import java.util.ArrayList;
public class MainTest {
public static void main(String[] args) {
// 데이터 베이스에 접근해서 memberTBL에 대한 정보
// 데이터 베이스에 접근해서 userTBL에 대한 정보
UserDAO userDAO = new UserDAO();
// 자식 테이블에 데이터를 먼저 삭제하고 부모테이블에 정보를 삭제할 수 있다.
// 이승기는 구매 테이블 이력이 남아 있기 때문에 유저테이블에서 바로 삭제 할 수 없다.
boolean isDelete = userDAO.delete("이승기");
System.out.println("isDelete : " + isDelete);
if(isDelete == false) {
System.out.println("구매테이블에 이력이 남아 있을 수 있습니다.");
}
// // insert 확인
// UserDTO dto = new UserDTO("유진스", "1995", "부산", "010-2222-2222");
// int updateRowCount = userDAO.update(dto, dto.getUsername());
// System.out.println("updateRowCount : " + updateRowCount);
//int rowCount = userDAO.insert(insertDto);
// 오류 발생 - 테이브 제약 조건 확인 addr 컬럼에는 문자열 2글자 까지만 입력 가능하다.
// int rowCount = userDAO.insert(new UserDTO("아이즈원", "2020", "경기도", "010-1234-1234"));
//System.out.println("rowCount : " + rowCount);
// select 확인
// ArrayList<UserDTO> list = userDAO.select();
//
// for (int i = 0; i < list.size(); i++) {
// System.out.println(list.get(i).getUsername());
// System.out.println(list.get(i).getBirthYear());
// System.out.println(list.get(i).getAddr());
// System.out.println(list.get(i).getMobile());
// System.out.println("----------------------");
// }
}
}