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 가 이미 등록되어 있으면 다시 입력받아서 처리한다.
*/
// max(lprod_id) + 1
//
//select count(*) from lprod where lprod_gu="p101";
public class JdbcTest05 {
static int id;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int countNum = 1;
String gu;
String nm;
try {
//ojdbc 라이브러리에서 만든거 불러오기 드라이버로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//DB에 연결하기
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "Aurora", "java");
//실행할 쿼리문 작성 순서매길건데 제일큰 수 다음수 구하기 ( 몇번째 ROW 인지 )
String sql = "select nvl(max(lprod_id), 0) m from lprod ";
System.out.println("실행한 SQL 문 : " + sql);
//statement 객체 생성
stmt = conn.createStatement();
//만든 SQL 문장을 넣어서 실행해서 나오는 데이터. 만약 select 문이라면 resultSet 에 데이터 저장하기
rs = stmt.executeQuery(sql);
// 마지막을 구해야함...
if (rs.next()) {
System.out.println(rs.getInt(1)); //1번 컬럼의 값들을 프린트한다. 여기서는 행이 1개.
}
id = rs.getInt(1) + 1;
//
System.out.println("id는 : " + id);
// lprod_id lprod_gu lprod_nm
// insert into lprod (lprod_id, lprod_gu , lprod_nm ) values (id , gu , nm );
// select count(*) from lprod where lprod_gu="p101";
/////////////////////////////////////////////////////////////////////////////////////////////////
// lprod_gu 와 lprod_nm 인자로 받아서 데이터 열 추가하기
// 반복문 시작
while(true) {
// LPROD_GU 인자로받음
System.out.println("LPROD_GU 를 입력하시오 예 ) P501");
gu = scan.nextLine();
// LPROD_NM 인자로받음
System.out.println("LPROD_NM 을 입력하시오 예 ) 전자제품");
nm = scan.nextLine();
// LPROD_GU 중복 체크
// 입력받은 LPROD_GU 받은걸로 SQL 작성 후 중복 체크 .
String sql2 = "select count(*) from lprod where lprod_gu = " + "'" + gu + "'";
System.out.println("실행한 SQL 문 : " + sql2);
//createStatement 객체 생성
//stmt = conn.createStatement();
// SQL 문으로 실행한 데이터를 rs에 저장
rs = stmt.executeQuery(sql2);
// 컬럼의 1번쨰 행의 데이터가 0 이면 -> 동일한값이없어서 사용가능하다는 뜻
rs.next();
if (rs.getInt(1) == 0) {
//값이 없으면 반복문에서 빠져나간다.
break;
}else if (rs.getInt(1) > 0) {
System.out.println("동일한 lprod_gu 가 존재합니다. ");
}
} // while 끝
String sql3 = "insert into lprod (lprod_id, lprod_gu, lprod_nm) "
+ " values (" + "'" + id + "'" + ", " + "'" + gu + "'" + ", " + "'" + nm + "'" + ")";
//createStatement() 객체를 생성한다.
stmt = conn.createStatement();
//만든 SQL 문장을 넣어서 실행해서 나오는 데이터. 만약 select 문이라면 resultSet 에 데이터 저장하기
rs = stmt.executeQuery(sql3);
System.out.println("데이터베이스에 한 행이 추가 되었습니다. ");
} catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
// TODO: handle exception
} finally {
if (stmt != null)
try {
stmt.close();
} catch (SQLException e) {
}
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) {
}
}
}
}
댓글
댓글 쓰기