Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 추상메서드
- 환경설정
- 집합_SET
- 인터페이스
- 오라클
- GRANT VIEW
- cursor문
- Java
- 대덕인재개발원
- EnhancedFor
- 예외처리
- NestedFor
- 사용자예외클래스생성
- 자동차수리시스템
- 생성자오버로드
- 다형성
- exception
- 참조형변수
- oracle
- 컬렉션 타입
- 한국건설관리시스템
- 메소드오버로딩
- 객체 비교
- 컬렉션프레임워크
- 제네릭
- abstract
- 정수형타입
- 자바
- 예외미루기
- 어윈 사용법
Archives
- Today
- Total
거니의 velog
230913_JDBC 1 본문
[jdbcTest01.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// JDBC(Java DataBase Connectivity) 라이브러리를 이용한 DB자료 처리하기
public class jdbcTest01 {
/*
* [JDBC를 이용한 데이터베이스 처리 순서]
*
* 1. 드라이버 로딩 ==> 라이브러리를 사용할 수 있도록 메모리로 읽어들이는 작업
* Class.forName("oracle.jdbc.driver.OracleDriver");
* ==> JDBC버전 4.0이상에서는 DriverManager객체의 getConnection()메서드에서
* 자동으로 로딩해 주기 때문에 생략할 수 있다.
* (그렇지만 수업에는 이것을 생략하지 않고 사용할 예정임)
*
* 2. DB시스템에 접속하기 ==> 접속이 완료되면 Connection객체가 반환된다.
* DriverManager.getConnection()메서드를 이용한다.
*
* 3. 질의 ==> SQL문장을 DB서버로 보내서 결과를 얻어온다.
* (Statement객체 또는 PreparedStatement객체를 이용하여 작업한다.)
*
* 4. 결과 처리 ==> 질의 결과를 받아서 원하는 작업을 수행한다.
* 1) SQL문이 select문일 경우에는 select한 결과가 ResultSet객체에 저장되어 반환된다.
* 2) SQL문이 select문이 아닐 경우(insert문, update문, delete문)에는 정수값이 반환된다.
* (이 정수값은 보통 실행에 성공한 레코드 수를 의미한다.)
*
* 5. 사용한 자원 반납하기 ==> 각 객체의 close()메서드 이용
*/
public static void main(String[] args) {
// DB작업에 필요한 객체 변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
// String url = "jdbc:oracle:thin:@서버주소:1521:xe";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
// 1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. DB시스템에 연결하기
conn = DriverManager.getConnection(url, user, password);
// 3. 질의
// 3-1. SQL문 작성 ==> 문자열로 작성
String sql = "select * from lprod";
// 3-2. Statement객체 생성 ==> 질의를 수행하는 객체 생성
// ==> Connection객체를 이용해서 생성한다.
stmt = conn.createStatement();
// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
// (Statement객체나 PreparedStatement객체 이용)
// ==> (지금은 실행할 SQL문이 select문이기 때문에 결과가 ResultSet객체에 저장되어 반환된다.)
rs = stmt.executeQuery(sql);
// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
// ResultSet객체에 저장된 데이터를 차례로 꺼내오려면
// 반복문과 ResultSet객체의 next()메서드를 이용한다.
// 테이블의 레코드 데이터를 가리키는 포인터가 있음.
// 맨 처음에는 첫 레코드 위를 가리킴.
// 그러다가 rs.next()하면 이 포인터를 다음 칸으로 이동시키는 것이 rs.next()메서드가 하는 일.
// 이동만 하지 않고 이 자리에 데이터가 있으면 true를 반환. 없으면 false를 반환
System.out.println(" == 쿼리문 실행 결과 ==");
// ResultSet객체의 next()메서드
// ==> ResultSet객체에 저장된 데이터를 가리키는 포인터를
// ==> 다음 번째의 레코드 위치로 이동시키고
// ==> 그 곳에 데이터가 있으면 true, 없으면 false를 반환한다.
System.out.println("-----------------------------------------------");
while(rs.next()) {
// ResultSet객체의 포인터가 가리키는 곳의 데이터를 가져오는 방법
// 형식1) ResultSet객체.get자료형이름("컬럼명 또는 alias명")
// 형식2) ResultSet객체.get자료형이름(컬럼번호) ==> 컬럼번호는 1번부터 시작
System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest02.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
// 문제) 사용자로부터 LPROD_ID값을 입력 받아
// LPROD_ID가 입력한 값보다 큰 자료들을 출력하시오.
public class jdbcTest02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("입력한 LPROD_ID를 초과하는 데이터 검색");
System.out.print("LPROD_ID를 입력하세요 >> ");
int lprodId = Integer.parseInt(scan.nextLine());
// DB작업에 필요한 객체 변수 선언
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
// 1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. DB시스템에 연결하기
conn = DriverManager.getConnection(url, user, password);
// 3-1. SQL문 작성 ==> 문자열로 작성
String sql = "select * from lprod where lprod_id > ? ";
// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
pstmt = conn.prepareStatement(sql);
// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
pstmt.setObject(1, lprodId);
rs = pstmt.executeQuery();
// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
System.out.println(" == 쿼리문 실행 결과 ==");
System.out.println("-----------------------------------------------");
while(rs.next()) {
System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest02_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) 사용자로부터 LPROD_ID값을 입력 받아
// LPROD_ID가 입력한 값보다 큰 자료들을 출력하시오.
public class jdbcTest02_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("입력한 LPROD_ID를 초과하는 데이터 검색");
System.out.print("LPROD_ID를 입력하세요 >> ");
int lprodId = Integer.parseInt(scan.nextLine());
// DB작업에 필요한 객체 변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
// 1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. DB시스템에 연결하기
conn = DriverManager.getConnection(url, user, password);
// 3-1. SQL문 작성 ==> 문자열로 작성
// String sql = "select lprod_id, lprod_gu, lprod_nm from lprod where lprod_id > " + lprodId;
String sql = "select lprod_id as id, lprod_gu as gu, lprod_nm as nm from lprod where lprod_id > " + lprodId;
// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
stmt = conn.createStatement();
// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
rs = stmt.executeQuery(sql);
// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
System.out.println(" == 쿼리문 실행 결과 ==");
System.out.println("-----------------------------------------------");
while(rs.next()) {
// System.out.print("LPROD_ID : " + rs.getInt(1) + ", ");
// System.out.print("LPROD_GU : " + rs.getString(2) + ", ");
// System.out.println("LPROD_NM : " + rs.getString(3));
System.out.print("LPROD_ID : " + rs.getInt("id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("nm")); // alias가 있으면 반드시 alias명을 써야 한다.
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest03.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
// 큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)
public class jdbcTest03 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
System.out.print("1번째 lprod_id >> ");
int lprod_id1 = Integer.parseInt(scan.nextLine());
System.out.print("2번째 lprod_id >> ");
int lprod_id2 = Integer.parseInt(scan.nextLine());
int temp = 0;
if(lprod_id1 > lprod_id2) {
temp = lprod_id1;
lprod_id1 = lprod_id2;
lprod_id2 = temp;
}
// System.out.println("lprod_id1 : " + lprod_id1);
// System.out.println("lprod_id2 : " + lprod_id2);
// DB작업에 필요한 객체 변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
// 1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. DB시스템에 연결하기
conn = DriverManager.getConnection(url, user, password);
// 3-1. SQL문 작성 ==> 문자열로 작성
String sql = "select * from lprod where lprod_id between "+ lprod_id1 +" and " + lprod_id2;
// 3-2. PreparedStatement객체 생성 ==> 질의를 수행하는 객체 생성
stmt = conn.createStatement();
// 3-3. SQL문을 DB서버로 보내서 결과를 얻어온다.
rs = stmt.executeQuery(sql);
// 4. 결과 처리하기 ==> 가져온 결과를 화면에 한 레코드씩 출력해 보기
System.out.println(" == 쿼리문 실행 결과 ==");
System.out.println("-----------------------------------------------");
while(rs.next()) {
System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 5. 사용했던 자원 반납 ==> 보통 객체가 생성된 순서의 역순으로 닫아준다.
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest03_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
// 큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)
public class jdbcTest03_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
System.out.println();
System.out.print("첫번째 lprod_id값 입력 >> ");
int num1 = Integer.parseInt(scan.nextLine());
System.out.print("두번째 lprod_id값 입력 >> ");
int num2 = Integer.parseInt(scan.nextLine());
System.out.println();
// 큰 값 찾기 1
// if(num1 > num2) {
// int temp = num1;
// num1 = num2;
// num2 = temp;
// }
// System.out.println("num1 : " + num1);
// System.out.println("num2 : " + num2);
// 큰 값 찾기 2
// int min = num1 > num2 ? num2 : num1;
// int max = num1 > num2 ? num1 : num2;
// 큰 값 찾기 3
int min = Math.min(num1, num2);
int max = Math.max(num1, num2);
// System.out.println("min : " + min);
// System.out.println("max : " + max);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
String sql = "select * from lprod where lprod_id >= "+ min +" and lprod_id <= " + max;
// String sql = "select * from lprod where lprod_id between "+ min +" and " + max;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
System.out.println(" == 쿼리문 실행 결과 ==");
System.out.println("-----------------------------------------------");
while(rs.next()) {
System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
-- 은행 계죄번호 관리 테이블
create table bankinfo(
bank_no varchar2(40) not null, -- 계좌번호
bank_name varchar2(40) not null, -- 은행명
bank_user_name varchar2(30) not null, -- 예금주 이름
bank_date date not null, -- 개설 날짜
constraint pk_bankinfo primary key (bank_no)
);
--INSERT INTO 테이블명 (컬럼명들...)
-- VALUES (값들...);
INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) VALUES ('1234-56-789-00', '하나은행', '홍길동', sysdate);
commit;
select * from bankinfo;
[jdbcTest04.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class jdbcTest04 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
System.out.println("=== 계좌 정보 추가하기 ===");
System.out.print("계좌 번호 >> ");
String bankNo = scan.nextLine();
System.out.print("은 행 명 >> ");
String bankName = scan.nextLine();
System.out.print("예금주 이름 >> ");
String userName = scan.nextLine();
// Statement객체를 이용해서 추가하기
// String sql = " INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) "
// + " VALUES ('" + bankNo + "', '" + bankName + "', '"+ userName +"', sysdate) ";
//
// System.out.println("확인용 sql : " + sql);
//
// stmt = conn.createStatement();
//
// // select문을 실행할 때는 executeQuery()메서드를 사용하고
// // select문이 아닐 때(insert, update, delete문 등)는 executeUpdate()메서드를 사용한다.
// // executeUpdate()메서드의 반환값 ==> 정수값(작업에 성공한 레코드 수)
// int cnt = stmt.executeUpdate(sql);
/////////////////////////////////////////////////////////////
// PreparedStatement객체를 이용해서 추가하기
// SQL문을 작성할 때 SQL문에서 데이터가 들어갈 자리는 물음표(?)로 표시해서 작성한다.
String sql = " INSERT INTO bankinfo (bank_no, bank_name, bank_user_name, bank_date) "
+ " VALUES ( ?, ?, ?, sysdate ) ";
// PreparedStatement객체 생성 ==> 객체를 생성할 때 SQL 문을 인수값으로 넣어준다.
pstmt = conn.prepareStatement(sql);
// SQL문의 물음표(?)에 들어갈 데이터를 셋팅한다.
// 형식) PreparedStatement객체.set자료형이름(물음표번호, 셋팅할 데이터)
// ==> 물음표번호는 1번부터 시작한다.
pstmt.setString(1, bankNo);
pstmt.setString(2, bankName);
pstmt.setString(3, userName);
// 데이터 셋팅이 완료되면 SQL문을 실행한다.
int cnt = pstmt.executeUpdate();
System.out.println("반환값 => " + cnt);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest03_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터
// 큰 값 사이의 자료들을 출력하시요. (앞 뒤의 값은 포함된다.)
public class jdbcTest03_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("검색할 lprod_id의 값을 2개 입력하세요.");
System.out.println();
System.out.print("첫번째 lprod_id값 입력 >> ");
int num1 = Integer.parseInt(scan.nextLine());
System.out.print("두번째 lprod_id값 입력 >> ");
int num2 = Integer.parseInt(scan.nextLine());
System.out.println();
// 큰 값 찾기 1
// if(num1 > num2) {
// int temp = num1;
// num1 = num2;
// num2 = temp;
// }
// System.out.println("num1 : " + num1);
// System.out.println("num2 : " + num2);
// 큰 값 찾기 2
// int min = num1 > num2 ? num2 : num1;
// int max = num1 > num2 ? num1 : num2;
// 큰 값 찾기 3
int min = Math.min(num1, num2);
int max = Math.max(num1, num2);
// System.out.println("min : " + min);
// System.out.println("max : " + max);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
// Statement 객체 이용하여 처리하기
// String sql = "select * from lprod where lprod_id >= "+ min +" and lprod_id <= " + max;
//// String sql = "select * from lprod where lprod_id between "+ min +" and " + max;
//
// stmt = conn.createStatement();
// rs = stmt.executeQuery(sql);
////////////////////////////////////////////////////
// PrepareStatement 객체 이용하여 처리하기
String sql = "select * from lprod where lprod_id >= ? and lprod_id <= ? ";
// String sql = "select * from lprod where lprod_id between ? and ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, min);
pstmt.setInt(2, max);
rs = pstmt.executeQuery();
System.out.println(" == 쿼리문 실행 결과 ==");
System.out.println("-----------------------------------------------");
while(rs.next()) {
System.out.print("LPROD_ID : " + rs.getInt("lprod_id") + ", ");
System.out.print("LPROD_GU : " + rs.getString("lprod_gu") + ", ");
System.out.println("LPROD_NM : " + rs.getString("lprod_nm"));
System.out.println("-----------------------------------------------");
}
System.out.println("출력 작업 끝...");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
[jdbcTest05.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/*
* LPROD 테이블에 새로운 데이터를 추가한다.
*
* 조건) lprod_gu값과 lprod_nm값은 직접 입력 받아서 처리하고,
* lprod_id값은 현재의 lprod_id값 중에서 제일 큰 값보다 1 크게 한다.
* 입력 받은 lprod_gu값이 이미 등록되어 있으면 다시 입력 받아 처리한다.
*
* select * from lprod
* select max(lprod_id) from lprod
* select count(*) from lprod where lprod_gu = 'P101' -- 반환값 : 1이면 있고, 0이면 없다.
* INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES ( ?, ?, ? )
*
* LPROD_ID NUMBER(7,0)
* LPROD_GU CHAR(4 BYTE)
* LPROD_NM VARCHAR2(40 BYTE)
*/
public class jdbcTest05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "pc_09";
String password = "java";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
// 1. lprod_id는 현재의 lprod_id값 중에서 제일 큰 값보다 1 크게 한다.
String sql = " select max(lprod_id) as maxNum from lprod ";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
int maxNum = 0;
if(rs.next()) {
maxNum = rs.getInt("maxNum");
}
maxNum++; // lprod_id max값에서 1 증가시키기
// 2. 입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력받아서 처리한다.
String lprodGu = null; // '상품분류코드'가 저장될 변수 선언
int count = 0; // 입력한 '상품분류코드'의 개수가 저장될 변수 선언
do {
System.out.print("상품분류코드(LPROD_GU) 입력 >> ");
lprodGu = scan.nextLine();
String sql2 = " select count(*) as cnt from lprod where lprod_gu = ? ";
pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, lprodGu);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
if(count > 0) {
System.out.println("입력한 상품 분류 코드 [" + lprodGu + "] 은(는) 이미 등록된 코드입니다.");
System.out.println("다시 입력하세요.");
}
}while(count > 0);
System.out.print("상품 분류명(LPROD_NM) 입력 >> ");
String lprodNm = scan.nextLine();
String sql3 = " INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES ( ?, ?, ? ) ";
pstmt2 = conn.prepareStatement(sql3);
pstmt2.setInt(1, maxNum);
pstmt2.setString(2, lprodGu);
pstmt2.setString(3, lprodNm);
int cnt = pstmt2.executeUpdate();
if(cnt > 0) {
System.out.println("등록 성공~");
}else {
System.out.println("등록 실패!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(stmt != null) try { stmt.close(); } catch (SQLException e) {}
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(pstmt2 != null) try { pstmt2.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
}
'대덕인재개발원 > 대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230915_JDBC 2 (0) | 2023.09.15 |
---|---|
230914_JDBC 2 (0) | 2023.09.14 |
230912_입출력 6 (0) | 2023.09.11 |
230911_입출력 5 (0) | 2023.09.11 |
230908_입출력 4 (0) | 2023.09.08 |