인천일보아카데미/- 학습일지
[학습일지]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% 다 외울것!!
# 실습 예제를 많이 했는데, 복습하기