[JDBC]/Program source (JDBC)
JDBC 20231121 [프로그래밍 소스] - Test004(해설), Test005, Test006 테이블 내의 데이터 읽어오기 (rs.next(), executeQuery, rs.getString(), rs.getInt())
Jelly-fish
2023. 11. 21. 11:24
Test004.java
/*=========================
Test004.java
===========================*/
// 실행 예)
// 번호를 입력하세요(-1 종료) : 3
// 이름을 입력하세요 : 박나영
// 전화번호를 입력하세요 : 010-3333-3333
// >> 데이터베이스 연결 성공~!!!
// >> 회원 정보가 입력되었습니다.
// 번호를 입력하세요(-1 종료) : 4
// 이름을 입력하세요 : 정현욱
// 전화번호를 입력하세요 : 010-4444-4444
// >> 데이터베이스 연결 성공~!!!
// >> 회원 정보가 입력되었습니다.
// 번호를 입력하세요(-1 종료) : 5
// 이름을 입력하세요 : 김민지
// 전화번호를 입력하세요 : 010-5555-5555
// >> 데이터베이스 연결 성공~!!!
// >> 회원 정보가 입력되었습니다.
// 번호를 입력하세요(-1 종료) : -1
// >> 데이터베이스 연결 닫힘~!!
// >> 프로그램 종료됨~!!!
package com.test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import com.util.DBConn;
public class Test004
{
// [선생님 풀이!!]▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
// *『선생님의 Tip』 : 콘솔창에 한글 입력할 땐, 마우스로 커서를 맨 끝을 클릭하고 작성하세요.
// 영문, 숫자의 경우는 상관 없다~
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
// ※ 『스캐너에 대한 리소스를 사용하고 반납(close())하지 않으면』
// 『노란색 느낌표가 발생한다.』
Scanner sc = new Scanner(System.in);
Connection conn = DBConn.getConnection();
do
{
System.out.print("번호를 입력하세요(-1 종료) : ");
String sid = sc.next();
// 반복문의 조건을 무너뜨리는 코드 구성
if (sid.equals("-1"))
break;
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
System.out.print("전화번호를 입력하세요 : ");
String tel = sc.next();
if (conn != null)
{
System.out.println(">> 데이터베이스 연결 성공~!!!");
try
{
// 작업 객체 준비
// (초록색 동그라미 ⓐ : abstract (추상 클래스))
// (초록색 동그라미 ⓐ 에 빗금 : Legacy (사용을 충분히 고려해 보고 사용해야한다.))
Statement stmt = conn.createStatement();
// 우선 sid 가 String 타입이어서 받는 것은 %s.
// 오라클에서는 sid가 NUMBER 타입...
// 쿼리문에 홑따옴표가 없으므로, 오라클 입장에서는 sid를 숫자타입으로 받아들인다!!
// ★【오라클 입장】 [%s : 숫자, '%s' : 문자]
// 쿼리문 준비
// * [원하는 형태로 출력] → 이걸 문자열로 변경해야 함. String.format
// System.out.printf("%d %s", arg, arg)
//String sql = "INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(" + sid + ", " + name + " ', '" + tel + " ')";
//String sql = String.format("INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(①, '②', '③')", sid, name, tel);
String sql = String.format("INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(%s, '%s', '%s')", sid, name, tel);
// 데이터베이스로부터 질의 결과를 가져와야 하는 경우(select)
// → 『executeQuery()』 메소드 사용.
// ★ 특정 내용을 데이터베이스에 적용해야 하는 경우 (insert, update, delete)
// → 『executeUpdate()』 메소드 사용.
// 【executeUpdate를 통해 변경이 적용된 행(Record)의 개수 반환.】 (int 변수로 받기 생략 가능)
int result = stmt.executeUpdate(sql);
//-- executeUpdate() 메소드는 적용된 행의 개수 반환
if (result > 0)
{
System.out.println(">> 회원 정보가 입력되었습니다.\n");
}
else
{
System.out.println(">> 회원 정보 입력 실패~!!!\n");
}
} catch (Exception e)
{
System.out.println(e.toString());
}
}
else
{
System.out.println(">> 데이터베이스 연결 실패~!!!");
break;
}
} while (true);
sc.close();
DBConn.close();
System.out.println(">> 데이터베이스 연결 닫힘~!!!");
System.out.println(">> 프로그램 종료됨~!!!");
}
// 실행 결과
/*
번호를 입력하세요(-1 종료) : 5
이름을 입력하세요 : 박나영
전화번호를 입력하세요 : 010-3333-3333
>> 데이터베이스 연결 성공~!!!
>> 회원 정보가 입력되었습니다.
번호를 입력하세요(-1 종료) : 6
이름을 입력하세요 : 정현욱
전화번호를 입력하세요 : 010-4444-4444
>> 데이터베이스 연결 성공~!!!
>> 회원 정보가 입력되었습니다.
번호를 입력하세요(-1 종료) : 7
이름을 입력하세요 : 김민지
전화번호를 입력하세요 : 010-5555-5555
>> 데이터베이스 연결 성공~!!!
>> 회원 정보가 입력되었습니다.
번호를 입력하세요(-1 종료) : -1
>> 데이터베이스 연결 닫힘~!!!
>> 프로그램 종료됨~!!!
*/
// [내 풀이~]▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
/*
* public static void main(String[] args) throws ClassNotFoundException,
* SQLException { Scanner sc = new Scanner(System.in); int n; String name;
* String tel; String insertStr;
*
* // 연결 객체 생성(구성) Connection conn = DBConn.getConnection();
*
* if (conn == null) { System.out.println("데이터베이스 연결 실패~!!!"); System.exit(0);
* // 프로그램 나가기 }
*
*
* // 번호 입력받기 do { System.out.println("번호를 입력하세요(-1 종료) : "); n = sc.nextInt();
*
* if (n == -1) { System.out.println("데이터베이스 연결 닫힘~!!");
* System.out.println("프로그램 종료됨~!!!"); DBConn.close(); // 연결객체 닫기
* System.exit(0); // 프로그램 나가기 }
*
* System.out.print("이름을 입력하세요 : "); name = sc.next();
*
* System.out.print("전화번호를 입력하세요 : " ); tel = sc.next();
*
* //--------------------------------------------
*
* try {
*
*
*
* Statement stmt = conn.createStatement();
*
* insertStr = String.
* format("INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(%d, \'%s\', \'%s\')",
* n, name, tel);
*
* int result = stmt.executeUpdate(insertStr);
*
* if (result > 0) { System.out.println("데이터베이스 연결 성공~!!!");
* System.out.println("회원 정보가 입력되었습니다."); }
*
*
*
* } catch (Exception e) { System.out.println(e.toString()); }
*
*
* } while(n != -1);
*
*
*
*
* }// end main
*/
}
Test005.java
/*=====================================
Test005.java
- 테이블 내의 데이터 읽어오기
=======================================*/
package com.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.util.DBConn;
public class Test005
{
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
Connection conn = DBConn.getConnection();
if (conn != null)
{
System.out.println("데이터베이스 연결 성공~!!!");
try
{
// 작업 객체 생성
Statement stmt = conn.createStatement();
// 쿼리문 준비 (select)
// tip! : 오라클에서 쿼리문 가져올 때 한 줄로 가져올 것.
// 개행을 시켜서 + 로 문자열 결합 시킬 때, 맨 앞에 공백을 발생시킨다.
// "SELECT SID, NAME, TEL"
// + " FROM TBL_MEMBER" ← ★공백 check~!!!
// + " ORDER BY SID"; ← ★공백 check~!!!
String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
/*
String sql = "SELECT SID, NAME, TEL"
+ " FROM TBL_MEMBER"
+ " ORDER BY SID";
*/
// ※ 쿼리문을 구성하는 과정에서 공백이나 개행 처리 check~!!!
// 쿼리문 실행
ResultSet rs = stmt.executeQuery(sql);
// 리턴 자료형이 ResultSet! 객체를 반환하는 것이다.
// 석탄, 구리가 다 담겨서 도착한 게 아니다.
// ResultSet이라고 하는 건, primetive 자료형처럼 연산(질의) 결과를 모두 담아주는 것이 아니다.
// 언제든지 필요한 걸 꺼내서 쓰겠다는 의미 X. 그러니까 연결 끊으면 안 돼요!
// ※ executeQuery() 메소드를 사용하면
// 질의 결과를 ResultSet 객체로 가져올 수 있다.
// 하지만, ResultSet 객체가 질의에 대한 결과물 모두를
// 한꺼번에 갖고 있는 구조는 아니다.
// 단지, 데이터베이스로부터 획득한 질의 결과물에 대한
// 관리가 가능한 상태가 되는 것이다.
// 이 때문에 ResultSet 을 얻었다고 해서
// 데이터베이스와의 연결을 끊게 되면
// ResultSet 객체는 더 이상 질의 결과를 관리할 수 없게 된다.
// ※※※ DBConn.close(); 이러면 안 된다! ※※※ 연결 끊지마!!
// ResulSet 에 대한 처리 (→ 반복문 구성)
// * (긴 카세트테이프의 테이프 처럼)
//▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦
// ▼ → ▼(next())
// ├─┼─┼─┼─┼─┼─┼─┤ [ResultSet]
//▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦▦
// → (이거 다음.. 이거 다음.. 반복문 내부에서 커서(rs.next()) 이동)
//rs.next();
// ◎【rs.next()】▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥
// ResultSet 안에 다음 값이 있는지 없는지 확인시켜주는 메소드.
// boolean 타입(true, false) 반환. 있으면 t, 없으면 f.
// ▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥▥
// 값이 있을 때만 true를 반환하므로 다음과 같이 while문 구성.
// [오라클 데이터 받아오기]****************
// 문자형 형태로 얻어오기 getString()
// 숫자형 형태로 얻어오기 getInt()
// 실수형 형태로 얻어오기 getDouble()
//*****************************************
// getxxx() 메소드
// ResultSet에서 가져오는 요소를
// 컬럼명("SID", "NAME", "TEL")으로 식별할 수 있게끔 구성되어 있다.
while (rs.next())
{
//int sid = rs.getInt("SID");
String sid = rs.getString("SID");
String name = rs.getString("NAME");
String tel = rs.getString("TEL");
//System.out.printf("%d %s %s", sid, name, tel);
//System.out.printf("%s %s %s", sid, name, tel);
String str = String.format("%3s %8s %12s", sid, name, tel);
System.out.println(str);
}
// ResultSet 리소스 반납
rs.close();
// Statement 리소스 반납
stmt.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
else
{
System.out.println("데이터베이스 연결 실패~!!!");
}
DBConn.close();
System.out.println(">> 데이터베이스 연결 닫힘~!!!");
System.out.println(">> 프로그램 종료됨~!!!");
}
}
// 실행 결과
/*
데이터베이스 연결 성공~!!!
1 홍길동 010-1111-1111
2 김지민 010-3937-6913
3 김말자 010-5555-8888
4 강혜성 010-6380-7047
5 박나영 010-3333-3333
6 정현욱 010-4444-4444
7 김민지 010-5555-5555
>> 데이터베이스 연결 닫힘~!!!
>> 프로그램 종료됨~!!!
*/
Test006.java
/*=====================================
Test006.java
- 테이블 내의 데이터 읽어오기
=======================================*/
package com.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.util.DBConn;
// EMP 테이블을 대상으로
// EMPNO, ENAME, JOB, SAL 항목을 확인하는 프로그램 구성
public class Test006
{
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
Connection conn = DBConn.getConnection();
if (conn != null)
{
System.out.println("데이터베이스 연결 성공~!!!");
try
{
// 작업 객체 생성
Statement stmt = conn.createStatement();
// 쿼리문 준비
String sql = "SELECT EMPNO, ENAME, JOB, SAL"
+ " FROM EMP";
// 쿼리문 실행
ResultSet rs = stmt.executeQuery(sql);
// while 문 실행
while (rs.next())
{
String empno = rs.getString("EMPNO");
String ename = rs.getString("ENAME");
String job = rs.getString("JOB");
int sal = rs.getInt("SAL");
String resultStr = String.format("%5s %9s %10s %6d", empno, ename, job, sal);
System.out.println(resultStr);
}
rs.close();
stmt.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
else
{
System.out.println("데이터베이스 연결 실패~!!!");
}
DBConn.close();
System.out.println(">> 데이터베이스 연결 닫힘~!!!");
System.out.println(">> 프로그램 종료됨~!!!");
}
}