단단히

JDBC _ 반환값이 있는 경우 ( ; 조회문 select / show .. ) 본문

----------------------------------------/JDBC

JDBC _ 반환값이 있는 경우 ( ; 조회문 select / show .. )

이게아닌데 2022. 10. 12. 18:03

 

JDBC는 어느 정도 기본 틀이 있다.

처음 보면 복잡하지만 한번 정리하고 나면

과정이 익숙해지는 것 같다.

 

연결은 공통되는 부분이지만

작동하는 쿼리에 따라 사용하는 객체가 달라 더욱 헷갈린다.

그래서 select구문을 정리하고자 한다.

 


공통되는 부분 정리

 

2022.10.10 - [----------------------------------------/JDBC] - JDBC란? (이클립스 + MySQL)

 


 

Statement 클래스

- SQL 구문을 실행하는 역할을 한다.

- 단순히 구문을 전달하는 역할을 한다.

- SQL을 관리한다.

 

objStmt.executeQuery(sql);

 

String sql = "select 문자형C/N1, 정수형C/N2 from T/N 부속절";

objStmt = objConn.createStatement();
objRS = objStmt.executeQuery(sql);

 

적고 싶은 select 쿼리문을 넣어준다.

sql select문을 따로 빼주는데, 보기에도 한눈에 볼 수 있고 쿼리문이 너무 길 경우 빼주는 게

안정감 있어 보여 따로 빼준다. +익숙하다.

 

objStmt변수에는 DB와 연결 정보들(objConn)과

'원하는 문장(=쿼리) 만들어줄래?'라는 문구( createStatement() )가 들어가 있다.

그리고 이 objStmt 변수에 내가 원하는 sql 문장을 넣고 실행( executeQuery(SQL 문장) )해준다.

 

DB 연결과 "문장을 만들어줄래?"라는 문구와 함께 원하는 sql 쿼리까지

실행한 결과를 변수 objRS에 담아준다.

 

 

트랜잭션 처리를 해야 한다.

이후 반환되는 결괏값이 한 개인지, 아님 그 이상인지개수에 따라 코드가 달라진다.

 

※ 트랜잭션? 여러 단계의 작업을 하나로 처리하는 것. 하나로 인식된 작업이 모두 성공적으로 끝나면 commit이 되고 문제가 발생하면 rollback 되어 작업을 수행하기 전 단계로 모든 과정이 회수된다.

 

반환되는 데이터(row)가 1개일 경우

 

if (objRS.next()) {
	objRS.getString("문자형C/N1");
	objRS.getInt(2);     // 정수형C/N2 
}

 

반환되는 데이터가 1개일 경우 if 조건문을 사용한다.

objRS.next()는 커서의 위치 이동이다. 추후에 다시 공부해보자.

 

해당 데이터가 1개가 존재한다면 출력이 된다.

 

 

 

반환되는 데이터(row)가 2개 이상일 경우

 

// (next( )메서드 사용법에 주의, if와 while을 함께 사용하면 커서위치가 달라질 수 있음)		
while (objRS.next()) {
	objRS.getString("문자형C/N1");
	objRS.getInt(2);     // 정수형C/N2 
}

 

반환되는 데이터가 1개 이상일 경우 while 반복문을 사용한다.

if 조건문과 while 반복문을 함께 사용하면 커서의 위치가 달라질 수 있다.

 

1개 이상의 데이터가 존재한다면 해당 데이터가 반복되면서 해당 값( 반환 값 )을 출력한다.

 

+ Vector 배열을 생성해 해당 데이터(row)를 넣는다.

 

 정리 ( 전체 코드)

 

Connection 				objConn 			= 				null;
Statement 					objStmt 				= 				null;
PreparedStatement 		objPstmt 			= 				null;
ResultSet 					objRS 				= 				null;

try {
	Class.forName("com.mysql.cj.jdbc.Driver");
	String url = "jdbc:mysql://localhost:3306/ DB명 ?";
	url += "useSSL=false&";
	url += "useUnicode=true&";
	url += "characterEncoding=UTF8&";
	url += "serverTimezone=UTC";
	String user = "root";
	String password = "1234";
	
	objConn = DriverManager.getConnection(url, user, password);	
	//out.print("DB 접속");
	

	String sql = "select 문자형C/N1, 정수형C/N2 from T/N 부속절";
	objStmt = objConn.createStatement();
	objRS = objStmt.executeQuery(sql);
	
    
    
	// 반환되는 데이터(row)가 1개일 경우
	if (objRS.next()) {
		objRS.getString("문자형C/N1");
		objRS.getInt(2);     // 정수형C/N2 
	} 
	
	// 반환되는 데이터(row)가 2개 이상일 경우 
	
	while (objRS.next()) {
		objRS.getString("문자형C/N1");
		objRS.getInt(2);    // 정수형C/N2 
	} 
	

		
	objRS.close();
	objPstmt.close();
	objStmt.close();
	objConn.close();

	
} catch (ClassNotFoundException cnfe) {
	
	out.print(cnfe.getMessage());
	
} catch (SQLException sqle) {

	out.print(sqle.getMessage());
	
}

 

 

 

 

반환 값의 개수에 따라 조건문이 쓰일지 반복문이 쓰일지 나뉜다.

 

회원 조회 프로그램 작성 시 while문을 사용하며 Vector문과 함께 사용한다.

'---------------------------------------- > JDBC' 카테고리의 다른 글

JDBC란? (이클립스 + MySQL)  (0) 2022.10.10
Comments