728x90
반응형
DTO
Data Transfer Object : 데이터를 이동시키기 위한 클래스, 단일 데이터의 형식을 정리한다.
테이블의 정보를 출력해서 DTO 클래스로 붙여넣기 한다.
DTO 클래스에서 DB테이블의 객체를 멤버변수로 선언하고
getter/setter 까지 생성
DAO
Data Access Object : DB의 데이터에 접근하기 위한 객체
SQL과 java와 연결하는 코드
dataBase url, 아이디, 패스워드 연결
connection
statement
resultset
package phonebook;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class DAO {
//Data Access Object : DB의 데이터에 접근하기 위한 객체
// 접근제한자 처리로 내부에서 접근이 안된다.
private final String url = "jdbc:oracle:thin:@192.168.1.1:1521:xe";
private final String user = "c##itbank";
private final String password = "123456";
private Connection conn;
private Statement stmt;
private ResultSet rs;
public DAO() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패 : " + e);
} finally {
}
}
//Connection을 반환하는 함수
private Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
//Connection, Statement, Resultset을 역순으로 닫는 함수
private void close() {
try { if(rs != null) rs.close(); } catch(Exception e) {}
try { if(stmt != null) stmt.close(); } catch(Exception e) {}
try { if(conn != null) conn.close(); } catch(Exception e) {}
}
전체목록 구현
//전체목록 ()
public ArrayList<DTO> selectAll(){
ArrayList<DTO> list = new ArrayList<DTO>();
//테이블의 이름순으로 조회하는 sql 구문
String sql = "select * from phonebook order by name";
try {
conn = getConnection(); //연결을 원하는 정보가 담겨있다.
stmt = conn.createStatement(); //정보가 올바르다면 연결상태를 검사
rs = stmt.executeQuery(sql); // sql에 담긴 쿼리문을 전달인자로 받아서 쿼리문을 수행한다.
//다음 쿼리문이 있으면 다음행의 정보를 출력
while(rs.next()) {
//객체 생성
DTO dto = new DTO();
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
dto.setPnum(rs.getString("pnum"));
list.add(dto);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
DB 테이블의 데이터를 조회 (Main)
package phonebook;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
DAO dao = new DAO();
int menu = -1;
Scanner sc = new Scanner(System.in);
String name, pnum;
int age;
List<DTO> list = null;
while (menu != 0) {
System.out.println("1.전체목록");
System.out.println("0.종료");
System.out.print("선택 >>>");
menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
list = dao.selectAll();
for(DTO dto : list) {
System.out.print(dto.getName()+ "\t");
System.out.print(dto.getAge() + "\t");
System.out.print(dto.getPnum() + "\n");
}
break;
case 0:
sc.close();
}
System.out.println();
}
System.out.println("프로그램 종료");
}
}
이클립스 Main클래스
DAO에서 데이터 추가하는 함수 내 sql 쿼리문 작성 conn ,stmt, row 예외처리
<DAO 클래스>
public int insert(DTO dto) {
int row = 0;
String sql = "insert into phonebook values ( '%s', %s, '%s')";
sql = String.format(sql, dto.getName(),dto.getAge(),dto.getPnum());
try {
conn = getConnection();
stmt = conn.createStatement();
row = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally { close(); }
return row;
}
Main클래스에서 case 2 : 추가
sql에서 불러올 데이터들이 전체적으로 같기 때문에
mapper함수를 새로 생성해서 묶어준다.
검색기능 (DAO 클래스)
//이름으로 검색 (String name) 포함하는 이름
public List<DTO> search(String name) {
ArrayList<DTO> list = new ArrayList<DTO>();
// String sql = "select * from phonebook where name like '%%검색어%'";
// sql = String.format(sql, name);
String sql = "select * from phonebook where name like '%" + name + "%'";
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
// DTO dto = new DTO();
// dto.setName(rs.getString("name"));
// dto.setAge(rs.getInt("age"));
// dto.setPnum(rs.getString("pnum"));
// list.add(dto);
list.add(mapper(rs)); // mapper함수 추가
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return list;
}
main에서 case 3 : 검색
case 3:
System.out.print("검색어 입력");
name = sc.nextLine();
list = dao.search(name);
list.forEach(dto -> System.out.println(dto));
break;
단일조회
//일치하는 이름으로 검색 (String name )
public DTO selectOne(String name) {
String sql = "select * from phonebook where name = '%s'";
sql = String.format(sql, name);
DTO dto = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
dto = mapper(rs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return dto;
}
이클립스
main에서 이름 입력받기
삭제
//삭제
public int delete(String name) {
int row=0;
String sql = "delete phonebook where name = '%s'";
sql = String.format(sql, name);
try {
conn = getConnection();
stmt = conn.createStatement();
row = stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return row;
}
이클립스
main에서 사용자의 입력
업데이트 (수정)
public int update(DTO tmp, String name) {
int row =0;
String sql = " update phonebook "
+ " set "
+ " name = '%s', "
+ " age = %s , "
+ " pnum = '%s' "
+ " where"
+ " name = '%s' ";
sql = String.format(sql, tmp.getName(), tmp.getAge(),tmp.getPnum(),name);
try {
conn = getConnection();
stmt = conn.createStatement();
row = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return row;
}
main에서 업데이트할 정보 입력
sql의 테이블이 수정됐다.
끝! 다음은 제약조건에 대해서 다뤄보자!
728x90
반응형
'dataBase , vmware' 카테고리의 다른 글
외래키 제약조건으로 테이블 생성하기, prepareStatment (1) | 2023.07.03 |
---|---|
oracle 데이터베이스 제약 조건 (constraint) (0) | 2023.06.30 |
SQL dataBase 조회 , DB와 연결하기 (0) | 2023.06.29 |