티스토리 뷰
백엔드 교육과정/3월
2024.03.04_ JDBC(insert,select_all,select_by_contactId, update,delete)
Ji@n 2024. 3. 4. 17:41
Java 에서 DB 연결 순서
1. 데이터 저장을 위한 DB 테이블 생성
2. DB와 연동하기 위해 필요한 상수들을 정의
3. JDBC 드라이버를 메모리에 로드
4. DB와 Connection(연결)을 맺음
5. Connection 객체를 사용하여 Statement 객체를 생성
6. SQL 문장을 작성
7. Statement 객체를 사용하여 SQL 문장을 실행 (DB 서버로 SQL 문장을 전송)
8. DB 서버가 보내준 결과를 확인/처리
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
System.out.println("JDBC 1 - insert");
Connection conn = null;
Statement stmt = null;
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
SQL 문장을 작성
공백 주의! 없으면 에러 날 수 있음
// 6. SQL 문장을 작성
// INSERT INTO EX_CONTACT : INTO 뒤에 공백 필수 , 없으면 에러남 "INSERT INTO "
// VALUES (CONTACT_SEQ.NEXTVAL, 'MOK', '010-2222-2222', 'TEST@TEST.COM'); : VALUES 앞 뒤 공백도 없음 에러남
String sql_insert = "INSERT INTO " + TABLE_NAME
+ " VALUES (CONTACT_SEQ.NEXTVAL, 'MOK', '010-2222-2222', 'TEST@TEST.COM')";
System.out.println(sql_insert);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = stmt.executeUpdate(sql_insert);
// 8. DB 서버가 보낸 결과 처리/확인
System.out.println(result + "행이 삽입됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
전체 실행코드 복붙
package edu.java.jdbc01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;
// JDBC : Java Database Connection
// Java와 DB를 연결하기 위한 Java API
// 0. 데이터베이스 라이브러리를 프로젝트에 추가
// - 프로젝트 오른쪽 클릭 -> Build Path -> Add External Archives to Java Build Path
// -> C :\ oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
// ojdbc6.jar 선택
// 1. 데이터 저장을 위한 DB 테이블 생성
// 2. DB와 연동하기 위해 필요한 상수들을 정의
// 3. JDBC 드라이버를 메모리에 로드
// 4. DB와 Connection(연결)을 맺음
// 5. Connection 객체를 사용하여 Statement 객체를 생성
// 6. SQL 문장을 작성
// 7. Statement 객체를 사용하여 SQL 문장을 실행(DB 서버로 SQL 문장을 전송)
// 8. DB 서버가 보내준 결과를 확인/처리
public class JDBCMain01 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
public static void main(String[] args) {
System.out.println("JDBC 1 - insert");
Connection conn = null;
Statement stmt = null;
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장을 작성
// INSERT INTO EX_CONTACT : INTO 뒤에 공백 필수 , 없으면 에러남 "INSERT INTO "
// VALUES (CONTACT_SEQ.NEXTVAL, 'MOK', '010-2222-2222', 'TEST@TEST.COM'); : VALUES 앞 뒤 공백도 없음 에러남
String sql_insert = "INSERT INTO " + TABLE_NAME
+ " VALUES (CONTACT_SEQ.NEXTVAL, 'MOK', '010-2222-2222', 'TEST@TEST.COM')";
System.out.println(sql_insert);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = stmt.executeUpdate(sql_insert);
// 8. DB 서버가 보낸 결과 처리/확인
System.out.println(result + "행이 삽입됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main()
}//JDBCMain01
JDBC - update
6. SQL 문장 작성
7. SQL 문장 실행
등만 수정하기
package edu.java.jdbc02;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;
public class JDBCMain02 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
public static void main(String[] args) {
System.out.println("JDBC 2 - update");
Connection conn = null;
Statement stmt = null;
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장을 작성
// SQLdeveloper :
// UPDATE EX_CONTACT
// SET NAME = '둘리',
// PHONE = '010-3333-3333',
// EMAIL = 'dooli@test.com'
// WHERE CONTACT_ID = 2;
String sql_update = "UPDATE " + TABLE_NAME
+ " SET NAME = '둘리',"
+ "PHONE = '010-3333-3333',"
+ "EMAIL = 'dooli@test.com' " // WHERE 앞 공백 필수
+ "WHERE CONTACT_ID = 2";
System.out.println(sql_update);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
// executeUpdate() : INSERT, UPDATE, DELETE 를 처리할 때 사용
// executeQuery() : SELECT 를 처리할 때 사용
int result = stmt.executeUpdate(sql_update);
// 8. DB 서버가 보낸 결과 처리/확인
System.out.println(result + "행이 수정됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain02
JDBC 3 - select all
ContactVO 생성
6. SQL 문장 작성
7. SQL 문장 실행
8. DB 서버가 보낸 결과 확인 / 처리
등이 다름
package edu.java.jdbc03;
public class ContactVO {
private int contactId;
private String name;
private String phone;
private String email;
public ContactVO() {
}
public ContactVO(int contactId, String name, String phone, String email) {
super();
this.contactId = contactId;
this.name = name;
this.phone = phone;
this.email = email;
}
public int getContactId() {
return contactId;
}
public void setContactId(int contactId) {
this.contactId = contactId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "ContactVO [contactId=" + contactId + ", name=" + name + ", phone=" + phone + ", email=" + email + "]";
}
}//end ContactVO
package edu.java.jdbc03;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import oracle.jdbc.driver.OracleDriver;
public class JDBCMain03 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
public static void main(String[] args) {
System.out.println("JDBC 3 - select all");
Connection conn = null;
Statement stmt = null; // beans 하면 오류가 나는..
ResultSet rs = null; // select query 결과 저장할 클래스
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장 작성
// SELECT * FROM EX_CONTACT ORDER BY CONTACT_ID;
String sql_select =
"SELECT * FROM " + TABLE_NAME +
" ORDER BY " + COL_CONTACT_ID;
System.out.println(sql_select);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
rs = ((java.sql.Statement) stmt).executeQuery(sql_select);
// 8. DB 서버가 보낸 결과 확인/처리
// ResultSet.next() :
// ResultSet에서 다음 행(row or record)이 있으면
// true를 리턴하고, ResultSet이 가리키는 위치를 다음 위치로 변경
ArrayList<ContactVO> list = new ArrayList<>();
while(rs.next()) { // 레코드가 존재할 때까지
int contactId = rs.getInt(1); // CONTACT_ID 칼럼
String name = rs.getNString(2); // NAME 칼럼
String phone = rs.getNString(3); // PHONE 칼럼
String email = rs.getNString(4); // EMAIl 칼럼
ContactVO vo = new ContactVO(contactId,name,phone,email);
list.add(vo);
}
for(ContactVO vo : list) {
System.out.println(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain03
JDBC 4 - select by contact_id
6. SQL 문장 작성
7. SQL 문장 실행
8. DB 서버가 보낸 결과 확인 / 처리
package edu.java.jdbc04;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import edu.java.jdbc03.ContactVO;
import oracle.jdbc.driver.OracleDriver;
public class JDBCMain04 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
public static void main(String[] args) {
System.out.println("JDBC 4 - select by contact_id");
Connection conn = null;
Statement stmt = null; // beans 하면 오류가 나는..
ResultSet rs = null; // select query 결과 저장할 클래스
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장 작성
// SELECT * FROM EX_CONTACT WHERE CONTACT_ID = 2;
String sql_select_by_contact_id =
"SELECT * FROM " + TABLE_NAME +
" WHERE " + COL_CONTACT_ID + " = 2";
System.out.println(sql_select_by_contact_id);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
rs = ((java.sql.Statement) stmt).executeQuery(sql_select_by_contact_id);
// 8. DB 서버가 보낸 결과 확인/처리
// ResultSet.next() :
// ResultSet에서 다음 행(row or record)이 있으면
// true를 리턴하고, ResultSet이 가리키는 위치를 다음 위치로 변경
if(rs.next()) { // 레코드가 존재할 때까지
int contactId = rs.getInt(1); // CONTACT_ID 칼럼
String name = rs.getNString(2); // NAME 칼럼
String phone = rs.getNString(3); // PHONE 칼럼
String email = rs.getNString(4); // EMAIl 칼럼
ContactVO vo = new ContactVO(contactId,name,phone,email);
System.out.println(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain04
JDBC 5 - 입력받은 데이터를 쿼리에 적용하여 insert
데이터 등록 SQL_INSERT
PreparedStatement
6. SQL 문장 완성
7. SQL 문장 실행
8. DB 서버가 보낸 결과 확인/처리
package edu.java.jdbc05;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
import oracle.jdbc.OracleDriver;
public class JDBCMain05 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
// 데이터 등록
// INSERT INTO EX_CONTACT
// VALUES (CONTACT_SEQ.NEXRVAL, ?, ?, ?);
public static final String SQL_INSERT = "INSERT INTO " + TABLE_NAME
+ " VALUES (CONTACT_SEQ.NEXTVAL, ?, ?, ?)";
public static void main(String[] args) {
System.out.println("JDBC 5 - 입력받은 데이터를 쿼리에 적용하여 insert");
Connection conn = null;
PreparedStatement pstmt = null;
// PreparedStatement : 매개변수를 갖고 있는 SQL 문장을 활용하기 위한 클래스
// Statement 와 상속 관계
try {
// 3. Oracle JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
// 4. DB 와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 PreparedStatement 객체를 생성
pstmt = conn.prepareStatement(SQL_INSERT);
Scanner sc = new Scanner(System.in);
System.out.println("이름 입력> ");
String name = sc.next();
System.out.println("전화번호 입력> ");
String phone = sc.next();
System.out.println("이메일 입력> ");
String email = sc.next();
// 6. SQL 문장 완성 - SQL_INSERT 쿼리의 ?를 채워주는 코드
pstmt.setString(1, name);
pstmt.setString(2, phone);
pstmt.setString(3, email);
// SQL 쿼리의 ? 순서와 parameterIndex의 값을 동일하게 지정
// 예시) ? 가 첫 번째이면 parameterIndex = 1
// setInt() : DB의 Number 타입
// setString() : DB의 varchar, varchar2 타입
// setFloat() : DB의 Float 타입
// setDate() : DB의 Date 타입
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = pstmt.executeUpdate();
// 8. DB 서버가 보낸 결과 확인/처리
System.out.println(result + "행이 삽입됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain05
JDBC 6 - 입력받은 데이터를 쿼리에 적용하여 update, delete
package edu.java.jdbc06;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
import oracle.jdbc.OracleDriver;
public class JDBCMain06 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
// 데이터 수정
// UPDATE EX_CONTACT
// SET NAME = ?, PHONE = ?, EMAIL = ?
// WHERE CONTACT_ID = ?
public static final String SQL_UPDATE =
"UPDATE " + TABLE_NAME + " SET " +
COL_NAME + " = ?, " +
COL_PHONE + " = ?, " +
COL_EMAIL + " = ? " +
"WHERE " + COL_CONTACT_ID + " = ?";
// 데이터 삭제
// DELETE EX_CONTACT WHERE CONTACT_ID = ?
public static final String SQL_DELETE =
"DELETE " + TABLE_NAME + " WHERE "
+ COL_CONTACT_ID + " = ?";
public static void main(String[] args) {
System.out.println("JDBC 6 - 입력받은 데이터를 쿼리에 적용하여 update, delete");
Connection conn = null;
PreparedStatement pstmt = null;
// PreparedStatement : 매개변수를 갖고 있는 SQL 문장을 활용하기 위한 클래스
// Statement 와 상속 관계
try {
// 3. Oracle JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
// 4. DB 와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 PreparedStatement 객체를 생성
pstmt = conn.prepareStatement(SQL_UPDATE);
Scanner sc = new Scanner(System.in);
System.out.println("이름 입력> ");
String name = sc.next();
System.out.println("전화번호 입력> ");
String phone = sc.next();
System.out.println("이메일 입력> ");
String email = sc.next();
System.out.println("번호 입력> ");
int contactId = sc.nextInt();
// 6. SQL 문장 완성 - SQL_INSERT 쿼리의 ?를 채워주는 코드
pstmt.setString(1, name);
pstmt.setString(2, phone);
pstmt.setString(3, email);
pstmt.setInt(4, contactId);
// SQL 쿼리의 ? 순서와 parameterIndex의 값을 동일하게 지정
// 예시) ? 가 첫 번째이면 parameterIndex = 1
// setInt() : DB의 Number 타입
// setString() : DB의 varchar, varchar2 타입
// setFloat() : DB의 Float 타입
// setDate() : DB의 Date 타입
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = pstmt.executeUpdate();
// 8. DB 서버가 보낸 결과 확인/처리
System.out.println(result + "행이 수정됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain06
JDBC 7 - 입력된 번호로 select
package edu.java.jdbc07;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import edu.java.jdbc03.ContactVO;
import oracle.jdbc.driver.OracleDriver;
public class JDBCMain07 {
// 2. DB와 연동하기 위해 필요한 상수들을 정의
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
//SELECT * FROM EX_CONTACT WHERE CONTACT_ID = ?
public static final String SQL_SELECT_BY_CONTACT_ID =
"SELECT * FROM " + TABLE_NAME +
" WHERE " + COL_CONTACT_ID + " = ?";
public static void main(String[] args) {
System.out.println("JDBC 7 - 입력된 번호로 select");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; // select query 결과 저장할 클래스
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
pstmt = conn.prepareStatement(SQL_SELECT_BY_CONTACT_ID);
// 6. SQL 문장 작성
Scanner sc = new Scanner(System.in);
System.out.println("인덱스 입력> ");
int contactId = sc.nextInt();
pstmt.setInt(1, contactId);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
rs = pstmt.executeQuery();
// 8. DB 서버가 보낸 결과 확인/처리
// ResultSet.next() :
// ResultSet에서 다음 행(row or record)이 있으면
// true를 리턴하고, ResultSet이 가리키는 위치를 다음 위치로 변경
if(rs.next()) { // 레코드가 존재할 때까지
contactId = rs.getInt(1); // CONTACT_ID 칼럼
String name = rs.getNString(2); // NAME 칼럼
String phone = rs.getNString(3); // PHONE 칼럼
String email = rs.getNString(4); // EMAIl 칼럼
ContactVO vo = new ContactVO(contactId,name,phone,email);
System.out.println(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main()
}//end JDBCMain07
연락처 ver.0.6
연락처프로그램 ver 0.6
1. 주제 : 연락처를 관리할 수 있는 프로그램 구현
2. 기능 : - 연락처 등록 - 연락처 전체 리스트 검색 - 연락처 정보 인덱스 검색 - 연락처 정보 인덱스 수정
- 연락처 정보 인덱스 삭제
3. 데이터 구조 - DB 테이블
테이블명 : EX_CONTACT
컬럼 :
CONTACT_ID(NUMBER) : 연락처 인덱스 - PK
NAME(VARCHAR2) : 연락처 이름 - NOT NULL
PHONE(VARCHAR2) : 연락처 번호 - NOT NULL
EMAIL(VARCHAR2) : 연락처 이메일 - NOT NULL
4. 데이터 구조 - ContactVO
contactId(int) : 연락처 인덱스
name(String) : 연락처 이름
phone(String) : 연락처 번호
email(String) : 연락처 이메일
5. 클래스 명세서
ContactDAO.java : DAO Interface. 연락처 기능 메서드 정의
ContactDAOImple.java
: DAO Implement 클래스. 연락처 기능 메서드 구현.
DB에 접근하여 데이터 등록/검색/수정/삭제 수행
ContactMain06.java : UI 클래스. GUI로 화면 구현
ContactVO.java : Model 클래스. 데이터 송수신 클래스
OracleQuery.java : Oracle DB 정보 인터페이스.
DB 연결을 위한 상수.
사용자 정보 테이블 및 컬럼 정보.
쿼리 작성
ContactDAO
package edu.java.contact06;
import java.util.ArrayList;
// * 인터페이스 DAO 메소드 설계 방식
// - 함수의 리턴타입 : 돌려주는 데이터 형태에 따라 선언
// - 함수의 매개변수 : 전송되는 데이터 형태에 따라 선언
// - 함수의 이름 : 역할에 따라 이름 작성
public interface ContactDAO {
// 연락처 정보 등록
public abstract int insert(ContactVO vo);
// 연락처 정보 전체 검색
public abstract ArrayList<ContactVO> select();
// 연락처 정보 인덱스 검색
public abstract ContactVO select(int index);
// 연락처 정보 인덱스 수정
public abstract int update(int index, ContactVO vo);
// 연락처 정보 인덱스 삭제
public abstract int delete(int index);
}
ContactDAOImple
- 에러만 한 바가지
package edu.java.contact06;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Array;
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.ArrayList;
import java.util.Scanner;
import oracle.jdbc.driver.OracleDriver;
// DAO(Data Access Object) :
// - 데이터의 전송을 담당하는 역할
public class ContactDAOImple implements ContactDAO {
// 싱글톤 디자인 패턴 적용
// 1. private static 자기 자신 타입의 변수 선언
private static ContactDAOImple instance = null;
// 2. private 생성자
private ContactDAOImple() {
initDataDir();
initDataFile();
}
// 3. public static 메소드 - 인스턴스를 리턴하는 메소드 구현
public static ContactDAOImple getInstance() {
if(instance == null) {
instance = new ContactDAOImple();
}
return instance;
}
private ArrayList<ContactVO> list = new ArrayList<>(); // 연락처 정보를 저장할 배열
// 데이터를 저장할 폴더와 파일 이름 정의
private static final String DATA_DIR = "data";
private static final String DATA_FILE = "contact.data";
// data 폴더의 contact.data 파일을 관리할 File 객체 선언
private File dataDir;
private File dataFile;
// TODO : data 폴더가 있는지 검사하고, 없으면 생성하는 함수
private void initDataDir() {
System.out.println("initDataDir()");
dataDir = new File(DATA_DIR);
System.out.println("폴더 경로 : " + dataDir.getPath());
System.out.println("절대 경로 : " + dataDir.getAbsolutePath());
if(!dataDir.exists()) { // 폴더가 없으면
if(dataDir.mkdirs()) {
System.out.println("<폴더 생성 성공>");
} else {
System.out.println("<폴더 생성 실패>");
}
} else { // 폴더가 있으면
System.out.println("<폴더가 이미 존재>");
}
} // end initDataDir()
// TODO : 데이터 파일이 존재하는지 검사하고,
// 없는 경우 - 새로운 데이터 파일 생성
// 있는 경우 - 기존 파일에서 데이터를 읽어서 ArrayList에 추가
private void initDataFile() {
System.out.println("initDataFile()");
String filePath = DATA_DIR + File.separator + DATA_FILE;
dataFile = new File(filePath);
if(!dataFile.exists()) {
System.out.println("파일이 없습니다.");
try {
if(dataFile.createNewFile()) {
System.out.println("파일 생성 성공");
} else {
System.out.println("파일 생성 실패");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("파일이 이미 존재합니다.");
System.out.println("데이터 크기 : " + dataFile.length());
if(dataFile.length() != 0) {
readDataFromFile();
}
}
} // end initDataFile()
// TODO : 멤버 변수 list 객체를 data\contact.data 파일에 저장(쓰기)
private void writeDataToFile() {
System.out.println("writeDataToFile()");
OutputStream out = null;
BufferedOutputStream bout = null;
ObjectOutputStream oout = null;
try {
out = new FileOutputStream(dataFile);
bout = new BufferedOutputStream(out);
oout = new ObjectOutputStream(bout);
oout.writeObject(list);
System.out.println("데이터 저장 완료");
} catch (Exception e) {
System.out.println(e.toString());
} finally {
try {
oout.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // end writeDataToFile()
// TODO : data\contact.data 파일에서 ArrayList 객체를 읽어와서
// 멤버 변수 list에 저장(읽기)
private void readDataFromFile() {
System.out.println("readDataFromFile()");
InputStream in = null;
BufferedInputStream bin = null;
ObjectInputStream oin = null;
try {
System.out.println("try 내부");
in = new FileInputStream(dataFile);
bin = new BufferedInputStream(in);
oin = new ObjectInputStream(bin);
list = (ArrayList<ContactVO>) oin.readObject();
System.out.println("데이터 불러옴");
} catch (Exception e) {
System.out.println(e.toString());
} finally {
try {
oin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // end readDataFromFile()
public int getSize() {
return list.size();
}
@Override
public int insert(ContactVO vo) {
Connection conn = null;
Statement stmt = null;
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장을 작성
// INSERT INTO EX_CONTACT : INTO 뒤에 공백 필수 , 없으면 에러남 "INSERT INTO "
// VALUES (CONTACT_SEQ.NEXTVAL, 'MOK', '010-2222-2222', 'TEST@TEST.COM'); : VALUES 앞 뒤 공백도 없음 에러남
String sql_insert = "INSERT INTO " + TABLE_NAME
+ " VALUES (CONTACT_SEQ.NEXTVAL, "
+ COL_NAME + ", "
+ COL_PHONE + ", "
+ COL_EMAIL + ")";
System.out.println(sql_insert);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = stmt.executeUpdate(sql_insert);
// 8. DB 서버가 보낸 결과 처리/확인
System.out.println(result + "행이 삽입됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
return 1; // return result ?
}
@Override
public ArrayList<ContactVO> select() {
return list;
}
@Override
public ContactVO select(int index) {
Connection conn = null;
Statement stmt = null; // beans 하면 오류가 나는..
ResultSet rs = null; // select query 결과 저장할 클래스
try {
// 3. JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
//4. DB와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 Statement 객체를 생성
stmt = conn.createStatement();
// 6. SQL 문장 작성
// SELECT * FROM EX_CONTACT WHERE CONTACT_ID = 2;
String sql_select_by_contact_id =
"SELECT * FROM " + TABLE_NAME +
" WHERE " + COL_CONTACT_ID + " = 2";
System.out.println(sql_select_by_contact_id);
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
rs = ((java.sql.Statement) stmt).executeQuery(sql_select_by_contact_id);
// 8. DB 서버가 보낸 결과 확인/처리
// ResultSet.next() :
// ResultSet에서 다음 행(row or record)이 있으면
// true를 리턴하고, ResultSet이 가리키는 위치를 다음 위치로 변경
if(rs.next()) { // 레코드가 존재할 때까지
int contactId = rs.getInt(1); // CONTACT_ID 칼럼
String name = rs.getNString(2); // NAME 칼럼
String phone = rs.getNString(3); // PHONE 칼럼
String email = rs.getNString(4); // EMAIl 칼럼
ContactVO vo = new ContactVO(contactId,name,phone,email);
System.out.println(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close(); // 반드시 닫아줘야함!!! 메모리 누수,외부 통로를 열어놓고 끝났음 종료해야 한다.
} catch (SQLException e) {
e.printStackTrace();
}
}
return list.get(index);
}
// 데이터 수정
// UPDATE EX_CONTACT
// SET NAME = ?, PHONE = ?, EMAIL = ?
// WHERE CONTACT_ID = ?
public static final String SQL_UPDATE =
"UPDATE " + TABLE_NAME + " SET " +
COL_NAME + " = ?, " +
COL_PHONE + " = ?, " +
COL_EMAIL + " = ? " +
"WHERE " + COL_CONTACT_ID + " = ?";
@Override
public int update(int index, ContactVO vo) {
Connection conn = null;
PreparedStatement pstmt = null;
// PreparedStatement : 매개변수를 갖고 있는 SQL 문장을 활용하기 위한 클래스
// Statement 와 상속 관계
try {
// 3. Oracle JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
// 4. DB 와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 PreparedStatement 객체를 생성
pstmt = conn.prepareStatement(SQL_UPDATE);
Scanner sc = new Scanner(System.in);
System.out.println("이름 입력> ");
String name = sc.next();
System.out.println("전화번호 입력> ");
String phone = sc.next();
System.out.println("이메일 입력> ");
String email = sc.next();
System.out.println("번호 입력> ");
int contactId = sc.nextInt();
// 6. SQL 문장 완성 - SQL_INSERT 쿼리의 ?를 채워주는 코드
pstmt.setString(1, name);
pstmt.setString(2, phone);
pstmt.setString(3, email);
pstmt.setInt(4, contactId);
// SQL 쿼리의 ? 순서와 parameterIndex의 값을 동일하게 지정
// 예시) ? 가 첫 번째이면 parameterIndex = 1
// setInt() : DB의 Number 타입
// setString() : DB의 varchar, varchar2 타입
// setFloat() : DB의 Float 타입
// setDate() : DB의 Date 타입
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = pstmt.executeUpdate();
// 8. DB 서버가 보낸 결과 확인/처리
System.out.println(result + "행이 수정됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 1;
}
// 데이터 삭제
// DELETE EX_CONTACT WHERE CONTACT_ID = ?
public static final String SQL_DELETE =
"DELETE " + TABLE_NAME + " WHERE "
+ COL_CONTACT_ID + " = ?";
@Override
public int delete(int index) {
Connection conn = null;
PreparedStatement pstmt = null;
// PreparedStatement : 매개변수를 갖고 있는 SQL 문장을 활용하기 위한 클래스
// Statement 와 상속 관계
try {
// 3. Oracle JDBC 드라이버를 메모리에 로드
DriverManager.registerDriver(new OracleDriver());
System.out.println("드라이버 로드 성공");
// 4. DB 와 Connection(연결)을 맺음
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("DB 연결 성공");
// 5. Connection 객체를 사용하여 PreparedStatement 객체를 생성
pstmt = conn.prepareStatement(SQL_DELETE);
Scanner sc = new Scanner(System.in);
System.out.println("번호 입력> ");
int contactId = sc.nextInt();
// 6. SQL 문장 완성 - SQL_INSERT 쿼리의 ?를 채워주는 코드
pstmt.setInt(1, contactId);
// SQL 쿼리의 ? 순서와 parameterIndex의 값을 동일하게 지정
// 예시) ? 가 첫 번째이면 parameterIndex = 1
// setInt() : DB의 Number 타입
// setString() : DB의 varchar, varchar2 타입
// setFloat() : DB의 Float 타입
// setDate() : DB의 Date 타입
// 7. SQL 문장 실행(DB 서버로 SQL 전송)
int result = pstmt.executeUpdate();
// + delete
// 8. DB 서버가 보낸 결과 확인/처리
System.out.println(result + "행이 삭제됐습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 1;
}
}
ContactMain06
package edu.java.contact06;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class ContactMain06 {
private JFrame frame;
private JTextField txtName, txtPhone, txtEmail, txtIndex;
private JTextArea txtAreaInfo, txtAreaLog;
private static ContactDAO dao;
/* 스윙 테이블을 사용하기 위한 멤버 변수 선언 */
private JTable table;
private String[] colNames = {"No", "이름", "전화번호", "이메일"}; // 테이블 헤더에 들어갈 이름들
private Object[] records = new Object[colNames.length]; // 테이블 데이터를 저장할 배열 객체
private DefaultTableModel tableModel; // 테이블 형태를 만들 모델 변수
public static void main(String[] args) {
dao = ContactDAOImple.getInstance();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ContactMain06 window = new ContactMain06();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public ContactMain06() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 786, 662);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
Font lblFont = new Font("굴림", Font.PLAIN, 44);
int lblWidth = 176;
int lblHeight = 55;
JLabel lblNewLabel = new JLabel("연락처 프로그램 Version 0.5");
lblNewLabel.setFont(lblFont);
lblNewLabel.setBounds(12, 10, 746, 66);
frame.getContentPane().add(lblNewLabel);
JLabel lblName = new JLabel("이름");
lblName.setFont(lblFont);
lblName.setBounds(12, 86, lblWidth, lblHeight);
frame.getContentPane().add(lblName);
JLabel lblPhone = new JLabel("전화번호");
lblPhone.setFont(lblFont);
lblPhone.setBounds(12, 151, lblWidth, lblHeight);
frame.getContentPane().add(lblPhone);
JLabel lblEmail = new JLabel("이메일");
lblEmail.setFont(lblFont);
lblEmail.setBounds(12, 216, lblWidth, lblHeight);
frame.getContentPane().add(lblEmail);
Font txtFont = new Font("굴림", Font.PLAIN, 34);
int txtWidth = 286;
int txtHeight = 55;
txtName = new JTextField();
txtName.setFont(txtFont);
txtName.setBounds(200, 86, txtWidth, txtHeight);
frame.getContentPane().add(txtName);
txtName.setColumns(10);
txtPhone = new JTextField();
txtPhone.setFont(txtFont);
txtPhone.setBounds(200, 151, txtWidth, txtHeight);
frame.getContentPane().add(txtPhone);
txtPhone.setColumns(10);
txtEmail = new JTextField();
txtEmail.setFont(txtFont);
txtEmail.setBounds(200, 216, txtWidth, txtHeight);
frame.getContentPane().add(txtEmail);
txtEmail.setColumns(10);
Font btnFont = new Font("굴림", Font.PLAIN, 24);
JButton btnInsert = new JButton("등록");
btnInsert.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
insertContact();
selectAllContactTable();
}
});
btnInsert.setFont(btnFont);
btnInsert.setBounds(12, 281, 110, 46);
frame.getContentPane().add(btnInsert);
JButton btnSearch = new JButton("검색");
btnSearch.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
selectContact();
}
});
btnSearch.setFont(btnFont);
btnSearch.setBounds(256, 281, 110, 46);
frame.getContentPane().add(btnSearch);
JButton btnUpdate = new JButton("수정");
btnUpdate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateContact();
selectAllContactTable();
}
});
btnUpdate.setFont(btnFont);
btnUpdate.setBounds(12, 337, 110, 46);
frame.getContentPane().add(btnUpdate);
JButton btnDelete = new JButton("삭제");
btnDelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteContact();
selectAllContactTable();
}
});
btnDelete.setFont(btnFont);
btnDelete.setBounds(134, 337, 110, 46);
frame.getContentPane().add(btnDelete);
JButton btnAllSearch = new JButton("전체검색");
btnAllSearch.addActionListener((e) -> {
selectAllContact();
selectAllContactTable();
});
btnAllSearch.setFont(btnFont);
btnAllSearch.setBounds(256, 337, 190, 46);
frame.getContentPane().add(btnAllSearch);
txtIndex = new JTextField();
txtIndex.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
txtIndex.setText("");
}
});
txtIndex.setText("번호입력");
txtIndex.setFont(new Font("굴림", Font.PLAIN, 17));
txtIndex.setBounds(134, 281, 108, 46);
frame.getContentPane().add(txtIndex);
txtIndex.setColumns(5);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(12, 393, 480, 95);
frame.getContentPane().add(scrollPane);
txtAreaInfo = new JTextArea();
txtAreaInfo.setFont(new Font("굴림", Font.PLAIN, 16));
scrollPane.setViewportView(txtAreaInfo);
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(12, 498, 480, 95);
frame.getContentPane().add(scrollPane_1);
txtAreaLog = new JTextArea();
txtAreaLog.setFont(new Font("굴림", Font.PLAIN, 16));
scrollPane_1.setViewportView(txtAreaLog);
JScrollPane scrollPane_2 = new JScrollPane();
scrollPane_2.setBounds(504, 281, 254, 312);
frame.getContentPane().add(scrollPane_2);
// 테이블 초기화
tableModel = new DefaultTableModel(colNames, 0) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
table = new JTable(tableModel);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
Object value = table.getValueAt(row, col);
System.out.println(value);
}
});
table.setFont(new Font("굴림", Font.PLAIN, 15));
scrollPane_2.setViewportView(table);
} // end initialize()
// contact 배열에 contact 인스턴스를 저장
private void insertContact() {
int ContactId = Integer.parseInt(txtIndex.getText());
String name = txtName.getText();
String phone = txtPhone.getText();
String email = txtEmail.getText();
ContactVO vo = new ContactVO(ContactId, name, phone, email);
int result = dao.insert(vo);
int size = ((ContactDAOImple) dao).getSize();
if(result == 1) {
txtAreaLog.setText("등록된 연락처 개수 : " + size + "\n"
+ "연락처 등록 완료!");
}
} // end insertContact
private void selectContact() {
int index = Integer.parseInt(txtIndex.getText());
int size = ((ContactDAOImple) dao).getSize();
if(index >= 0 && index < size) {
txtAreaInfo.setText(dao.select(index).toString());
} else {
txtAreaLog.setText("해당 인덱스에 연락처가 없습니다.");
}
} // end selectContact()
private void updateContact() {
int index = Integer.parseInt(txtIndex.getText());
int size = ((ContactDAOImple) dao).getSize();
if(index >= 0 && index < size) {
String name = txtName.getText();
String phone = txtPhone.getText();
String email = txtEmail.getText();
ContactVO vo = new ContactVO(index, name, phone, email);
int result = dao.update(index, vo);
if(result == 1) {
txtAreaLog.setText("연락처 수정 완료!");
}
} else {
txtAreaLog.setText("해당 인덱스에 연락처가 없습니다.");
}
} // end updateContact()
private void deleteContact() {
int index = Integer.parseInt(txtIndex.getText());
int size = ((ContactDAOImple) dao).getSize();
if(index >= 0 && index < size) {
int result = dao.delete(index);
txtAreaLog.setText("연락처 삭제 완료!");
} else {
txtAreaLog.setText("해당 인덱스에 연락처가 없습니다.");
}
} // deleteContact()
private void selectAllContact() {
int size = ((ContactDAOImple) dao).getSize();
ArrayList<ContactVO> list = dao.select();
StringBuffer buffer = new StringBuffer();
long startTime = System.currentTimeMillis();
for(int i = 0; i < size; i++) {
buffer.append("연락처[" + i + "] \n"
+ list.get(i) + "\n");
}
txtAreaInfo.setText(buffer.toString());
long endTime = System.currentTimeMillis();
System.out.println("걸린 시간 : " + (endTime - startTime ));
} // end selectAllContact()
private void selectAllContactTable() {
ArrayList<ContactVO> list = dao.select();
tableModel.setRowCount(0);
for(int i = 0; i < list.size(); i++) {
ContactVO vo = list.get(i);
records[0] = i;
records[1] = vo.getName();
records[2] = vo.getPhone();
records[3] = vo.getEmail();
tableModel.addRow(records);
}
} // end selectAllContactTable()
} // end ContactMain05
ContactVO
package edu.java.contact06;
import java.io.Serializable;
// 데이터 클래스(이름, 전화번호, 이메일)
public class ContactVO implements Serializable {
private int contactId;
private String name;
private String phone;
private String email;
public ContactVO() {
}
public ContactVO(int contactId, String name, String phone, String email) {
super();
this.contactId = contactId;
this.name = name;
this.phone = phone;
this.email = email;
}
public int getContactId() {
return contactId;
}
public void setContactId(int contactId) {
this.contactId = contactId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "ContactVO [contactId=" + contactId + ", name=" + name + ", phone=" + phone + ", email=" + email + "]";
}
}
OracleOuery
package edu.java.contact06;
public interface OracleQuery {
// Oracle DB 정보 인터페이스. DB 연결을 위한 상수. 사용자 정보
// 테이블 및 컬럼 정보. 쿼리 작성
// DB 연결을 위한 상수
public static final String URL =
"jdbc:oracle:thin:@localhost:1521:xe"; // 접속할 오라클 DB 경로
public static final String USER = "scott";
public static final String PASSWORD = "tiger";
public static final String TABLE_NAME = "EX_CONTACT";
public static final String COL_CONTACT_ID = "CONTACT_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE";
public static final String COL_EMAIL = "EMAIL";
}
'백엔드 교육과정 > 3월' 카테고리의 다른 글
2024.03.11_사이드 프로젝트_백엔드 부분 (0) | 2024.03.12 |
---|---|
2024.03.07_ 사이드 프로젝트 (0) | 2024.03.07 |
사이드 프로젝트 보강 (0) | 2024.03.06 |
2024.03.06_ 상품 관리, 구매 프로그램 (0) | 2024.03.06 |
사이드 프로젝트 명세서 작성하기 , MVC 구조 필기 (0) | 2024.03.05 |