인천일보아카데미/- 학습일지

[학습일지]JAVA교육일지 70일차 (SERVER)⭐

w1z 2022. 7. 12. 10:44

1. Statement 클래스

2. ResultSet 클래스


1. Statement 클래스

[ 정의 ]

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

- Connection 클래스를 통해서 생성한다.

- Statement 객체가 실행할 SQL을 어느 서버에서 실행할지 모르기 때문에 그 정보를 가지고 있는 Connection과 연관되어 있다.

 

[ Statement 종류 ]

  텍스트 쿼리 실행용   1. Statement - 기본

  2. PreparedStatement - 인자값과 관련된 작업에 특화 (코드 안정성 높음, 가독성 높음 ) 
  프로시저 실행용   1. CallableStatement - 프로시저 전용 Statement

 

[ 메소드 종류 ]

  반환값이 없는 쿼리   변수명.executeUpdate();
  반환값이 있는 쿼리   변수명.executeQuery();

 

[ Statement 클래스 예시 ] 

public static void main(String[] args) {

	Connection conn = null;

	try {

		conn = DBUtil.open();
		String sql = "insert into tblAddress(seq, name, age, gender, address) values(seqAddress.nextval, '아무개', 20, 'm', '서울시 강남구 역삼동')";
		
		Statement stat = conn.createStatement();
				
		int result = stat.executeUpdate(sql); // SQL-Developer에서 Ctrl+Enter와 동일한 행동 (쿼리 실행 ***)
		
		System.out.println("result: " + result);
		
		// 종료
		stat.close();
		conn.close();
		
		System.out.println("완료");
		
	} catch (Exception e) {
		e.printStackTrace();
	}
    
}


--> tblAddress 테이블의 행의 갯수(int) 만큼 출력된다.

 

2. ResultSet 클래스

- 결과셋 테이블이다.

 

[ 메소드 종류 ]

 next()   다음행이 있을경우 true, 없을경우 false
 getInt(int index)   커서가 가르키고 있는 레코드의 특정 컬럼값(정수)을 가져온다.
 getString(int index),
 getString(String label)
  커서가 가르키고 있는 레코드의 특정 컬럼값(문자열)을 가져온다.

 

[ ResultSet 단일값 반환 예제 ]

- tblAddress 테이블의 모든 행의 갯수(인원수) 가져오기

Connection conn = null;
Statement stat = null;
ResultSet rs = null; 

try {
	
	conn = DBUtil.open();
	stat = conn.createStatement();
	
	String sql = "select count(*) from tblAddress";
	
	rs = stat.executeQuery(sql);
	
	// 커서를 다음 레코드로 전진시킨다.
	rs.next();
	
	// 커서가 가리키고 있는 레코드의 특정 컬럼값을 가져온다.
	String strCount = rs.getString(1);
	System.out.println("인원수: " + strCount);
	
	rs.close();
	stat.close();
	conn.close();
	
} catch (Exception e) {
	e.printStackTrace();
}


console output
--> tblAddress 테이블에 존재하는 행의 갯수 출력

 

[ ResultSet 다중 컬럼 예제 ]

- 결과셋: 1개의 레코드 + 여러 컬럼

- getString("인덱스")를 사용하면 가독성도 떨어지고 헷갈리므로, 보통 getString("라벨")을 사용한다.

- 해당 테이블의 컬럼명 = getString("라벨명")

- tblAddress 테이블의 seq = 5인 행의 특정 컬럼 정보 가져오기

Connection conn = null;
Statement stat = null;
ResultSet rs = null; 

try {
	
	conn = DBUtil.open();
	stat = conn.createStatement();
	
	String sql = "select name from tblAddress where seq = 5";
	
	rs = stat.executeQuery(sql); 
	
	if ( rs.next() ) {
		String seq = rs.getString("seq");
		String name = rs.getString("name");
		String age = rs.getString("age");
		String gender = rs.getString("gender");
		String address = rs.getString("address");
			
		System.out.println("seq: " + seq);
		System.out.println("name: " + name);
		System.out.println("age: " + age);
		System.out.println("gender: " + gender);
		System.out.println("address: " + address);
	} 
	
	rs.close();
	stat.close();
	conn.close();
	
} catch (Exception e) {
	e.printStackTrace();
}

 

[ ResultSet 다중 레코드 예제1 ]

- 결과셋: N개의 레코드 + 1개의 컬럼

- tblAddress 테이블의 모든 레코드에서 'name'컬럼값 가져오기

- tblAddress 테이블의 레코드가 얼마나 있는지 모르기 때문에 루프(while)를 이용한다.

Conncetion conn = null;
Statement stat = null;
ResultSet rs = null;

try {

	conn = DBUtil.open();
	stat.conn.createStatement();
    
	String sql = "select name from tblAddress order by name asc";
    
	rs = stat.executeQuery(sql);
    
	while ( rs.next() ) {
		String name = rs.getString("name");
		System.out.println("name: " + name);
	}
    
	rs.close();
	stat.close();
	conn.close();

} catch(Exception e) {
	e.printStackTrace();
}

 

[ ResultSet 다중 레코드 예제2 ]

- 결과셋: N개의 레코드 + N개의 레코드

- tblAddress 테이블의 모든 레코드에서 모든 컬럼값 가져오기

- tblAddress 테이블의 레코드가 얼마나 있는지 모르기 때문에 루프(while)를 이용한다.

Conncetion conn = null;
Statement stat = null;
ResultSet rs = null;

try {

	conn = DBUtil.open();
	stat.conn.createStatement();
    
	String sql = "select name from tblAddress order by name asc";
    
	rs = stat.executeQuery(sql);
    
	while ( rs.next() ) {
   		String seq = rs.getString("seq");
		String name = rs.getString("name");
		String name = rs.getString("age");
		String name = rs.getString("gender");
		String name = rs.getString("address");
        
		System.out.println("seq: " + seq);
		System.out.println("name: " + name);
		System.out.println("age: " + age);
		System.out.println("gender: " + gender);
		System.out.println("adderss: " + adderss);
		System.out.println();
	}
    
	rs.close();
	stat.close();
	conn.close();

} catch(Exception e) {
	e.printStackTrace();
}

 


MEMO>

# JDBC 초기 셋팅시 오타 많이 나는것 2가지 
      1. String url = "jdbc:oracle:thin:@localhost:1521:xe";
      2. Class.forName("oracle.jdbc.driver.OracleDriver");

# SQL-Developer에서 작업을 끝낸뒤 항상 commit을 해야한다. 안하면 java에 반영X (트랜잭션 적용 X)

# 자바(JDBC) 코드 작성시 DB를 쓸일이 없다고 판단되면 close() 꼭 닫아줄 것

# SQL 쿼리 오류는 콘솔(System.out.println(sql))로 찍으면 콘솔화면으로 쿼리 오류 메세지를 확인할 수 있다.

# 오늘 배운 JDBC는 내용이 그렇게 많지 않기때문에 내일까지만 배우며, 배운 내용이 조금이지만, 거의 모든것이 실무에서 쓰여지므로 이해하는것이 중요하지만 100% 다 외울것!!

# 실습 예제를 많이 했는데, 복습하기