2020.11.12 고급자바 과제 (수업시간에 함 ) 데이터베이스 행 추가

 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) {

}


}


}


}


댓글