본문 바로가기
[DBMS]/- Oracle

[Oracle]jdbc,beans,select

by Hapco 2022. 5. 31.
728x90
반응형

Select = 조회구문

Select * from eaxm / exam의 테이블을 모두 보여주세요 !

매개변수 = 없음 // 위구문에서 위치홀더 '?' 가없다면 매개변수가 필요없다.

메소드 작성 양식은

접근제한자 반환형 이름(매개변수)

public List<ExamDto> select() throws Exception{

public  List<ExamDto> select() throws Exception{
		Connection con = JdbcUtils.connect(USERNAME, PASSWORD);
		String sql = "select * from exam";
		
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs =ps.executeQuery();

★Result rs =는 con.close() 를 지나게 되면 죽은 코드 이므로 복사해둔다 
★복사해둘 저장소는 Collection의 List 
★List사용이유는 순서를 저장하기 때문이다. (set 순서저장X map 값마다 이름부여 )

//1.비어있는 list 저장소를 생성한다
       List<ExamDto> list = new ArrayList<>();
//2.데이터 개수만큼 반복을 수행한다.
       while(rs.next()) { 
			examDto.setExamId(rs.getInt("exam_id"));//rs의 exam_id를 객체에 복사
			examDto.setStudent(rs.getString("student"));//rs의 student를 객체에 복사
			examDto.setSubject(rs.getString("subject"));//rs의 subject를 객체에 복사
			examDto.setType(rs.getString("type"));//rs의 type을 객체에 복사
			examDto.setScore(rs.getInt("score"));//rs의 score를 객체에 복사
			//4. 만들어진 객체를 list에 추가한다
			list.add(examDto);
}
con.close();
return list;

반환형이 List저장소 이기 떄문에 list를 반환해준다.

위 메소드를 이용하여 항목과 키워드로 검색이 가능한 메소드를 구현해보자

위에서 본 코드처럼 메소드의 양식은

Oracle에서 검색구문의 조건을 걸어본다치면

Select * from exam where no(항목)=?(키워드) 이런식일꺼다

접근제한자 반환형 이름(매개변수) 이다.

그렇다면 위 구문에서 매개변수는 항목 / 키워드를 이용하여 코드를 구성

 

public List<ExamDto> select(String column,String keyword) throws Exception{
		Connection con = JdbcUtils.connect(USERNAME, PASSWORD);
//포함된거 like도 사용가능
        String sql ="select * from exam where instr(#1,?)>0 order by #1 asc";
		sql= sql.replace("#1", column);
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setString(1, keyword);
		ResultSet rs = ps.executeQuery();
		List<ExamDto> list = new ArrayList<>();
        
        while (rs.next()) {
		ExamDto examDto = new ExamDto();
		examDto.setExamId(rs.getInt("exam_id"));
		examDto.setStudent(rs.getString("student"));
		examDto.setSubject(rs.getString("subject"));
		examDto.setType(rs.getString("type"));
		examDto.setScore(rs.getInt("score"));
		list.add(examDto);
		}
		con.close();

		return list;
		
	}

사진이 작아 잘보이진 않지만 sql 구문 매개변수 그리고 ..?값에 값대입정도?..

 

★★

list만들어놓고 add안해서 추가/저장 안하는 실수가 많다. 조심하자

con.close 항상 연결은 종료하자 종료하지 않으면 터진다잉 !

instr(#1,0) >0 계속 >0 빼먹어서 오류난다..긴장해라잉.. 이런데에 시간버리지말고 .

 

public class Test18_1 {
	public static void main(String[] args) throws Exception {
		//member 목록과 검색을 한 번에
		//1. 검색분류와 검색어가 없으면 목록을 조회하여 출력
		//2. 검색분류와 검색어가 있으면 검색을 수행하여 출력
		
		String column = "member_id";
		String keyword = "test";
		
//		boolean isSearch = column이 있고 keyword가 있으면;
		boolean isSearch = (column != null && !column.equals("")) 
										&& (keyword != null && !keyword.equals(""));
		System.out.println("isSearch = " + isSearch);

		MemberDao memberDao = new MemberDao();
		List<MemberDto> list;
		if(isSearch) {
			list = memberDao.search(column, keyword);
		}
		else {
			list = memberDao.list();
		}
		
		for(MemberDto memberDto : list) {
			System.out.println(memberDto);
		}
	}
}

자바에서는 0 과 null을 다르게 처리한다.. 아래의 예시를보자

 

'[DBMS] > - Oracle' 카테고리의 다른 글

[Oracle]DBCP  (0) 2022.05.31
[Oracle]Jdbc,beans,delete  (0) 2022.05.31
[Oracle] jdbc,bean,update  (0) 2022.05.31
[Oracle] jdbc , beans  (0) 2022.05.31
[Oracle] jdbc (Select 원하는 항목 검사 )  (0) 2022.05.31

댓글