Java setAutoCommit(boolean autoCommit)
2023. 5. 10. 00:17ㆍJava
프로젝트 내 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 |