java029

제로·2022년 10월 16일
0

Java basic

목록 보기
42/45
post-custom-banner

자바 데이터베이스 연동 처리

  1. database 서버 접속 객체
    연결객체(Connection), 대화객체(Statement, PreparedStatement), 결과값(ResultSet), 자원해제(.close()), 예외처리(try{} catch(SQLException){})

  2. 전역변수로 핵심 객체를 선언
    private Connection con;
    private Statement stmt;
    private PreparedStatement pstmt;
    private ResultSet rs;

  3. 기능별 메서드 선언
    public void setConnection(){} - DB연결을 위한 기본 기능메서드
    ==> DB.con(), DB.close(rs, pstmt, stmt, con);
    접속과 자원해제를 따로 객체로 만들어서 처리.
    // 각 기능 메서드 선언

    (sql문 작성 ==> select(리턴값), where, sql에 입력 데이터(매개변수)==> vo클래스선언)
    // 사원정보조회(다중행)
    public List<Emp> getEmpList(Emp sch){}	
    // 사원정보조회(단일행)		
    public Emp getEmp(int empno){}	
    // 사원정보 입력
    public void insertEmp(Emp insert){}
    // 사원정보 수정
    public void updateEmp(Emp update){}
    // 사원정보 삭제
    public void deleteEmp(int empno){}
    ==> 프로젝트 
    ==> DB.con(), DB.close(rs, pstmt, stmt, con); 
    @@@Dao.java => 업무별로 만들어서 조회(다중), 조회(단일), 수정, 삭제

    업무별 : 회원관리 memeber라는 테이블로 진행 =>(로그인/회원가입/회원리스트)
    제품관리 product =>(물건리스트, 물건등록, 수정, 삭제)
    구매 및 배송 product/member =>(물건리스트, 구매리스트, 장바구니담기 및 리스트 배송)

데이터베이스 연결 처리

  1. 필요한 기본 객체
    1) jdbc 드라이버 프로그램 path 잡기
    - 각 DB서버 회사에서 데이터베이스 연결 및 처리 관련 공통부분을 java로 만들어
    클래스로 압축한 내용을 가지고 있다.
    현재 프로젝트에서 진행할 수 있도록 classPath 추가설정
    2) class.forName("메인클래스")를 통해서 메모리에 로딩
    ex) Class.forName("oracle.jdbc.driver.OracleDriver");

  2. 필수 예외 처리
    1) Class.forName() : 컴파일예외 처리
    연결할 때 1번만 필요하기 때문에 직접적으로 바로 예외 처리

    2) DriverManager.getConnection(info, "scott","tiger");
    연결정보 SQLException : 컴파일 예외 처리, throws로 예외를 위임처리

  3. 연결 객체 처리 프로세스
    1) 연관관계 객체
    드라이버 메모리로딩 ==> 특정서버에 접속 DriverManager ==>
    연결객체 Connection ==> 서버와 대화(sql구문으로) Statement ==>
    case1 등록/수정/삭제 ==> 서버에 데이터를 처리 ==> commit, rollback
    case2 조회(select) ==> 서버에서 sql 결과를 ResultSet 통해 전달
    ResultSet : next() - 행 단위로 이동처리
    getXXX("컬럼명") - 열 단위에 데이터 유형에 맞게 접근
    char/varchar2() ==> getString
    number ==> getInt / getDouble
    date ===> getDate
    while(rs.next()){## 데이터가 마지막행까지 행 단위로 이동
    rs.getInt("empno") : 각 행의 empno컬럼의 데이터를 정수형으로 가져온다
    rs.getString("ename")
    rs.getDate("hiredate")
    }
    ==> 자원해제 및 예외처리
    만들어진 단계별 객체.close() 메모리해제
    필수예외에 대한 내용을 try{}catch(SQLException e){} 예외처리

    매개변수에 의해 검색의 조건을 처리하는 기능메서드 만들기

    	1) sql 만들어서 실행
    		SELECT * FROM emp01
    		WHERE ename LIKE '%'||'A'||'%' AND job LIKE '%'||'ER'||'%';
    	2) sql 안에 조건으로 넘길 데이터 유형과 이름 정리
    		ename, job
    		==> String ename, String job
    	3) 기능 메서드에 매개변수 타입 결정
    		case1 데이터유형으로 선언 : schEmp(String ename, String job)
    		case2 객체로 선언 : -vo 객체로 생성(ename, job 포함)
    					   	schEmp(Emp sch) 
    	4) 문자열 sql에 동적 문자열로 선언처리
    		- 데이터 유형으로 선언
    		String sql = "SELECT * "+"FROM emp01"+
    					"WHERE ename LIKE '%'||'"+ename+"'||'%'"+ 
    					"AND job LIKE '%'||'"+job+"'||'%'";	
    		- 객체 유형으로 선언
    		String sql = "SELECT * "+"FROM emp01"+
    					"WHERE ename LIKE '%'||'"+sch.getEname()+"'||'%'"+ 
    					"AND job LIKE '%'||'"+sc.getJob()+"'||'%'";		
    				
    		==> ProparedStatement
    		String sql = "SELECT * "+"FROM emp01"+
    					"WHERE ename LIKE '%'||?||'%'"+ 
    					"AND job LIKE '%'||?||'%'";
    		pstmt.setString(1, sch.getEname());						
    		pstmt.setString(2, sch.getJob());		

    검색조건 처리 및 List로 리턴 처리

    	1. sql 작성
    	1) 매개변수로 조건처리할 데이터 확인	
    		==> ename, job ==> VO로 ename, job 필드 선언, 객체
    	2) 리턴값으로 리턴 List의 단위 데이터 확인											   			
    		String sql = "SELECT * "+"FROM emp01"+
    					"WHERE ename LIKE '%'||'"+sch.getEname()+"'||'%'"+ 
    					"AND job LIKE '%'||'"+sc.getJob()+"'||'%'";	
    		select * ==> 통해서 나올 데이터를 단위로 객체 선언
    		empno, ename, job, mgr, hiredate, sal, comm, deptno
    	2. VO 만들기		
    		==> 저장할 수 있는 단위 VO 객체 선언 ==> ArrayList<VO>
    			생성자로 전체 데이터를 가져오는 생성자1
    			생성자로 조회 조건 가져오는 생성자2
    		class Emp{
    			private int empno;
    			private String ename;
    			private String job;
    			private int mgr;
    			private Date hiredate;
    			private double sal;
    			private double comm;
    			private int deptno;
    		}			
    	3. List 메서드 초기에 선언하고 while()를 통해서 객체를 하나씩 생성해서 추가하기
    	리턴한 기능메서드와 매개변수 처리할 내용 선언
    	// Emp sch : 조건으로 처리할 데이터
    	// public List<Emp> : select로 처리할 데이터 리스트화
    
    	public List<Emp> getEmpListSch(Emp sch){
    		List<Emp> list = new ArrayList<Emp>();		
    	
    		return list;
    	}
    	4. ResultSet 객체를 통해서 데이터를 가져와서 list에 while문을 통해서 할당
    	while(rs.next()){
    		list.add(new Emp(rs.getInt("empno"), rs.getString("ename"),..)
    	}
    	System.out.pirntln("데이터건수:"+list.size());
    	5. 호출하는 곳에서 향상된 for문으로 처리
    	for(Emp emp; dao.getEmpListSch(new Emp("","")){
    		System.out.print(emp.getEmpno());
    	}		

데이터베이스의 등록/수정/삭제

  1. 기본 개발 프로세스
    1) sql 작성
    2) vo 작성
    3) 기능메서드 선언
    - 연결처리
    - Connection 객체의 autocommit을 false로 지정
    - 대화객체 updateQuery
    - commit()
    - 예외처리 rollback
  2. 사원정보 수정
	1) 복사테이블 만들기
		create table emp100 as select * from emp;
		alter table emp100  modify( 
			empno number(4) primary key, 
			job varchar2(50), 
			ename varchar2(50)
		);
	 
	  sequence 만들기(primary key 설정)
	  	create sequence emp100_seq
	  		increment by 1
	  		start with 1000
	  		minvalue 1000
	  		maxvalue 9999;
			
	2) sql 작성
		insert into emp100 values(emp100_seq.nextval,'홍길동','사원',7800,
			to_date('2022/01/01','YYYY/MM/DD'), 3500, 100, 10);	 				
	
	3) 입력내용을 기준으로 vo 작성	
		private int empno;
		private String ename;
		private String job;
		private int mgr;
		private String hiredateS;
		private double sal;
		private double comm;
		private int deptno;
	4) 메서드 선언
		public void insert(Emp ins){
		
		}
	5) 주요 내용
		Connection 객체의 autocommit ==> false
		Statement 객체의 executeUpdate(sql)
		ResultSet 객체 삭제(사용하지 않음 == while() 사용 안함)
		Connection 객체의 commit(), 예외 처리 내용을 rollback()```	
profile
아자아자 화이팅
post-custom-banner

0개의 댓글