반응형
*Statement
Statement |
: 쿼리문을 모른다.(쿼리문이 실행될때 쿼리문을 알게된다.)
실행할 때마다 쿼리문이 매번 생성되어 실행된다.
bind변수 x
SQL Injection이 발생할 수 있다.
(매년 거의 1위하는 공격)
항상느린것은 아니고, 쿼리문이 한번만(적은 횟수로) 실행될때 얘가 더빨라진다. |
총한번을 쏘기 위해 다 하나하나 조립해 쏘는거고 |
|
↑ |
|
|
공통 :
자바코드에서 쿼리문 작성 에는 ;(세미콜론) 을 넣지 않는다! 넣으면 Error |
PreparedStatement |
: 쿼리문을 안다.(객체가 얻어질 때 부터)
쿼리문은 미리 생성되어있고, 값만 넣어서 실행한다.
bind변수 존재
SQL Injection이 발생할 수 없다.
쿼리문이 반복실행 될때 속도가 빠르다. |
탄창만 넣어서 쏘는것으로 훨씬 빠름. |
|
↑ |
|
|
|
CallableStatement |
: Procedure실행 |
|
|
*Statement 사용법
-
얻기
-
Statement stmt =con.createStatement(); //이문장 어디에도 쿼리문이 들어가 있지않다. 그래서 모른다.
-
insert,update,delete
-
insert는 무조건 한 행 추가 되었거나 예외
-
update,delete는 0~n개의 행이 변경또는 삭제
-
int cnt = stmt.executeUpdate(""sql");
-
1.드라이버 로딩(DB client : QuaumDB)
Class.forName("Oracle.jdbc.OracleDriver");
2.Connection 얻기
background service : os랑 같이 돌아 컴퓨터가 키는게 느려질수 있다.(ssd는 영향ㄴ)
String url="jdbc:Oracle:thin:@ip:1521/*port*/:orcl/*SID*/";
String id ="scott"; //my 는 root ms 는 sa
String pass="tiger";
Connection con = DriverManager.getConnection(url,id,pass);
auto commit이 기본설정이라 해제해야만 따로처리가능(setAutoCommit(false); 로 해제)
id와 pass를 인증하여 되돌아온다.
3.쿼리문 생성객체를 얻는다.
Statement stmt=con.createStatement();
4.쿼리문 수행후 결과 얻기
DEPT->insert
int deptno=90;
String dname="댄스부";
String loc="구로구";
String sql="insert into dept(deptno,dname,loc)
values("+deptno+",'"+dname+"','"+loc+"')";
int cnt = stmt.executeUpdate(sql);
5.연결 끊기
stmt.close();
con.close();
+StatementCRUD |
|
+insertCpDept(CpDeptVo):void
throws SQLException
//VO(value object)를 많이쓴다.
+updateCpDept(CpDeptVo):boolean
trowsSQLException
+deleteCpDept(int) : boolean
trows SQLException
+selectAllCpDept(): List<CpDeptVO>
+selectOneCpDept(int/*부서번호*/): OneCpDeptVO |
| | |
+CpDeptVO |
+OneCpDeptVO |
+RunStatement(Rul) |
-int deptno
-String dname,loc |
-String dname,loc |
|
+Constructor()
+getter()
+setter() |
|
+static main(String[]) : void |
<JVM>port=====port<Client-DB-Table>
ResultSet rs=stmt.executeQuery("sql");
while(rs.next()){
int deptno=rs.getInt("deptno"); //10 20
String dname=rs.getString("dname");//개발 유지
String loc =rs.getString("loc");//서울 대전
}//end while
//무한루프로 돌고
//리스트에 데이터형이 여러개인 타입이 여려개 들어가게 된다.
CpDeptVo cdv=null;
while(rs.next()){
cdv=new CpDeptVO(rs.getInt("deptno");
rs.getString("dname");
rs.getString("loc");
list.add(cdv);
}
*Statement 사용법2
-
select(조회!는 위와 조금 다르다)
-
<db는 아무것도 갖지 않았는데?제어권을 받아옴??
-
<커서의 제어권을 받기도 하지만 dev와 자바간의 데이터 변환의 일도 한다.(ex\db의 number 가 java에는 없으므로 그데이터형을 변환)
-
<0번부터 시작하긴 해 근데 처음을 커서가 가짐...그래서1번
package day0104;
public class CpDeptVO {
private int deptno;
private String dname, loc;
public CpDeptVO() {
}
public CpDeptVO(int deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public int getDeptno() {
return deptno;
}
public String getDname() {
return dname;
}
public String getLoc() {
return loc;
}
}//class
package day0104;
public class OneCpDeptVO {
private String dname,loc;
public OneCpDeptVO() {
}
public OneCpDeptVO(String dnama, String loc) {
this.dname = dnama;
this.loc = loc;
}
public String getDname() {
return dname;
}
public String getLoc() {
return loc;
}
//저장되는 값이 다르면 무조건 VO를 새로 만든다.
//개발자의 실수로 값을 넣어버리는경우가 발생할수있어서!
}//class
package day0104;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.jws.soap.SOAPBinding.Use;
import oracle.jdbc.driver.DMSFactory;
/**
* Statement객체를 사용하여 CRUD를 구현하는 클래스
* CRUD는 Create Read Update Delete 의 약자.
*
* @author owner
*/
public class UseStatementCRUD {
/**
* VO를 입력받아 VO의 값을 CP_DEPT테이블에 추가
* @param cdvo 부서번호,부서명,위치를 가진 VO
* @throws SQLException
*/
public void insertCpDept(CpDeptVO cdvo) throws SQLException{
//1.드라이버 로딩
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
Connection con=null;
Statement stmt=null;
try { //여기서부터는 연결을 반드시 끊어 주어야 한다.
//2.Connection 얻기
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";//<반드시 잘 알아두어야 한다.외워~!
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.쿼리문 생성객체 얻기
stmt=con.createStatement();
//4.쿼리수행 후 결과 얻기
// String insertCpdept="insert into cp_dept(deptno,dname,loc) values("+
// cdvo.getDeptno()+",'"+cdvo.getDname()+"','"+cdvo.getLoc()+"')";//오라클의 문자열은 '로 묶여야 한다.
// insertCpDept.append(str);
StringBuilder insertCpDept=new StringBuilder();
insertCpDept.append("insert into cp_dept(deptno,dname,loc) values(")
.append(cdvo.getDeptno()).append(",'")
.append(cdvo.getDname()).append("','")
.append(cdvo.getLoc()).append("')");
int cnt=stmt.executeUpdate(insertCpDept.toString());
System.out.println(cnt);//성공 아님 예외
}finally {
//5.연결 끊기
if(stmt!=null) {stmt.close(); }//end if
if(con!=null) {con.close(); }//end if
}//end finally
}//insertCpDept
public boolean updateCpDept(CpDeptVO cdvo) throws SQLException{
boolean flag = false;
//1.드라이버 로딩
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
Connection con=null;
Statement stmt=null;
try {
//2.Connection 얻기
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.쿼리문 생성객체 얻기
stmt=con.createStatement();
//4.쿼리문 수행후 결과 얻기
StringBuilder updateCpDept=new StringBuilder();
updateCpDept
.append("update cp_dept set ")
.append("dname='").append(cdvo.getDname()).append("',")
.append("loc='").append(cdvo.getLoc()).append("' ")
.append("where deptno=").append(cdvo.getDeptno());
int cnt=stmt.executeUpdate(updateCpDept.toString());
//테이블의 구조상 부서번호는 PK이므로 한 행만 변경된다.(그렇지않으면 여러행)
if(cnt!=0) {//바뀐게 여러개란 얘기
flag=true;
}//end if
}finally {
//5.연결 끊기
if(stmt!=null) {stmt.close(); }//end if
if(con!=null) {con.close(); }//end if
}//end finally
return flag;
}//updateCpDept
public boolean deleteCpDept(int deptno) throws SQLException{
boolean flag=false;
//1.드라이버 로딩
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
Connection con =null;
Statement stmt =null;
try {
//2.Connection 얻기
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.쿼리문 생성 객체 얻기
stmt=con.createStatement();
//4.쿼리 수행 후 결과 얻기
StringBuilder deleteCpDept=new StringBuilder();
deleteCpDept.append("delete from cp_dept where deptno=").append(deptno);
int cnt=stmt.executeUpdate(deleteCpDept.toString());
if(cnt==1) {//cnt !=0 도 상관없다.
flag=true;
}//end if
}finally {
//5.연결 끊기
if(stmt !=null) {stmt.close();}//end if
if(con !=null) {con.close();}//end if
}//end finally
return flag;
}//deleteCpDept
public List<CpDeptVO> selectAllCpDept() throws SQLException{
List<CpDeptVO> list=new ArrayList<CpDeptVO>();
//1.드라이버 로딩
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//2.Connection 얻기
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.쿼리문 생성 객체 얻기
stmt=con.createStatement();
//4.쿼리문 수행 후 결과 얻기
String selectCpDept="select deptno,dname,loc from cp_dept";
rs=stmt.executeQuery(selectCpDept);//제어권을 가짐
CpDeptVO cdvo=null;
while(rs.next()) {//조회된 레코드가 존재한다면
//컬럼의 인덱스로 조회 가능하지만 뭐를 가져오는지 알수 없어서 비추천
// System.out.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getString(3));//<가독성이 떨어짐.인덱스를 써서 출력하는것은 정확한 인덱스를 알아야하고 ..
//컬럼명으로 조회
// System.out.println(rs.getInt("deptno")+" "+rs.getString("dname")+" "+rs.getString("loc"));
//<프로시져할때는 어쩔수없이 인덱스로 쓰지만 그외에는 다 컬럼명으로 조회!
cdvo=new CpDeptVO(rs.getInt("deptno"),rs.getString("dname"),rs.getString("loc"));
//<데이터가 있을때에만 객체 생성?
//같은 이름으로 생성된 cdvo객체를 사라지지않도록 관리하기 위해 List에 추가
list.add(cdvo);//이코드가 없으면 cdvo는 마지막 값만 가진다.
}//end while
}finally {
//5.연결 끊기
if(rs!=null) {rs.close();}//end if
if(stmt!=null) {stmt.close();}//end if
if(con!=null) {con.close();}//end if
}
return list;
}//selectAllCpDept
public OneCpDeptVO selectCpDept(int deptno) throws SQLException {
OneCpDeptVO ocdvo=null;
//1.드라이버 <로딩>
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}//end catch
//빼먹음
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//2.Connection 얻기
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.쿼리문 생성 객체 얻기
stmt=con.createStatement();
//4.쿼리 <수행후> 결과 얻기
StringBuilder selectCpDept=new StringBuilder();
selectCpDept.append("select dname,loc from cp_dept where deptno=")
.append(deptno);
rs=stmt.executeQuery(selectCpDept.toString());
if(rs.next()) {//조회된 레코드가 존재 한다면 //<<어짜피 레코드는 하나이므로 while이 아니라 if 로 해도 된다.한개 또는 0개라면 rs.next();만 쓰기에는 되게 위험 (있지도않은데 가져오려고 하면 Error)
ocdvo=new OneCpDeptVO(rs.getString("dname"),rs.getString("loc"));
}//end while
}finally {
//5.연결 끊기
if(rs!=null) {rs.close();}//end if
if(stmt!=null) {stmt.close();}//end if
if(con!=null) {con.close();}//end if
}//end finally
return ocdvo;
}//selectCpDept
/**
* CP_DEPT 테이블의 모든 부서번호를 조회
* @return
* @throws SQLException
*/
public List<Integer> selectAllCpDeptNo() throws SQLException{
List<Integer> list=new ArrayList<Integer>();
//1.
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//2.
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String id="scott";
String pwd="tiger";
con=DriverManager.getConnection(url, id, pwd);
//3.
stmt=con.createStatement();
//4.
StringBuilder selectDeptNo=new StringBuilder();
selectDeptNo.append("select deptno from cp_dept order by deptno");
rs=stmt.executeQuery(selectDeptNo.toString());
while(rs.next()) {//조회된 레코드가 존재 한다면 //<<어짜피 레코드는 하나이므로 while이 아니라 if 로 해도 된다.한개 또는 0개라면 rs.next();만 쓰기에는 되게 위험 (있지도않은데 가져오려고 하면 Error)
list.add(Integer.parseInt(rs.getString("deptno")));//autoboxing이 되서 Integer.parseInt 대신 new Integer가능?
}//end while
}finally {
//5.
if(rs!=null) {rs.close();}//end if
if(stmt!=null) {stmt.close();}//end if
if(con!=null) {con.close();}//end if
}
return list;
}//selectAllCpDeptNo
}//class
package day0104;
import java.awt.Font;
import java.awt.HeadlessException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
public class RunUseStatementCRUD {
private UseStatementCRUD us_crud;
public RunUseStatementCRUD() {
us_crud=new UseStatementCRUD();
}//RunUseStatementCRUD
public void addCpDept() {
String tempData=JOptionPane.showInputDialog("부서 정보 추가 \n입력 예)부서번호,부서명,위치");
if(tempData!=null && !tempData.equals("")) {//데이터가 있다면 null.equals이니까 후항은 실행되지 않아서 Error발생하지 않는다.
String[] data=tempData.split(",");
if(data.length!=3) {//잘못들어간 데이터
JOptionPane.showMessageDialog(null, "입력형식을 확인해 주세요.");
return;
}//end if
int deptno=0;
String dname="";
String loc="";
try {
deptno=Integer.parseInt(data[0]);
dname=data[1];
loc=data[2];
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "부서번호는 숫자입니다.");
return;
}//end catch
//처리된 입력데이터를 VO에 설정하고
CpDeptVO cdvo=new CpDeptVO(deptno,dname,loc);
//VO의 값을 DB에 insert한다.
try {
us_crud.insertCpDept(cdvo);//추가성공
JOptionPane.showMessageDialog(null, deptno+"번 부서정보 추가");
} catch (SQLException se) {//예외
String errMsg="";
switch (se.getErrorCode()) {
case 1: errMsg=deptno+"번 부서는 이미 존재합니다."; break;
case 1438: errMsg="부서 번호는 두자리 입니다."; break;//업데이트할때에도 나온다.
case 12899: errMsg="부서명이나 위치가 너무 깁니다."; break;
default: errMsg="뎨둉합니다.시스템에 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.";
}//end switch
JOptionPane.showMessageDialog(null, errMsg);
se.printStackTrace();
}//end catch
}//end if
}//addCpDept
public void modifyCpDept() {
String tempData=JOptionPane.showInputDialog("부서 정보 변경 \n부서번호에 일치하는 부서명과 위치를 변경합니다.\n입력 예)부서번호,부서명,위치");
if(tempData!=null && !tempData.equals("")) {//데이터가 있다면 null.equals이니까 후항은 실행되지 않아서 Error발생하지 않는다.
String[] data=tempData.split(",");
if(data.length!=3) {//잘못들어간 데이터
JOptionPane.showMessageDialog(null, "입력형식을 확인해 주세요.");
return;
}//end if
int deptno=0;
String dname="";
String loc="";
try {
deptno=Integer.parseInt(data[0]);
dname=data[1];
loc=data[2];
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "부서번호는 숫자입니다.");
return;
}//end catch
//처리된 입력데이터를 VO에 설정하고
CpDeptVO cdvo=new CpDeptVO(deptno,dname,loc);
//VO의 값을 DB에 update한다.
try {
//변경은 성공/실패/예외 3개
String msg="";
if(us_crud.updateCpDept(cdvo)) {//변경된 레코드가 존재
msg=deptno+"번 부서의 정보를 변경하였습니다.";
}else{//변경된 레코드가 존재하지 x
msg=deptno+"번 부서는 존재하지 않습니다.";
}//end else
JOptionPane.showMessageDialog(null, msg);
} catch (SQLException se) {//예외
String errMsg="";
switch (se.getErrorCode()) {
case 12899: errMsg="부서명이나 위치가 너무 깁니다."; break;
default: errMsg="뎨둉합니다.시스템에 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.";
}//end switch
JOptionPane.showMessageDialog(null, errMsg);
se.printStackTrace();
}//end catch
}//end if
}//modifyCpDept
public void removeCpDept() {
String inputData=JOptionPane.showInputDialog("부서 삭제\n삭제할 부서번호 입력");
if(inputData !=null && !inputData.equals("")) {
int deptno=0;
try {
deptno=Integer.parseInt(inputData);
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "부서번호는 숫자이어야 합니다.");
return;
}//end catch
try {
String msg=deptno+"번 부서는 존재하지 않습니다.";
if(us_crud.deleteCpDept(deptno)) {
msg=deptno+"번 부서번호를 삭제하였습니다.";
}//end if
JOptionPane.showMessageDialog(null, msg);
} catch (SQLException se) {
JOptionPane.showMessageDialog(null, "죄송합니다. 문제가 발생하였습니다.");
se.printStackTrace();
}//end catch
}//end if
}//searchAllCpDept
public void searchAllCpDept() {
StringBuilder viewCpDept=new StringBuilder();
viewCpDept
.append("------------------------------------------------------")
.append("------------------------------------------------------\n")
.append("번호\t부서번호\t부서명\t위치\n")
.append("------------------------------------------------------")
.append("------------------------------------------------------\n");
int rowCount=0;
try {
List<CpDeptVO> list= us_crud.selectAllCpDept();
CpDeptVO cdv=null;
rowCount=list.size();
for(int i=0; i<list.size(); i++) {
cdv=list.get(i);
viewCpDept
.append(i+1).append("\t")
.append(cdv.getDeptno()).append("\t")
.append(cdv.getDname()).append("\t")
.append(cdv.getLoc()).append("\n");
}//end for
if(list.isEmpty()) { //list.size()==0
viewCpDept.append("입력된 부서정보가 존재하지 않습니다.\n");
}//end if
}catch (SQLException e) {
viewCpDept.append("DBMS에서 문제가 발생하였습니다. ㅈㅅㅈㅅ\n");
e.printStackTrace();
}//end catch
viewCpDept.append("------------------------------------------------------")
.append("------------------------------------------------------\n")
.append("\t\t\t총").append(rowCount).append("개의 부서정보가 조회되었습니다.");
JTextArea jta=new JTextArea(20,50);
jta.setEditable(false);//입력방지
jta.setText(viewCpDept.toString());//만들어진 출력데이터를 T.A에 설정한다.
JScrollPane jsp=new JScrollPane(jta);
jsp.setBorder(new TitledBorder("전체 부서 조회 결과"));
JOptionPane.showMessageDialog(null, jsp);
}//searchAllCpDept
public void searchOneCpDept() {
String inputData=JOptionPane.showInputDialog("부서 조회 \n조회할 부서번호를 입력해 주세요.");
if(inputData!=null && !inputData.equals("")) {
try {
int deptno=Integer.parseInt(inputData);
//부서번호를 입력하여 부서번호에 해당하는 부서정보를 조회 <하고 뿌릴것.
//조회한 부서가 있다면 생성된 객체가 반환되고 조회된 부서가 없다면 null이 반환된다.
OneCpDeptVO ocd_vo= us_crud.selectCpDept(deptno);
StringBuilder viewData=new StringBuilder();
viewData.append("부서명 : ").append(ocd_vo.getDname())//여기서 nullpointerException이 발생하는것.
.append(", 위치 : ").append(ocd_vo.getLoc());
JLabel lbl=new JLabel(viewData.toString());
lbl.setFont(new Font("SansSerif", Font.BOLD, 15));
JOptionPane.showMessageDialog(null, lbl);
// us_crud.selectAllCpDeptNo()//[1,20,30]//위에서 한번에 try catch하는 줄알았는데 ..아님.
// StringBuilder allDeptno=new StringBuilder();
// List<Integer> allDeptnolist=new ArrayList<Integer>();
// for(Integer i/*변수명!!*/ : allDeptnolist) {
// allDeptno.append(i.intValue()).append(" ");//출력인데?
// }//end for
}catch (NullPointerException npe) {
StringBuilder allDeptno=new StringBuilder();
// JOptionPane.showMessageDialog(null, inputData+"번호의 부서는 존재하지 않습니다.");
//존재하는 부서번호를 제공하고 싶다.
try {
List<Integer> allDeptnolist=us_crud.selectAllCpDeptNo();
for(Integer i/*변수명!!*/ : allDeptnolist) {//리스트의 값을 정제해 문자열로 한번에 만들어 출력해줌.
allDeptno.append(i.intValue()).append(" ");
// System.out.println(i.intValue());
}//end for
JOptionPane.showMessageDialog(null, inputData+"번호의 부서는 존재하지 않습니다.\n"+"현재 존재하는 부서는 "+us_crud.selectAllCpDeptNo()+"번 입니다.");
JOptionPane.showMessageDialog(null, allDeptno+"번 부서만 존재합니다.");
} catch (HeadlessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}//end catch
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "부서번호는 정수형태로 입력하셔야 합니다.");
}catch (SQLException e) {
JOptionPane.showMessageDialog(null, "DB서버에서 문제가 발생했습니다.");
e.printStackTrace();
}//end catch
}//end if
}//searchOneCpDept
//DAO라고도 하는데 Data access object DB에 관련된 업무 처리 클래스
public static void main(String[] args) {
RunUseStatementCRUD rus_crud=new RunUseStatementCRUD();
boolean exitFlag=false;
String inputMenu="";
do {
inputMenu=JOptionPane.showInputDialog("메뉴선택\n1.부서추가 2.부서변경 3.부서삭제 4.전체부서조회 5.특정부서조회 6.종료");
if (inputMenu!=null/* && !inputMenu.equals("")*/) {
switch (inputMenu) {//JDK 1.7이상부터 문자열 비교 가능
case "1":
rus_crud.addCpDept();
break;
case "2":
rus_crud.modifyCpDept();
break;
case "3":
rus_crud.removeCpDept();
break;
case "4":
rus_crud.searchAllCpDept();
break;
case "5":
rus_crud.searchOneCpDept();
break;
case "6":
exitFlag=true;
break;
default:
JOptionPane.showMessageDialog(null, inputMenu+"는 제공되는 서비스가 아닙니다.");
break;
}//end switch
}else{
exitFlag=true;
}//end if
}while(!exitFlag);
JOptionPane.showMessageDialog(null, "사용해 주셔서 감사합니다.");
}//main
}//class
반응형