JAVA를 이용하여 DBMS에 접속해 SQL 명령을 전달하여 실행하기 위한 기능의 클래스 또는 인터페이스
java.sql 패키지 : JDBC 기능을 제공하는 (클래스) 또는 인터페이스가 선언된 패키지
JDBC 구조
ORACLE JDBC DRIVER 관련 라이브러리 파일 다운로드
Oracle JDBC Driver 관련 라이브러리 파일(ojdbc11.jar)을 프로젝트의 폴더에 붙여넣기
프로젝트의 폴더에 저장된 라이브러리 파일(라이브러리의 클래스(인터페이스))을 프로젝트에서 사용할 수 있도록 연결 - 빌드(Build) 처리
ClassLoader 프로그램에 의해 클래스(Class 파일)를 읽어 메모리(Method 영역)에 저장 - 자동(1번)
new 연산자가 메모리에 저장된 클래스 (Class 객체 - Clazz) 의 생성자 (Constructor)를 호출하여 객체(Object - Instance) 생성
생성된 객체의 메모리 주소(HashCode)를 전달받아 참조변수(Stack 영역)를 생성하여 저장
참조변수에 저장된 객체를 참조하여 메소드 호출 - 기능 구현
Object.getClass() 메소드를 호출하는 방법 (현재 사용하는 클래스에 대한 Class 객체 반환)
[클래스명.class] 형식으로 표현하는 방법
JDBC Driver : DriverManager 클래스에 등록된 다수의 Driver 객체(오라클, mysql 등)
Driver 객체 : DBMS 서버에 접속하여 SQL명령을 전달하기 위한 기능을 제공하는 객체
DriverManager 클래스 : Driver 객체를 관리하기 위한 기능을 제공하는 클래스
Connection 객체 : DBMS 서버에 접속된 정보를 저장하기 위한 객체
(1). OracleDriver 클래스를 객체로 생성하여 DriverManager 클래스의 JDBC Driver 객체로 등록
1. Class.forName(String className) 메소드 호출
ClassLoader 프로그램을 수동으로 실행하여 OracleDriver 클래스를 읽어 메모리에 저장하면 OracleDriver 클래스의 정적영역에서 OracleDriver 클래스로 객체를 생성
DriverManager 클래스의 registerDriver() 메소드를 호출하여 OracleDriver 객체를 JDBC Driver로 등록 처리
Class.forName("oracle.jdbc.driver.OracleDriver");
DriverManager 클래스에 등록된 JDBC Driver 객체를 이용하여 DBMS 서버에 접속하여 Connection 객체를 반환받아 저장
DriverManager.getConnection(String url, String username, String password)
접속된 DBMS 서버의 정보가 저장된 Connection 객체 반환
oracle DBMS 서버에 접속하여 데이터베이스를 사용하기 위한 URL주소
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="insert into student values(3000,'홍','735-2130','인천','12-11')";
int rows=stmt.executeUpdate(sql);
ResultSet rs=stmt.executeQuery(sql);
public class InsertStudentApp {
public static void main(String[] args) {
//JDBC 관련 객체를 저장하기 위한 참조변수는 try 영역 외부에서 선언
// => try 영역을 포함한 모든 영역에서 참조변수를 이용해 객체 사용 가능
Connection con=null;
Statement stmt=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//1. OracleDriver 클래스로 객체를 생성
String url="jdbc:oracle:thin:@localhost:1521:xe";
//oracle DBMS 서버 주소
String username="scott";
String password="tiger";
con=DriverManager.getConnection(url, username, password);
//2. JDBC Driver 객체를 사용하여 DBMS 서버에 접속
//3. SQL 명령을 전달할 수 있는 Statement 객체를 생성
stmt=con.createStatement();
//4. SQL 명령을 전달하여 실행
String sql="insert into student values(3000,'전우치','017-8741-2130',
'인천시 상당구','1998-12-11')";
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 관련 객체의 close() 메소드를 호출하여 객체 제거
try {
//if 구문을 이용하여 참조변수에 객체가 저장되어 있는 경우에만 close()
//메소드 호출 - NullPointerExcetion 발생 방지
//NullPointerExcetion : 참조변수에 null이 저장된 상태에서 메소드를
//호출한 경우 발생되는 예외
if(stmt!=null) stmt.close();//Statement.close() : Statement 객체 제거
//Connection.close() : Connection 객체 제거 - DBMS 서버 접속 종료
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//STUDENT 테이블에 저장된 학생정보 중 학번이 [2000]인 학생의 이름을 [임걱정]으로 변경하고
//주소를 [부천시 원미구]로 변경하는 JDBC 프로그램 작성
public class UpdateStudentApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=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="update student set name='임걱정',address='부천시 원미구'
where no=2000";
int rows=stmt.executeUpdate(sql);
System.out.println("[메세지]"+rows+"명의 학생정보를 변경 하였습니다.");
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
try {
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//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";
//Statement.executeQuery(String sql) : SELECT 명령을 실행하기 위한 메소드
// → SELECT 명령의 실행결과를 ResultSet 객체로 반환
//ResultSet 객체 : 검색결과를 테이블 형식의 객체로 저장하여 표현한 객체
rs=stmt.executeQuery(sql);
//ResultSet 객체에 저장된 검색행을 행단위로 처리하기 위해 내부적인 커서 제공
// → ResultSet 커서는 최초 BOF(Before Of File) 영역에 위치
//ResultSet.next() : ResultSet 커서를 다음행으로 이동하는 메소드 - boolean
// → false 반환 : ResultSet 커서 위치에 처리행이 없는 경우의 반환값 - EOF
// => true 반환 :ResultSet 커서 위치에 처리행이 있는 경우의 반환값
if(rs.next()) {//ResultSet 커서를 다음행으로 이동하여 처리행이 존재하는 경우
//System.out.println("[메세지]검색된 학생정보가 있습니다.");
//검색된 다수의 학생정보를 저장한 ResultSet 객체를 처리하기 위한 반복문
// → ResultSet 객체에 저장된 학생정보의 갯수가 불확실하므로 while 반복문 사용
//첫 행 처리 후 ResultSet 커서를 다음행으로 이동하기 위해 do~while 반복문 사용
do {
//ResultSet 커서가 위치한 처리행의 컬럼값을 반환받아 저장
//ResultSet.getX(int Index) 또는 ResultSet.getX(String Label)
// → ResultSet 커서가 위치한 처리행의 컬럼값을 반환하는 메소드
// → X는 컬럼값을 반환받기 위한 Java 자료형을 표현
// → columnIndex : 검색대상의 첨자(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");
//Date birthday=rs.getDate("birthday");
//처리행의 컬럼값은 오라클 자료형에 상관없이 getString()
//메소드를 호출하여 문자열(String 객체)로 반환 가능
String birthday=rs.getString("birthday");
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 커서 위치에 처리행이 있는 경우 반복문 실행
} else {//ResultSet 커서를 다음행으로 이동하여 처리행이 존재하지 않는 경우
System.out.println("[메세지]검색된 학생정보가 없습니다.");
}
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//EMP 테이블에 저장된 모든 사원정보의 사원번호,사원이름,급여를 급여로 내림차순 정렬되도록
//검색하여 출력하는 JDBC 프로그램
public class SelectEmpApp {
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 empno,ename,sal from emp order by sal desc";
rs=stmt.executeQuery(sql);
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 {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//STUDENT 테이블에 저장된 학생정보 중 학번이 [3000]인 학생정보를 삭제하는 JDBC 프로그램 작성
public class DeleteStudentApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=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="delete from student where no=3000";
int rows=stmt.executeUpdate(sql);
System.out.println("[메세지]"+rows+"명의 학생정보를 삭제 하였습니다.");
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
try {
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC 프로그램은 기본적으로 AutoCommit 기능이 활성화 처리되어 있어 SQL 명령(DML)이 전달되어 실행되면 자동으로 커밋 처리
JDBC 프로그램에서 AutoCommit 기능을 비활성화 처리하여 예외 발생 없이 프로그램이 정상적으로 실행된 경우 커밋하고 예외가 발생된 경우 롤백 처리하는 것을 권장
Connection.setAutoCommit (boolean autoCommit) : AutoCommit 기능의 사용여부를 변경하는 메소드
(false : AutoCommit 기능 비활성화, true : AutoCommit 기능 활성화(기본))
Connection.commit() : Connection 객체에 의해 전달된 SQL 명령에 커밋 처리 메소드
Connection.rollback() : Connection 객체에 의해 전달된 모든 SQL 명령 롤백 처리 메소드
//STUDENT 테이블에 저장된 학생정보 중 학번이 [2000]인 학생의 이름을
//[임꺽정]으로 변경하는 JDBC 프로그램 작성
public class TransactionControlApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=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);
//Connection.setAutoCommit(boolean autoCommit)
//: AutoCommit 기능의 사용여부를 변경하는 메소드
//false : AutoCommit 기능 비활성화, true : AutoCommit 기능 활성화(기본)
con.setAutoCommit(false);
stmt=con.createStatement();
String sql="update student set name='임꺽정' where no=2000";
int rows=stmt.executeUpdate(sql);
//if(con!=null) throw new Exception();//무조건 예외 발생
if(rows>0) {//조작된 행이 있는 경우
System.out.println("[메세지]"+rows+"명의 학생정보를 변경 하였습니다.");
} else {//조작된 행이 없는 경우
System.out.println("[메세지]해당 학번의 학생정보를 찾을 수 없습니다.");
}
//Connection.commit() : Connection 객체에 의해 전달된 SQL 명령에 커밋 처리
con.commit();
} catch (ClassNotFoundException e) {
System.out.println("[에러]OracleDriver 클래스를 찾을 수 없습니다.");
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} catch (Exception e) {
System.out.println("[에러]프로그램에 예기치 못한 오류가 발생 하였습니다.");
try {
//Connection.rollback()
//: Connection 객체에 의해 전달된 모든 SQL 명령 롤백 처리 메소드
con.rollback();
} catch (SQLException e1) { }
} finally {
try {
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public class ConnectionFactory {
//Connection 객체를 생성하여 반환하는 메소드
public static Connection getConnection() {
Connection con=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);
} catch (Exception e) {
System.out.println("[에러]Connection 객체를 생성할 수 없습니다.");
}
return con;
}
//JDBC 관련 객체를 전달받아 제거하는 메소드 - 오버로드 선언
public static void close(Connection con) {
try {
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection con, Statement stmt) {
try {
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection con, Statement stmt, ResultSet rs) {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
DEPT 테이블에 저장된 모든 부서정보를 검색하여 출력하는 JDBC 프로그램 작성
public class ConnectionFactoryApp {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {//ConnectionFactory 클래스의 getConnection 메소드 실행
//DBMS 서버에 접속
con=ConnectionFactory.getConnection();
stmt=con.createStatement();
String sql="select * from dept order by deptno";
rs=stmt.executeQuery(sql);
while(rs.next()) {
System.out.println("부서번호 = "+rs.getInt("deptno")+", 부서이름 = "
+rs.getString("dname")+", 부서위치 = "+rs.getString("loc"));
}
} catch (SQLException e) {
System.out.println("[에러]JDBC 관련 오류 = "+e.getMessage());
} finally {
//ConnectionFactory 클래스의 close 메소드 실행
ConnectionFactory.close(con, stmt, rs);
}
}
}
ResultSet.getMetaData() : 검색결과(ResultSet 객체)에 대한 부가적인 정보를 저장하는 ResultSetMetaData 객체를 반환하는 메소드
ResultSetMetaData.getColumnCount() : 검색행의 컬럼갯수를 반환하는 메소드
ResultSetMetaData.getColumnLabel(int columnIndex) : columnIndex 위치의 컬럼명을 반환하는 메소드
ResultSetMetaData.isNullable(int columnIndex) : columnIndex 위치의 컬럼에 대한 NULL 허용 유무값(0 또는 1)을 반환하는 메소드
ResultSetMetaData.columnNoNulls : NULL을 허용하지 않는 값을 표현하는 상수(Constant)
ResultSetMetaData.getColumnTypeName(int columnIndex) : columnIndex 위치의 컬럼에 대한 오라클 자료형을 반환하는 메소드
ResultSetMetaData.getColumnDisplaySize(int columnIndex) : columnIndex 위치의 컬럼에 대한 출력크기를 반환하는 메소드
//STUDENT 테이블에 저장된 모든 학생정보를 검색하여 출력하는 JDBC 프로그램 작성
public class ResultSetMetaDataApp {
public static void main(String[] args) throws SQLException {
Connection con=ConnectionFactory.getConnection();
Statement stmt=con.createStatement();
String sql="select * from student order by no";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {
System.out.println("학번="+rs.getInt("no")+", 이름="+rs.getString("name"));
}
System.out.println("====================================================");
//ResultSet.getMetaData() : 검색행(ResultSet 객체)에 대한 부가적인 정보를 저장하는
//ResultSetMetaData 객체를 반환하는 메소드
ResultSetMetaData rsmd=rs.getMetaData();
//ResultSetMetaData.getColumnCount() : 검색행의 컬럼 갯수를 반환하는 메소드
int columnCount=rsmd.getColumnCount();
System.out.println("검색행의 컬럼 갯수 = "+columnCount);//5
System.out.println("=====================================================");
for(int i=1;i<=columnCount;i++) {
//ResultSetMetaData.getColumnLabel(int columnIndex)
//: columnIndex 위치의 컬럼명을 반환하는 메소드
String columnLabel=rsmd.getColumnLabel(i);
//ResultSetMetaData.isNullable(int columnIndex) : columnIndex 위치의
//컬럼에 대한 NULL 허용 유무값(0 또는 1)을 반환하는 메소드
int isNull=rsmd.isNullable(i);//isNull에 0 또는 1이 반환됨
String nullResult="NULL";
//ResultSetMetaData.columnNoNulls : NULL를 허용하지 않는 값을 표현하는 상수
// → 정수값 : 0
if(isNull==ResultSetMetaData.columnNoNulls) {
nullResult="NOT NULL";
}
//ResultSetMetaData.getColumnTypeName(int columnIndex)
// : columnIndex 위치의 컬럼에 대한 오라클 자료형을 반환하는 메소드
String columnTypeName=rsmd.getColumnTypeName(i);
//ResultSetMetaData.getColumnDisplaySize(int columnIndex)
// : columnIndex 위치의 컬럼에 대한 출력크기를 반환하는 메소드
int columnDisplaySize=rsmd.getColumnDisplaySize(i);
System.out.println("컬럼명 = "+columnLabel);//no,name,...
System.out.println("NULL 허용 유무 = "+nullResult);//not null,null,...
System.out.println("컬럼 자료형 = "+columnTypeName);//number, varchar2,..
System.out.println("컬럼 출력크기 = "+columnDisplaySize);//5,50,...
System.out.println("==================================================");
ConnectionFactory.close(con, stmt, rs);
}
}
Statement.Execute(String sql) : SQL 명령을 전달하여 실행하는 메소드 (boolean 반환)
Statement.getResultSet() : Statement 객체로 전달되어 실행된 SELECT 명령에 대한 검색결과를 저장한 ResultSet 객체를 반환하는 메소드
Statement.getUpdateCount() : Statement 객체로 전달되어 실행된 DML 명령에 대한 조작행의 갯수를 정수값으로 반환하는 메소드 (DDL 명령은 0을 반환)
public class ExecuteApp {
public static void main(String[] args) throws SQLException {
Connection con=ConnectionFactory.getConnection();//서버접속
Statement stmt=con.createStatement();//statement 객체생성
int choice=1;
String sql="";
if(choice==1) {
sql="update student set name='임꺽정' where no=2000";
} else {
sql="select * from student order by no";
}
boolean result=stmt.execute(sql);
if(result) {//SELECT 명령을 전달하여 실행한 경우
//Statement.getResultSet() : Statement 객체로 전달되어 실행된 SELECT 명령에 대한
//검색결과를 저장한 ResultSet 객체를 반환하는 메소드
ResultSet rs=stmt.getResultSet();
while(rs.next()) {
System.out.println("학번="+rs.getInt("no")+",이름="+rs.getString("name"));
}
ConnectionFactory.close(con, stmt, rs);
} else {//DML 명령 또는 DDL 명령을 전달하여 실행한 경우
//Statement.getUpdateCount() : Statement 객체로 전달되어 실행된 DML 명령에 대한
//조작행의 갯수를 정수값으로 반환하는 메소드 - DDL 명령은 0을 반환
int rows=stmt.getUpdateCount();
System.out.println("[결과]"+rows+"명의 학생정보를 변경 하였습니다.");
ConnectionFactory.close(con, stmt);
}
}
}
public class SqlMinusApp {
public static void main(String[] args) throws Exception {
//키보드로 SQL 명령(문자열)을 입력받기 위한 입력스트림 생성
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Connection con=ConnectionFactory.getConnection();
Statement stmt=con.createStatement();
ResultSet rs=null;
System.out.println("SQLMinus 프로그램을 실행합니다.(종료 : exit)");
while(true) {
//키보드로 SQL 명령을 입력받아 저장
System.out.print("SQL> ");
String sql=in.readLine().trim();
//키보드로 입력받은 문자열의 앞과 뒤의 모든 공백 제거
//키보드 입력값이 없는 경우 반복문을 처음부터 다시 실행
if(sql==null || sql.equals("")) continue;
//키보드 입력값이 [EXIT]인 경우 반복문 종료 - 프로그램 종료
if(sql.equalsIgnoreCase("exit")) break;//대소문자 미구분
try {
if(stmt.execute(sql)) {//SELECT 명령을 전달하여 실행한 경우
rs=stmt.getResultSet();//ResultSet객체에 명령에 대한 검색결과 저장
if(rs.next()) {//검색행이 있는 경우
ResultSetMetaData rsmd=rs.getMetaData();
//SELECT 명령에 대한 검색대상의 갯수를 반환받아 저장
int columnCount=rsmd.getColumnCount();
System.out.println("===================================");
//SELECT 명령에 대한 검색대상의 이름을 반환받아 출력
for(int i=1;i<=columnCount;i++) {
System.out.print(rsmd.getColumnLabel(i)+"\t");
}
System.out.println();
System.out.println("===================================");
//반복문을 사용하여 검색행의 컬럼값을 반환받아 저장
do {
for(int i=1;i<=columnCount;i++) {
String columnValue=rs.getString(i);//컬럼값 반환
//컬럼의 오라클 자료형이 [DATE]인 경우
if(rsmd.getColumnTypeName(i).equals("DATE")) {
columnValue=columnValue.substring(0,10);
}
//컬럼값이 없는 경우
if(columnValue==null) {
columnValue=" ";
}
//컬럼값 출력
System.out.print(columnValue+"\t");
}
System.out.println();
} while(rs.next());
} else {//검색행이 없는 경우
System.out.println("검색된 결과가 없습니다.");
}
} else {//INSERT,UPDATE,DELETE 명령을 전달하여 실행한 경우
int rows=stmt.getUpdateCount();//조작행의 갯수 반환
System.out.println(rows+"개의 행을 "
+sql.substring(0,6).toUpperCase()+" 하였습니다.");
}
System.out.println();
} catch (SQLException e) {
//키보드로 입력받아 실행된 SQL 명령에 문제가 있는 경우 SQLException 발생
System.out.println("SQL 오류 = "+e.getMessage());
}
}
ConnectionFactory.close(con, stmt, rs);
System.out.println("[메세지]SQLMinus 프로그램을 종료합니다.");
}
}