반응형
1. JDBC(Java DataBase Connectivity)
- Java를 이용하여 DBMS 서버에 접속해 SQL 명령을 전달하여 실행하기 위한 기능을 제공하기 위한 클래스 또는 인터페이스
1) java.sql 패키지 - 인터페이스
- JDBC 기능의 프로그램을 작성하기 위한 클래스(인터페이스)가 선언된 패키지
- JDBC 기능은 대부분 인터페이스로 제공 - DBMS의 종류가 다양(MYSQL,오라클.. 등)하므로 클래스로 제공 불가능
- java.sql에 있는 인터페이스로 자바프로그램(JDBC 기능의 프로그램)을 만든다 = 인터페이스로 참조변수 만든다
(참조변수를 통해 자식메소드 호출) - 인터페이스를 통해 프로그램을 만들고, 실제 구현은 클래스에서 DBMS 회사의 웹사이트에서 JDBC 기능의 클래스(JDBC Driver)를 배포하여 제공
- JDBC 드라이버가 포함된 라이브러리를 다운로드 받아 프로젝트에 빌드 처리해야만 JDBC 프로그램 작성 가능
2) JDBC 드라이버 - 클래스
- 드라이버 = "클래스가 들어있는 파일들"
- 클래스는 DBMS 회사의 웹사이트에서 JDBC 기능의 클래스(JDBC Driver)를 배포하여 제공함
- 즉, 내가 사용하는 DBMS가 무엇이냐에 따라 회사 웹사이트에서 JDBC 드라이버 다운 받아 사용하기
- EX. 오라클 - 오라클회사가 제공하는 오라클드라이버 다운
- EX. Mysql - Mysql회사가 제공하는 mysql드라이버 다운
- 주의) JDBC 드라이버가 포함된 라이브러리를 다운로드 받아 프로젝트에 '빌드' 처리해야만 JDBC 기능의 프로그램 작성 가능
3) JDBC 오라클 드라이버 - 클래스
- 클래스로 객체 만든다 = 인터페이스를 상속받은 클래스로 객체를 만들어 원하는 기능을 구현한다
- 실제 기능 구현은 오라클 드라이버 클래스 안에 있는 메소드가 호출되어 실행된다 = 오라클DBMS서버에 접속해 SQL명령 전달하는 역할을 한다
4) Oralce DBMS를 사용한 JDBC 프로그램 작성을 위한 환경설정
① https://www.oracle.com 사이트에서 Oracle JDBC Driver 관련 라이브러리 파일 다운로드
- Oracle JDBC Driver 관련 라이브러리 파일 : ojdbc11.jar - JDK 버전 참조
② Oracle JDBC Driver 관련 라이브러리 파일(ojdbc11.jar)을 프로젝트의 폴더에 붙여넣기
③ 프로젝트의 폴더에 저장된 라이브러리 파일을 프로젝트에서 사용할 수 있도록 연결 - 빌드(Build) 처리
- 라이브러리의 클래스(인터페이스)를 프로젝트에서 사용 가능하도록 설정
- 프로젝트 >> 마우스 오른쪽 버튼 >> Properties(속성) >> Java Build Path(메뉴) >> Libraries 탭(클릭) >> classpath(클릭) >> Add JARs(클릭) >> 프로젝트의 jar 파일 선택 >> Apply And Close
2. STUDENT 테이블
- SQL DEVELOPER 프로그램에서 작성
- 학번(숫자형-PRIMARY KEY),이름(문자형),전화번호(문자형),주소(문자형),생년월일(날짜형)
CREATE TABLE STUDENT(
NO NUMBER(4) PRIMARY KEY,
NAME VARCHAR2(50),
PHONE VARCHAR2(20),
ADDRESS VARCHAR2(100),
BIRTHDAY DATE);
--Table STUDENT이(가) 생성되었습니다.
3. [CREATE] InsertStudentApp.java (정보 삽입 - insert)
- STUDENT테이블에 학생정보를 삽입하는 JDBC 프로그램 작성
package xyz.itwill.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//STUDENT 테이블 : 학번(숫자형-PRIMARY KEY),이름(문자형),전화번호(문자형),주소(문자형),생년월일(날짜형)
//CREATE TABLE STUDENT(NO NUMBER(4) PRIMARY KEY,NAME VARCHAR2(50),PHONE VARCHAR2(20)
// ,ADDRESS VARCHAR2(100),BIRTHDAY DATE)
//STUDENT 테이블에 학생정보를 삽입하는 JDBC 프로그램 작성
public class InsertStudentApp {
public static void main(String[] args) {
//비권장
/*
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
try {
//OracleDriver클래스를 객체로 생성하여
//DriverManager클래스의 JDBC Driver객체로 등록하기
//비권장 왜?
//DriverManager클래스에 동일한 Driver객체 여러개 등록 가능
//=>불필요한 객체들이 많아질 수 있음 - 비효율적
DriverManager.registerDriver(new OracleDriver());
DriverManager.registerDriver(new OracleDriver());
DriverManager.registerDriver(new OracleDriver());
DriverManager.registerDriver(new OracleDriver());
//=> 4개 등록된 객체들..
} catach(){
//
}
*/
//권장
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
try {
//🔥1.
//OracleDriver 클래스를 객체로 생성하여 DriverManager 클래스의 JDBC Driver 객체로 등록
//JDBC Driver : DriverManager 클래스에 등록된 다수의 Driver 객체
//=> Driver 객체 : DBMS 서버에 접속하여 SQL 명령을 전달하기 위한 기능을 제공하는 객체
//=> 즉 Driver객체가 있어야지 -> DBMS 서버에 접속해 -> SQL 명령 전달 가능
//DriverManager 클래스 : Driver 객체를 관리하기 위한 기능을 제공하는 클래스
//방법1. 비권장
//DriverManager.registerDriver(Driver driver) : Driver 객체를 전달받아 DriverManager 클래스가 관리할 수 있는 JDBC Driver로 등록하는 메소드
// => 동일한 Driver 객체가 DriverManager 클래스에 여러개 등록 가능 - 불필요한 드라이버 존재
//DriverManager.registerDriver(new OracleDriver());
//방법2. 권장
//Class.forName(String className) 메소드를 호출하여 ClassLoader 프로그램을 수동으로 실행하여 OracleDriver 클래스를 읽어 메모리에 저장
// => OracleDriver 클래스의 정적영역에서 OracleDriver 클래스로 객체를 생성하여 DriverManager 클래스의 registerDriver() 메소드를 호출하여 OracleDriver 객체를 JDBC Driver로 등록 처리 - 프로그램에서 한번만 실행
Class.forName("oracle.jdbc.driver.OracleDriver");
//=> 이렇게 하면 내부적으로는 OracleDriver 클래스의 정적영역에서 "OracleDriver클래스로 객체를 생성"하고,
//DriverManager 클래스의 "registerDriver() 메소드를 호출"하여 OracleDriver 객체를 JDBC Driver로 "자동 등록 처리"해줌
//=> 프로그램에서 딱 한번만 실행됨 - 여러번 사용해도 딱 한번만 등록됨!!
//=> 대다수의 DBMS Driver객체들은 읽어들이기만 하면 자동으로 객체가 만들어지고 등록됨!
//🔥2.
//DriverManager 클래스에 등록된 JDBC Driver 객체를 이용하여 DBMS 서버에 접속하여 Connection 객체를 반환받아 저장
// => Connection 객체 : DBMS 서버에 접속된 정보를 저장하기 위한 객체 (일종의 SESSION 접속환경)
//DriverManager.getConnection(String url,String username,String password)
// => DriverManager 클래스에 등록된 JDBC Driver 객체를 사용하여 DBMS 서버에 접속하는 메소드
// => 접속된 DBMS 서버의 정보가 저장된 Connection 객체 반환
// => 접속 URL 주소의 프로토콜을 이용하여 특정 DBMS 서버에 접속하여 SQL 명령 전달
//[String url]
//URL(Uniform Resource Locator) : 인터넷에 존재하는 자원의 위치를 표현하는 주소
//형식) Protocol:ServerName:Port:Resource
//ex) <http://www.itwill.xyz:80/test/index.html>
//[http] - 웹서비스를 제공해주는 프로토콜
//[www.itwill.xyz] - 서버네임
//[80] - 포트번호
//[/test/index.html] - 웹은 콜론안쓰고 최상위디렉토리밑에 있는 무엇~ 으로 `/` 사용
//[String url]
//Oracle DBMS 서버에 접속하여 데이타베이스를 사용하기 위한 URL 주소
//형식)jdbc:oracle:thin:@ServerName:Port:SID
//[@] - 로그인하세요!!(인증하세요)의 의미
//[SID] - 데이타베이스의 식별자 (오라클XE DBMS에서 사용하는 식별자 - `xe` )
//JDBC 관련 클래스의 메소드를 호출하면 반드시 SQLException 발생
// => SQLException : DBMS 서버 관련 문제(SQL 명령)가 있는 경우 발생되는 예외
// => SQLException은 일반 예외이므로 반드시 예외처리를 해야만 에러 미발생
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="scott";
String password="tiger";
//DBMS서버에 접속이 완료되면 Connection객체 반환함
con=DriverManager.getConnection(url, username, password); //DBMS서버에 접속 완료
//🔥3.
//Connection 객체로부터 SQL 명령을 전달할 수 있는 Statement 객체를 반환받아 저장
//Connection.createStatement() : SQL 명령을 전달할 수 있는 Statement 객체를 생성하여 반환하는 메소드
//Statement 객체 : SQL 명령을 현재 접속중인 DBMS 서버에 전달하여 실행하기 위한 객체
stmt=con.createStatement(); //DBMS서버에 SQL 명령 전달 가능
//🔥4.
//Statement 객체를 이용하여 SQL 명령을 전달하여 실행하고 실행결과를 반환받아 저장
//Statement.executeUpdate(String sql) : DML 명령 또는 DDL 명령을 전달하여 실행하기 위한 메소드
//=> 실행결과로 조작행의 갯수를 정수값(int)으로 반환
//Statement.executeQuery(String sql) : SELECT 명령을 전달하여 실행하기 위한 메소드
//=> 실행결과로 검색행이 저장된 ResultSet 객체 반환
//String sql="insert into student values(1000,'홍길동','010-1324-7512','서울시 강남구','00/01/01')";
//String sql="insert into student values(2000,'임꺽정','010-4561-7864','수원시 월정구','02/05/08')";
String sql="insert into student values(3000,'전우치','017-8741-2130','인천시 상당구','1998-12-11')";
int rows=stmt.executeUpdate(sql); //삽입완료!
//🔥5.
//반환받은 SQL 명령의 실행결과를 이용하여 출력
//=> JDBC 기능을 메소드로 작성할 경우 실행에 대한 결과값 반환
System.out.println("[메세지]"+rows+"명의 학생정보를 삽입 하였습니다.");
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {//예외와 상관없이 무조건 실행될 명령을 작성하는 영역
//🔥6.
//JDBC 관련 객체의 close() 메소드를 호출하여 객체 제거
// => JDBC 관련 객체 생성의 '반대 순서'로 제거
try {
//if 구문을 이용하여 참조변수에 객체가 저장되어 있는 경우에만 close() 메소드 호출 - NullPointerExcetion 발생 방지
//=>NullPointerExcetion : 참조변수에 null이 저장된 상태에서 메소드를 호출한 경우 발생되는 예외
if(stmt!=null) stmt.close(); //Statement.close() : Statement 객체 제거
if(con!=null) con.close(); //Connection.close() : Connection 객체 제거 - DBMS 서버 접속 종료 (제거필수, 왜? 다른 사용자도 Connection을 이용해 접속해서 sql 명령을 전달해야 하므로 반드시 닫기 - 원래 Connection의 갯수 제한있음)
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
🏡 삽입 성공 시
//[메세지]3명의 학생정보를 삽입 하였습니다.
🏡 학번이 중복되는 학생이 전달되면
//[에러]JDBC 관련 오류 = ORA-00001: 무결성 제약 조건(SCOTT.SYS_C008361)에 위배됩니다
🏡 SQL DEVELOPER 프로그램에서 확인해보기
SELECT * FROM STUDENT ORDER BY NO;
4. [UPDATE] UpdateStudentApp.java (정보 변경 - Update)
package xyz.itwill.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//STUDENT 테이블에 저장된 학생정보 중 학번이 [2000]인 학생의 이름을 [임걱정]으로 변경하고
//주소를 [부천시 원미구]로 변경하는 JDBC 프로그램 작성
public class UpdateStudentApp {
public static void main(String[] args) {
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
try {
//🔥1.
//OracleDriver클래스를 읽어 메모리에 저장하기
Class.forName("oracle.jdbc.driver.OracleDriver");
//🔥2.
//DriverManager클래스에 등록된 JDBC Driver객체를 이용하여
//DBMS 서버에 접속하기 + 접속해서 Connection 객체를 반환받아 저장하기
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="scott";
String password="tiger";
//DBMS서버에 접속이 완료되면 -> Connection객체 반환함
con=DriverManager.getConnection(url, username, password); //DBMS 서버에 접속
//🔥3.
//Connection 객체로부터 SQL 명령을 전달할 수 있는 Statement 객체를 반환받아 저장
stmt=con.createStatement();
//🔥4.
//원하는 명령을 전달해서 실행하고 반환받아 저장하기
//Statement.executeUpdate(String sql)
//=>DML명령(INSERT,UPDATE,DELETE) 또는 DDL 명령(CREATE,DROP)을 전달하여 실행하기 위한 메소드
//=>실행결과로 조작행의 갯수를 정수값(int)으로 반환
String sql="update student set name='임걱정',address='부천시 원미구' where no=2000";
int rows=stmt.executeUpdate(sql);
//🔥5.
//반환받은 SQL 명령의 실행결과를 이용하여 출력하기
//사용자에게 결과 알려주기
System.out.println("[메세지]"+rows+"명의 학생정보를 변경 하였습니다.");
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
//🔥6.
//사용했던 모든 JDBC객체 삭제하기
try {
//JDBC 관련 객체 생성의 '반대 순서'로 제거
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
🏡 변경 성공 시
//[메세지]1명의 학생정보를 변경 하였습니다.
🏡 SQL DEVELOPER 프로그램에서 확인해보기
SELECT * FROM STUDENT ORDER BY NO;
5. [DELETE] DeleteStudentApp.java (정보 삭제 - Delete)
package xyz.itwill.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//STUDENT 테이블에 저장된 학생정보 중 학번이 [3000]인 학생정보를 삭제하는 JDBC 프로그램 작성
public class DeleteStudentApp {
public static void main(String[] args) {
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
try {
//🔥1.
//OracleDriver클래스를 읽어 메모리에 저장하기
Class.forName("oracle.jdbc.driver.OracleDriver");
//🔥2.
//DriverManager클래스에 등록된 JDBC Driver객체를 이용하여
//DBMS 서버에 접속하기 + 접속해서 Connection 객체를 반환받아 저장하기
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="scott";
String password="tiger";
//DBMS서버에 접속이 완료되면 Connection객체 반환함
con=DriverManager.getConnection(url, username, password); //DBMS 서버에 접속
//🔥3.
//Connection 객체로부터 SQL 명령을 전달할 수 있는 Statement 객체를 반환받아 저장
stmt=con.createStatement();
//🔥4.
//원하는 명령을 전달해서 실행하고 반환받아 저장하기
//Statement.executeUpdate(String sql)
//=>DML명령(INSERT,UPDATE,DELETE) 또는 DDL 명령(CREATE,DROP)을 전달하여 실행하기 위한 메소드
//=>실행결과로 조작행의 갯수를 정수값(int)으로 반환
String sql="delete from student where no=3000";
int rows=stmt.executeUpdate(sql);
//🔥5.
//반환받은 SQL 명령의 실행결과를 이용하여 출력하기
//사용자에게 결과 알려주기
if(rows>0) {
System.out.println("[메세지]"+rows+"명의 학생정보를 삭제 하였습니다.");
} else {
System.out.println("[메세지] 삭제할 학번의 학생정보를 찾을 수 없습니다.");
}
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
//🔥6.
//사용했던 모든 JDBC객체 삭제하기
try {
//JDBC 관련 객체 생성의 '반대 순서'로 제거
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
🏡 삭제 성공 시
//[메세지]1명의 학생정보를 삭제 하였습니다.
🏡 SQL DEVELOPER 프로그램에서 확인해보기
SELECT * FROM STUDENT ORDER BY NO;
6. [READ] SelectStudentApp.java (정보 출력 - Select)
package xyz.itwill.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//STUDENT 테이블에 저장된 모든 학생정보를 검색하여 출력하는 JDBC 프로그램 작성
public class SelectStudentApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="scott";
String password="tiger";
con=DriverManager.getConnection(url, username, password);
stmt=con.createStatement();
String sql="select * from student order by no";
//🔥4.
//원하는 명령을 전달해서 실행하고 반환받아 저장하기
//Statement.executeQuery(String sql) : SELECT 명령을 전달하여 실행하기 위한 메소드
//=> 실행결과로 검색행이 저장된 ResultSet 객체 반환
//ResultSet 객체 : 검색결과를 테이블 형식(2차원 배열)으로 저장하여 표현한 객체
rs=stmt.executeQuery(sql);
//🔥Select 명령을 살행하기 위해 추가됨🔥
//🥝다중행을 검색할 경우 : [if문 내 do-while문] 혹은 [while문]
//🥝단일행을 검색할 경우 : [반복문 필요없음]
//ResultSet 객체에 저장된 검색행을 행단위로 처리하기 위해 내부적인 커서(Cursor) 제공 - ResultSet 커서
// => ResultSet 커서는 최초 BOF(Before Of File) 영역에 위치
//ResultSet.next() : ResultSet 커서를 다음행으로 이동하는 메소드 - boolean 반환
// => false 반환 : ResultSet 커서 위치에 처리행이 없는 경우의 반환값 - EOF(End Of File)
// => true 반환 : ResultSet 커서 위치에 처리행이 있는 경우의 반환값
//🍓만약 ResultSet커서를 다음행으로 이동했을 때 처리행이 있다면(검색행 존재)
if(rs.next()) {
//사용자에게 결과 알려주기
System.out.println("[메세지]검색된 학생정보가 있습니다.");
//🥝반복문사용
//왜?
//검색된 다수의 학생정보가 저장된 ResultSet 객체를 반복처리할 것임
//🥝do-while문 사용사용
//왜?
//1. ResultSet 객체에 저장된 학생정보의 갯수가 불확실함 - while문
//2. 첫번째 행 처리 후 반드시 ResultSet 커서를 다음행으로 이동해야 하기 때문
//🍓ResultSet 커서가 위치한 처리행의 컬럼값을 반환받아 저장하고 출력해라~
do {
//(중요)⭐ResultSet.getXXX(int columnIndex)메소드 혹은
//(중요)⭐ResultSet.getXXX(String columnLabel)메소드
//=>ResultSet 커서가 위치한 처리행의 컬럼값을 반환하는 메소드
//=>XXX는 컬럼값을 반환받기 위한 Java 자료형을 표현
//=> columnIndex : 검색행에서 검색대상의 첨자(Index:1부터 1씩 증가되는 정수값)로 컬럼값 표현
//=> columnLabel : 검색행에서 검색대상의 이름(컬럼명 또는 별칭)으로 컬럼값 표현
//int no=rs.getInt(1); - 이것보다 아래처럼!
//🍓컬럼값을 반환받아 저장하는중..
int no=rs.getInt("no");
String name=rs.getString("name");
String phone=rs.getString("phone");
String address=rs.getString("address");
String birthday=rs.getString("birthday");
//처리행의 컬럼값은 오라클 자료형에 상관없이 getString() 메소드를 호출하여 문자열(String 객체)로 반환 가능
//Date birthday=rs.getDate("birthday"); - 여기서의 Date : java.sql패키지
//🍓컬럼값 출력하는중..
System.out.println("학번 = "+no);
System.out.println("이름 = "+name);
System.out.println("전화번호 = "+phone);
System.out.println("주소 = "+address);
//System.out.println("생년월일 = "+birthday);
System.out.println("생년월일 = "+birthday.substring(0,10));
System.out.println("==================================================");
} while(rs.next()); //🍓ResultSet 커서 위치에 처리행이 있는 경우 계속 반복 실행해라~
//🍓ResultSet커서를 다음행으로 이동했을 때 처리행이 없다면~ (검색행 미존재)
} else {
System.out.println("[메세지]검색된 학생정보가 없습니다.");
}
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
//🔥6.
//사용했던 모든 JDBC객체 삭제하기
try {
//JDBC 관련 객체 생성의 '반대 순서'로 제거
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
🏡 검색 성공 시
7. [READ] SelectEmpApp.java (정보 출력 - Select)
package xyz.itwill.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//EMP 테이블에 저장된 모든 사원정보의 사원번호,사원이름,급여를 급여로 내림차순 정렬되도록
//검색하여 출력하는 JDBC 프로그램
public class SelectEmpApp {
public static void main(String[] args) {
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//🔥1.
//OracleDriver클래스를 읽어 메모리에 저장하기
Class.forName("oracle.jdbc.driver.OracleDriver");
//🔥2.
//DriverManager클래스에 등록된 JDBC Driver객체를 이용하여
//DBMS 서버에 접속하기 + 접속해서 Connection 객체를 반환받아 저장하기
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="scott";
String password="tiger";
//DBMS서버에 접속이 완료되면 Connection객체 반환함
con=DriverManager.getConnection(url, username, password); //DBMS 서버에 접속
//🔥3.
//Connection 객체로부터 SQL 명령을 전달할 수 있는 Statement 객체를 반환받아 저장
stmt=con.createStatement();
//🔥4.
//원하는 명령을 전달해서 실행하고 반환받아 저장하기
//Statement.executeQuery(String sql)
//=>SELECT 명령을 전달하여 실행하기 위한 메소드
//=>실행결과로 검색행이 저장된 ResultSet 객체 반환
//=> ResultSet 객체 : 검색결과를 테이블 형식(2차원 배열)으로 저장하여 표현한 객체
String sql="select empno,ename,sal from emp order by sal desc";
rs=stmt.executeQuery(sql);
//🍓ResultSet 커서 위치에 처리행이 있는 경우 계속 반복 실행해라~
while(rs.next()) {
//🍓컬럼값을 반환받아서 변수에 저장없이 바로 출력하는 중..
System.out.println("사원번호 = "+rs.getInt("empno")+", 사원이름 = "+rs.getString("ename")+", 급여 = "+rs.getInt("sal"));
}
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
//🔥6.
//사용했던 모든 JDBC객체 삭제하기
try {
//JDBC 관련 객체 생성의 '반대 순서'로 제거
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
🏡 검색 성공 시
반응형
'jdbc' 카테고리의 다른 글
[jdbc] 6. 학생관리 프로그램 (0) | 2024.05.14 |
---|---|
[jdbc] 5. DBCP 프로그램 (0) | 2024.05.14 |
[jdbc] 4. JDBC 프로그램의 활용 (0) | 2024.05.13 |
[jdbc] 2. (java.lang패키지) Class객체(클래즈) (0) | 2024.05.12 |
[jdbc] 1. JDBC 프로그램 작성을 위한 환경설정 (0) | 2024.05.12 |