«   2025/05   »
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 more
Archives
Today
Total
관리 메뉴

장미의 개발일기

JDBC: 자바와 오라클 연결하여, 테이블 생성 및 결과 출력 해보기 본문

개발일기/Oracle

JDBC: 자바와 오라클 연결하여, 테이블 생성 및 결과 출력 해보기

민장미 2023. 5. 7. 00:37

혈압이 너무 오른다...

너무 간단하고 어이없었던 오류때문에 2시간을 날렸다. 삽질하면서 배우는 거라지만,

너무너무너무 화가나고 짜증이 난다.

 

 

 

어제 포스팅했던, 자바,오라클 연결 테스트

JDBC : 오라클과 자바 연결 테스트하기 (tistory.com)

 

어제는 자바에서 몇 가지 열을 입력 받아서 오라클DB에 넣는 걸 했었는데, 

오늘은 여기에 좀 업글(?)을 해서 연습해보았다.

연결 후, 자바에서 테이블, 시퀀스 생성 다하고, 데이터 5개 입력받기 (반드시 시퀀스 번호 제대로 뜨게 하기)

 

1.JDBC 드라이버 로드 (Class의 forgetname() 메소드를 사용)

 

2. DRIVERMANAGER 클래스의 getConnection( ) 메소드를 사용하여, CONNECTION 객체를 생성하기

 

3. CONNECTION객체를 통해 PreparedStatement 객체를 생성

(String형 변수에 sql명령문을 저장하고  PreparedStatement 생성자의 매개변수로 사용)

 

4. PreparedStatement의  executeUpdate() 메소드를 사용해서 쿼리를 실행해준다.

(테이블에 데이터 넣는건 - 변수 하나에 5개 다 넣은 다음에 한번에 실행하려고 했는데 오류난다;)

분명 한번에 넣을 방법 있을텐데 아직 덜 배웠으므로 ㅠㅠ  

  

문제의 그 오류 : 

ORA-00911: 문자가 부적합합니다

 

중간 코드 ... 입력형으로 바꿨다가 다시 고침 

 

 

insertValA.executeUpdate(); 이 줄에서 계속 오류가 난 것;;

검색 다해도 안 뜨고 , GPT는 틀린 답만 도돌이표로 알려주고 (얘 진짜 가끔 멍청해)

정말 100번은 오라클에서 테이블 지우고 자바에서 수정 후 다시 돌려보고...한 듯 ㅠ

정말 원인은 어이없게도  쿼리 문장 마지막에 ' ; '  세미콜론이 있어서였음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

아니 DB프로그램에선 ;를 넣어야 명령어가 끝나니까 당연한 건줄...

더 웃긴건 저거 위에 있던 테이블생성, 시퀀스 생성 쿼리엔 실수로 ;를 안 넣어서 멀쩡히 실행이 되었던 것...

 

고생해서 얻은 원하는 출력물:

첫 데이터로 계속 테스트하다가 결국 내 사적인 감정이 들어간 데이터가 되었다. ㅋ

 

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

//오라클에 자바를 연결한 후에, 테이블을 생성해보자,
// 생성하고 입력해보자.

public class Oracle_Test2 {
	private static Object createTab;

	public static void main(String[] args) {


		// 1.드라이버 로드

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("드라이버 로드 성공!");

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		// 2 오라클과 연결하기

		Connection con = null;
		PreparedStatement createTab = null; // 쿼리 1실행하는 객체 stmt
		// 이거 하나당 쿼리 하나인듯?
		PreparedStatement createSeq = null; // 쿼리 2실행
		PreparedStatement insertValA = null; // 쿼리 3 담당
		PreparedStatement insertValB = null;
		PreparedStatement insertValC = null;
		PreparedStatement insertValD = null;
		PreparedStatement insertValE = null;

		try {
			// 오라클과 연결
			String url = "jdbc:oracle:thin:@localhost:1521:orcl";
			String user = "scott";
			String pwd = "tiger";
			con = DriverManager.getConnection(url, user, pwd); /// 여까지 노프라블럼

			// 테이블 생성하는 쿼리
			String sql = "CREATE TABLE BOOK_LIST ( BNUM NUMBER(4) PRIMARY KEY," + " SUB VARCHAR2(30) UNIQUE,"
					+ " WRITER VARCHAR2(30)," + " REALDATE DATE," + " HOWMUCH NUMBER(4) )";

			createTab = con.prepareStatement(sql);// pre stament 객체 생성
			createTab.executeUpdate(); // 쿼리1ㅣ 실행

			// 시퀀스 생성
			String sql2 = "CREATE SEQUENCE B_SEQ MINVALUE 0 MAXVALUE 10 INCREMENT BY 1 START WITH 0";// ;

			createSeq = con.prepareStatement(sql2); // stament 객체 생성
			createSeq.executeUpdate();
			// 쿼리2실행

			// 테이블에 정보 집어넣기 // 쿼리 3을 담는 객체 생성
			String sqlA = "INSERT INTO BOOK_LIST VALUES (B_SEQ.NEXTVAL, '짜증나', '죽어' ,SYSDATE, 10)";
			String sqlB = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '파반느','얍스',SYSDATE, 50)";
			String sqlC = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '상수리 나무','김미희',SYSDATE, 40)";
			String sqlD = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '그럼 안녕히,','닥치시오',SYSDATE, 15)";
			String sqlE = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '당신과나','홍매열', TO_DATE('06-05-2023','DD-MM-YYYY'), 5)";

			// 쿼리3 하나씩 실행하기
			insertValA = con.prepareStatement(sqlA);
			insertValA.executeUpdate();
			insertValB = con.prepareStatement(sqlB);
			insertValB.executeUpdate();
			insertValC = con.prepareStatement(sqlC);
			insertValC.executeUpdate();
			insertValD = con.prepareStatement(sqlD);
			insertValD.executeUpdate();
			insertValE = con.prepareStatement(sqlE);
			insertValE.executeUpdate();
	
			
		} catch (SQLException e) {
			System.out.println("오류1");
			e.printStackTrace();
		} finally {
			try {
				//ResultSet이 있을 경우 맨 먼저 종료; 
				if (createTab != null) {createTab.close();}
				if (createSeq != null) {createSeq.close();}
		
				if (insertValA != null) {insertValA.close();}
				if (insertValB != null) {insertValB.close();}
				if (insertValC != null) {insertValC.close();}
				if (insertValD != null) {insertValD.close();}
				if (insertValE != null) {insertValE.close();}
                
				if (con != null) {con.close();}
			} catch (SQLException e2) {
				System.out.println("오류2");
				e2.printStackTrace();
			}
		}

		

	}// main
}