728x90

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Error

Java에서 다음 Source Code를 실행할 경우,

package temp;

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

public class Tmp {
	Scanner scan = new Scanner(System.in);

	private Connection conn;
	private PreparedStatement pstmt;

	// DB 변경 시, 변수 활용(환경 설정)
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String userName = "C##JAVA";
	private String passWord = "1234";

	public Tmp() {
		try {
			Class.forName(driver);
		} catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		this.getConnection(); // 접속

	}

	// 접속
	public void getConnection() {
		try {
			conn = DriverManager.getConnection(url, userName, passWord);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
		
	public void menu() {
		Tmp std = new Tmp();		

		while(true) {
			System.out.println();
			System.out.println("****************");
			System.out.println("   관리");
			System.out.println("****************");
			System.out.println("  1. 입력");
			System.out.println("  2. 검색");
			System.out.println("  3. 삭제");
			System.out.println("  4. 종료");
			System.out.println("****************");
			System.out.print("  번호선택 :");
			int num = scan.nextInt();
			
			if(num==4) {}
			
			if(num==1) {}
			else if(num==2) {}
			else if(num==3){}
			else {}
		
		} // while
	}
	

	public static void main(String[] args) {
		Tmp std = new Tmp();		
		std.menu();

	}
}

다음과 같은 OracleDriver에 대한 ClassNotFoundException 발생

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:375)
	at temp.Tmp.<init>(Tmp.java:24)
	at temp.Tmp.main(Tmp.java:69)

 

 

Exception 원인

해당 Java Project에 jar 파일 lib 설치 및 build path를 설정하지 않음

 

 

해결 방법

 

좌측 그림과 같이 Java Project별로

1. 일반 lib 폴더 생성

2. lib 폴더에 ojdbc8.jar 파일 저장

3. Build: Start to build path 설정

 

 

 

 

728x90
728x90

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Error

Java에서 다음 Source Code를 실행할 경우,

package dbtest.dao;

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

public class UpdateMain {
	private Connection conn;
	private PreparedStatement pstmt;
	
	private String driver = "oracle.jdbc.driver.OracleDriver"; // path 설정
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String userName = "C##JAVA";
	private String passWord = "1234";
	
	public UpdateMain() {
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println("Driver Loading");
	} // default Constructor;
	
	public void getConnection() {
		try {
			conn = DriverManager.getConnection(url, userName, passWord);
			System.out.println("conn Success");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	} // getConnection();
	
	public void updateArticle() {
		Scanner scan = new Scanner(System.in);
		System.out.print("검색할 이름 입력: ");
		String search_name = scan.next();
		String ss_name = "%" + search_name + "%";
		
		this.getConnection();
		
		String sql = "UPDATE DBTEST SET AGE=AGE+1 HEIGHT=HEIGHT+1 WHERE NAME LIKE '?'";
	
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, ss_name);
			
			int num_update = pstmt.executeUpdate();
			System.out.println(num_update + "개의 행이 업데이트되었습니다.");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(pstmt!=null) {pstmt.close();}
				if(conn!=null) {conn.close();}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	
	public static void main(String[] args) {
		UpdateMain um = new UpdateMain();
		um.updateArticle();
	}
}


/*
검색할 이름 입력 : 홍 -> %홍%
홍이 들어간 레코드의 나이와 키를 1씩 증가
*/

java.sql.SQLException: 부적합한 열 인덱스 발생

 

 

Exception 원인

UPDATE DBTEST SET AGE=AGE+1 HEIGHT=HEIGHT+1 WHERE NAME LIKE ?

UPDATE를 실행 할 col을 구분하지 않음(SQL 구문 입력 실수)

 

 

해결 방법

AGE=AGE+1 HEIGHT=HEIGHT+1

-> AGE=AGE+1, HEIGHT=HEIGHT+1

		String sql = "UPDATE DBTEST SET AGE=AGE+1, HEIGHT=HEIGHT+1 WHERE NAME LIKE ?";
	
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, "%" + search_name + "%");
			
			int num_update = pstmt.executeUpdate();
			System.out.println(num_update + "개의 행이 업데이트되었습니다.");
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(pstmt!=null) {pstmt.close();}
				if(conn!=null) {conn.close();}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
728x90
728x90

이 글은 뉴렉쳐 오라클 데이터베이스 SQL 강의 수강하며 정리한 글입니다.

 

 

08강 오라클 데이터 형식 #2 (숫자,날짜 형식)

 

1. Character 형식: ‘’

 

2. Numeric 형식
`NUMBER`: 정수, 실수를 한 번에 표현 가능
예: NUMBER(4): 최대 4자로 이루어진 숫자 표현 가능
`NUMBER(6, 2)`: 소수점 2자리를 포함하는 최대 6자리의 숫자(소수점 둘째 자리에서 반올림)
`NUMBER(6, -2)`: 소수점 -2자리에서 반올림하는 최대 6자리 숫자
`NUMBER`: NUMBER(38—최대값, *)로 인식
`NUMBER(*, 5)`:  NUMBER(38, 5)로 인식

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      NVARCHAR2(50),
    NAME     NVARCHAR2(50),
    GENDER   NCHAR(2), --NCHAR(2): 4byte, CHAR(2 CHAR): 6byte
    AGE      NUMBER(3),
    BIRTHDAY CHAR(10),
    PHONE    CHAR(13),
    REGDATE  DATE
    
);

DROP TABLE MEMBER;

 

3. Date 형식
DATE(yyyy-mm-dd): 시작 기준 4712 BC
TIMESTAMP(yyyy-mm-dd hh:mm:ss): NLS_TIMESTAMP_FORMAT 파라미터에 명시된 값에 따름
TIMESTAMP WITH TIME ZONE: NLS_TIMESTAMP_TZ_FORMAT 파라미터에 명시된 값을 따름
TIMESTAMP WITH LOCAL TIME ZONE: NLS_TIMESTAMP_FORMAT 파라미터에 명시된 값을 따름

 

4. LOB 형식
Character Type +
(deprecated) LONG: variable-length character strings containing up to 2Gbyte-1
CLOB: 대용량 텍스트 데이터 타입(최대 4Gbyte)
NCLOB: 대용량 텍스트 유니코드 데이터 타입(최대 4Gbyte)

 

 

소스 코드

🔗 HJ0216/TIL/OracleSQL

728x90
728x90

 

 

1000번: A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

Language: Java

 

 

 

소스 코드

🔗 HJ0216/TIL

 

728x90
728x90

 

 

2557번: Hello World

Hello World!를 출력하시오.

www.acmicpc.net

 

 

 

Language: Java

 

 

 

소스 코드

🔗 HJ0216/TIL

 

728x90