리우's IT Story
article thumbnail
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클래스 

 

DB에 있는 정보 출력                                                                                                                       DB의 실제데이터


 

 

 

 

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
반응형
profile

리우's IT Story

@LRWoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!