Java setAutoCommit(boolean autoCommit)

2023. 5. 10. 00:17Java

프로젝트 내 src 내 javabasic 패키지 내 DbConn.java

package javabasic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class DbConn { // DbManager 역할하는 클래스

	private static Connection dbConn; // 멤버로 선언

	public static Connection getConnection() {
		if (dbConn == null) {
			try {
				String url = "jdbc:oracle:thin:@localhost:1521:orcl";
				String user = "scott";
				String pwd = "a1234";

				Class.forName("oracle.jdbc.driver.OracleDriver"); // 클래스에 동적으로 바인딩하는 부분
				dbConn = DriverManager.getConnection(url, user, pwd);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				System.out.println(e.toString());
			}
		} // end of if
		return dbConn;
	}// getConnection()

	public static Connection getConnection(String url, String user, String pwd) {
		if (dbConn != null) {
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				dbConn = DriverManager.getConnection(url, user, pwd);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return dbConn;
	}

	public static void dbClose() {
		if (dbConn != null) {
			try {
				if (!dbConn.isClosed())
					dbConn.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		dbConn = null; // 초기화하지 않으면 다시 사용할 수가 없기 때문에 꼭 실행함
	}

	public static void dbClose(PreparedStatement ps, Connection conn) {
		try {
			if (ps != null)
				ps.close();
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		conn = null;
		ps = null; // 항상 자원을 반납 후 널값 처리 해줌
	}

	public static void dbClose(Statement st, Connection conn) {
		try {
			if (st != null)
				st.close();
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		conn = null;
		st = null;
	}

	public static void dbClose(ResultSet rs, PreparedStatement ps, Connection conn) {
		try {
			if (rs != null)
				rs.close();
			if (ps != null)
				ps.close();
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		rs = null;
		ps = null;
		conn = null; // 항상 자원을 반납 후 널값 처리 해줌
	}

	public static void dbClose(ResultSet rs, Statement st, Connection conn) {
		try {
			if (rs != null)
				rs.close();
			if (st != null)
				st.close();
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		conn = null;
		st = null;
		rs = null;
	}

}

 

프로젝트 내 src 내 javabasic 패키지 내 TsDTO.java

package javabasic;

public class TsDTO {
	//멤버를 데이타베이스의 필드로 설정 생성한 테이블의 필드를 모두 변수로 선언
		//tr1, tr2, tr3 테이블의 필드(열, 컬럼)를 변수로 선언
		//private은캡슐화
		private String id, name, birthday, tel;	//아이디, 이름, 생년월일,
												//전화번호
		//멤버변수에 데이터를 입출력 하는 전용 메소드 : getter, setter 메소드

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getBirthday() {
			return birthday;
		}

		public void setBirthday(String birthday) {
			this.birthday = birthday;
		}

		public String getTel() {
			return tel;
		}

		public void setTel(String tel) {
			this.tel = tel;
		}
		
		//toString메소드 오버라이딩
		@Override
		public String toString() {
			return String.format("%s %s %s %s", id, name, birthday, tel);
		}
}

 

프로젝트 내 src 내 javabasic 패키지 내 TsDAO.java

package javabasic;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class TsDAO {
	Connection conn;
	Statement stmt;
	
	//전체 출력
	public ArrayList<TsDTO> outputData() {
		ArrayList<TsDTO> lists = new ArrayList<TsDTO>();
		
		try {
			conn = DbConn.getConnection();
			stmt = conn.createStatement();
			String query = "select tr1.id, name, TO_CHAR(birthday,'YYYY-MM-DD') as birthday, tel"
					+ " from tr1, tr2, tr3"
					+ " where tr1.id=tr2.id"
					+ " and tr1.id=tr3.id"
					+ " order by tr1.id asc";	//3개으테이블을 조인처리
			
			ResultSet rs = stmt.executeQuery(query);
			
			while(rs.next()) {
				TsDTO dto = new TsDTO();
				dto.setId(rs.getString("id"));
				dto.setName(rs.getString("name"));
				dto.setBirthday(rs.getString("birthday"));
				dto.setTel(rs.getString("tel"));
				lists.add(dto);	//TsDTO라는 하나의묶음객체, 패키지화됨.추가
				//레코드가추가되면 DTO 형태로 묶어놓고 추가함
			}
			rs.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		DbConn.dbClose();
		return lists;
	}//outputData()
	
	//트랜잭션 처리 안된 입력 메소드, 커밋과 롤백을 적용할 수 없다.
	public int notTs_in(TsDTO dto) {
		
		int result=0;
		try {
			conn = DbConn.getConnection();
			//tr1테이블에 입력
			String query = String.format("insert into tr1(id, name) values('%s','%s')",
					dto.getId(), dto.getName());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
			
			//tr2테이블에 입력
			query = String.format("insert into tr2(id, birthday) values('%s','%s')",
					dto.getId(), dto.getBirthday());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
			
			//tr3테이블에 입력
			query = String.format("insert into tr3(id, tel) values('%s','%s')",
					dto.getId(), dto.getTel());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println(e.toString());
			result = 0;	//결과는 에러발생했을 경우 다시 0으로 처리
		}
		return result;
	}//notTs_in()
	
	//트랜잭션 처리가된 입력 메소드
	public int ts_in(TsDTO dto) {
		int result=0;
		try {
			conn = DbConn.getConnection();
			
			//트랜잭션 시작-------------------------
			conn.setAutoCommit(false);//이제부터 밑에는 에라가 있으면 DB 에 반영이안된다
			//에라가 없으면 커밋이 수행된다, 밑에 DML 부분은 하나의 트랜잭션이 된다
			
			//tr1테이블에 입력
			String query = String.format("insert into tr1(id, name) values('%s','%s')",
					dto.getId(), dto.getName());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
			
			//tr2테이블에 입력
			query = String.format("insert into tr2(id, birthday) values('%s','%s')",
					dto.getId(), dto.getBirthday());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
			
			//tr3테이블에 입력
			//tr3에서 오류가 나면 나머지 tr1 tr2 가 취소가 되야지 트랜잭션
			//3개의 DML를 한꺼번에 하나의 트랜잭션으로 설정하겠다
			//tr3에서 난 오류가 있지만 tr1, tr2 테이블에는 값이 전달 되었다.
			query = String.format("insert into tr3(id, tel) values('%s','%s')",
					dto.getId(), dto.getTel());	//오라클과 자바에서 쓰는 %의미가 다르므로 홑따옴표 처리
			
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			stmt.close();
			
			conn.commit();//setAutoCommit메소드부터 여기까지 하나의 통트랜잭션
			//동시에 tr1, tr2, tr3 테이블에 반영이 될때만 하나의 트랜잭션이 성사,거래가 이루어지는것
			//트랜잭션 끝-------------------------
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			try {
				//에러발생시 앞에 내렸던 명령은 모두 취소된다
				conn.rollback();
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				System.out.println(e1.toString());
			}
			System.out.println(e.toString());
			result = 0;
		}
		return result;
	}
}

프로젝트 내 src 내 javabasic 패키지 내 TsProcess.java

package javabasic;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;

public class TsProcess {
	
	//select 문의 조회결과를 확인하기 위한 메소드
		public void selectData() {
			TsDAO dao = new TsDAO();
			ArrayList<TsDTO> lists = dao.outputData();

			Iterator<TsDTO> it = lists.iterator();
			while(it.hasNext()) {
				TsDTO dto = it.next();
				System.out.println(dto.toString());
			}
		}

		//사용자 데이터 입력을 통해 데이타베이스에 반영하는 메소드(트랜잭션 처리불)
		public void insertData1() {
			TsDAO dao = new TsDAO();
			TsDTO dto = new TsDTO();

			//BufferedReader를 통해 입력값을 전달한다
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

			//불러와서 버퍼를 이용. 입력을 받아야 하니 화면에
			try {
				System.out.println("아이디 입력: ");
				dto.setId(br.readLine());
				System.out.println("이름 입력: ");
				dto.setName(br.readLine());
				System.out.println("생일 입력: ");
				dto.setBirthday(br.readLine());
				System.out.println("전화번호 입력: ");
				dto.setTel(br.readLine());

				int result = dao.notTs_in(dto);
				if(result != 0) {
					System.out.println("입력 성공!!!");
				}else{
					System.out.println("입력 실패!!!");
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}//end of insertData1()

		//트랜잭션 입력처리
		public void insertData2() {
			TsDAO dao = new TsDAO();
			TsDTO dto = new TsDTO();

			//BufferedReader를 통해 입력값을 전달한다
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

			//불러와서 버퍼를 이용. 입력을 받아야 하니 화면에
			try {
				System.out.println("아이디 입력: ");
				dto.setId(br.readLine());
				System.out.println("이름 입력: ");
				dto.setName(br.readLine());
				System.out.println("생일 입력: ");
				dto.setBirthday(br.readLine());
				System.out.println("전화번호 입력: ");
				dto.setTel(br.readLine());

				int result = dao.ts_in(dto);
				if(result != 0) {
					System.out.println("입력 성공!!!");
				}else{
					System.out.println("입력 실패!!!");
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
}

프로젝트 내 src 내 javabasic 패키지 내 TsMain.java

package javabasic;

import java.io.IOException;

public class TsMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 메인메뉴 구성
		// 1. 출력 2. 입력 3. 트랜잭션 입력처리 4. 종료

		char ch;
		TsProcess obj = new TsProcess();

		try {
			while (true) {
				do {
					System.out.println("------------<MENU>------------");
					System.out.println("1.출력 2.입력 3.트랜잭션 입력처리 4.종료");
					System.out.println("------------------------------");
					System.out.println("위의 메뉴번호를 선택하시오.!!!--> ");
					ch = (char) System.in.read();
                    // System.in.read(); // 버퍼에 남은 엔터를 없애는 작업을 한다
                    // 맨 앞으로 가는 \r 과 한 줄 밑으로 가는 \n 가 엔터이다
                    // 아랫 줄과 같이 skip(건너뛸 칸 숫자) 메서드를 쓰면 
                    // 위에 System.in.read() 메서드와 같은 역할을 한다
					System.in.skip(2);// 입력스트림에서 두개의 문잣값을 건너뛰겠다.
					// (엔터값 입력이 된다면...)
				} while (ch < '1' || ch > '4');
				switch (ch) {
				case '1':
					obj.selectData();
					break;
				case '2':
					obj.insertData1();
					break;
				case '3':
					obj.insertData2();
					break;
				case '4':
					DbConn.dbClose();
					System.exit(0);
				}// switch
			} // while
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

실행 결과

------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
0
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
6
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
21 김장비 1990-05-22 010-1111-0000
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
43
이름 입력: 
감우리
생일 입력: 
2020-01-01
전화번호 입력: 
010-1111-1010
java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
43
이름 입력: 
강호동
생일 입력: 
20200101
전화번호 입력: 
010-1111-1010
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0024845)에 위배됩니다

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
54
이름 입력: 
고주희
생일 입력: 
20200101
전화번호 입력: 
010-1111-1010
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
65
이름 입력: 
공감용
생일 입력: 
20020102
전화번호 입력: 
010-1222-1222
java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
76
이름 입력: 
기수현
생일 입력: 
20230508
전화번호 입력: 
010-1234-1212
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
87
이름 입력: 
가미연
생일 입력: 
20020223
전화번호 입력: 
010-1235-1231
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
21 김장비 1990-05-22 010-1111-0000
54 고주희 2020-01-01 010-1111-1010
76 기수현 2023-05-08 010-1234-1212
87 가미연 2002-02-23 010-1235-1231
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
3
아이디 입력: 
98
이름 입력: 
길수호
생일 입력: 
20001112
전화번호 입력: 
010-1444-1222
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
21 김장비 1990-05-22 010-1111-0000
54 고주희 2020-01-01 010-1111-1010
76 기수현 2023-05-08 010-1234-1212
87 가미연 2002-02-23 010-1235-1231
98 길수호 2000-11-12 010-1444-1222
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
09
이름 입력: 
경수자
생일 입력: 
20090909
전화번호 입력: 
010-0002-0001
java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
12
이름 입력: 
고길동
생일 입력: 
20091109
전화번호 입력: 
010-1029-1232
java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
13
이름 입력: 
견아라
생일 입력: 
20090911
전화번호 입력: 
010-2938-2121
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
14
이름 입력: 
권유라
생일 입력: 
2009119
전화번호 입력: 
010-4852-1212
java.sql.SQLDataException: ORA-01861: 리터럴이 형식 문자열과 일치하지 않음

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
15
이름 입력: 
간소라
생일 입력: 
19991201
전화번호 입력: 
010-1231-1938
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
3
아이디 입력: 
16
이름 입력: 
구준희
생일 입력: 
2020-11-18
전화번호 입력: 
010-4352-5455
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
17
이름 입력: 
노계연
생일 입력: 
1998-12-12
전화번호 입력: 
010-9444-2222
입력 성공!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
3
아이디 입력: 
18
이름 입력: 
나하나
생일 입력: 
2001-04-29
전화번호 입력: 

java.sql.SQLIntegrityConstraintViolationException: ORA-01400: NULL을 ("SCOTT"."TR3"."TEL") 안에 삽입할 수 없습니다

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
18
이름 입력: 
나하나
생일 입력: 
2001-04-29
전화번호 입력: 

java.sql.SQLIntegrityConstraintViolationException: ORA-01400: NULL을 ("SCOTT"."TR3"."TEL") 안에 삽입할 수 없습니다

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
3
아이디 입력: 
18
이름 입력: 
나하나
생일 입력: 
2001-04-29
전화번호 입력: 
123-456789-0123456-7890123
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0024845)에 위배됩니다

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
13 견아라 2009-09-11 010-2938-2121
15 간소라 1999-12-01 010-1231-1938
16 구준희 2020-11-18 010-4352-5455
21 김장비 1990-05-22 010-1111-0000
54 고주희 2020-01-01 010-1111-1010
76 기수현 2023-05-08 010-1234-1212
87 가미연 2002-02-23 010-1235-1231
98 길수호 2000-11-12 010-1444-1222
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
18
이름 입력: 나하나
생일 입력: 
2009-01-25
전화번호 입력: 
12345678901234567890123456
java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
3
아이디 입력: 
19
이름 입력: 
남기남
생일 입력: 
1993-12-28
전화번호 입력: 
1234567-890123-4567890123
java.sql.SQLException: ORA-12899: "SCOTT"."TR3"."TEL" 열에 대한 값이 너무 큼(실제: 25, 최대값: 20)

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
13 견아라 2009-09-11 010-2938-2121
15 간소라 1999-12-01 010-1231-1938
16 구준희 2020-11-18 010-4352-5455
21 김장비 1990-05-22 010-1111-0000
54 고주희 2020-01-01 010-1111-1010
76 기수현 2023-05-08 010-1234-1212
87 가미연 2002-02-23 010-1235-1231
98 길수호 2000-11-12 010-1444-1222
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
2
아이디 입력: 
19
이름 입력: 
남기남
생일 입력: 
1932-09-30
전화번호 입력: 
12345678901-1234567890-123456
java.sql.SQLException: ORA-12899: "SCOTT"."TR3"."TEL" 열에 대한 값이 너무 큼(실제: 29, 최대값: 20)

입력 실패!!!
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
1
11 김관우 1990-10-30 010-333-3333
13 견아라 2009-09-11 010-2938-2121
15 간소라 1999-12-01 010-1231-1938
16 구준희 2020-11-18 010-4352-5455
21 김장비 1990-05-22 010-1111-0000
54 고주희 2020-01-01 010-1111-1010
76 기수현 2023-05-08 010-1234-1212
87 가미연 2002-02-23 010-1235-1231
98 길수호 2000-11-12 010-1444-1222
------------<MENU>------------
1.출력 2.입력 3.트랜잭션 입력처리 4.종료
------------------------------
위의 메뉴번호를 선택하시오.!!!--> 
4

TsMain.java Java Application 을 실행 해서 값을 입력 할 때

데이타베이스 데이타 형식이 DATE 인 칼럼 BIRTHDAY 에서

입력한 날짜 중에 2자리 일을 쓰는데 앞자리에 0 이 들어가는 한자릿 수 일(01 일 ~09 일) 을

쓰면 다음과 같이 오류가 뜬다

java.sql.SQLDataException: ORA-01841: 년은 영이 아닌 -4713 과 +4713 사이의 값으로 지정해야 합니다.

그런데 안 뜰 때도 있어서 왜 그런지 모르겠다

'Java' 카테고리의 다른 글

Java getActionCommand()  (0) 2023.04.06
Java ResultSetMetaData  (0) 2023.04.04
Java Singleton Type Class  (0) 2023.03.30
Java afterLast()  (0) 2023.03.28
Java JDBC™ 4.2 API  (0) 2023.02.28