[ JDBC 목차 ]
1. 환경설정
1) Oracle SCOTT 계정 활성화
2) Eclipse에 JDBC 설정
2. JDBC 프로그램 작성하기
1) Statement 활용
2) PreparedStatement 활용
3) Timestamp 활용
4) Swing 활용
[ 1 ] 환경 설정 (skip!!)
1. Oracle SCOTT 계정 활성화
C:\Temp> SQLPLUS SYSTEM/SYS
SQL> @C:\TEMP\SCOTT.SQL
SQL> CONN SCOTT/TIGER
SQL> SELECT * FROM TAB;
SQL> QUIT;
Rem Copyright (c) 1990 by Oracle Corporation
Rem NAME
REM UTLSAMPL.SQL
Rem FUNCTION
Rem NOTES
Rem MODIFIED
Rem gdudey 06/28/95 - Modified for desktop seed database
Rem glumpkin 10/21/92 - Renamed from SQLBLD.SQL
Rem blinden 07/27/92 - Added primary and foreign keys to EMP and DEPT
Rem rlim 04/29/91 - change char to varchar2
Rem mmoore 04/08/91 - use unlimited tablespace priv
Rem pritto 04/04/91 - change SYSDATE to 13-JUL-87
Rem Mendels 12/07/90 - bug 30123;add to_date calls so language independent
Rem
rem
rem $Header: utlsampl.sql 7020100.1 94/09/23 22:14:24 cli Generic<base> $ sqlbld.sql
rem
SET TERMOUT OFF
SET ECHO OFF
rem CONGDON Invoked in RDBMS at build time. 29-DEC-1988
rem OATES: Created: 16-Feb-83
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER;
ALTER USER SCOTT DEFAULT TABLESPACE USERS;
ALTER USER SCOTT TEMPORARY TABLESPACE TEMP;
CONNECT SCOTT/TIGER
DROP TABLE DEPT;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-7-1987','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-7-1987','dd-mm-yyyy'),1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
DROP TABLE BONUS;
CREATE TABLE BONUS
(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;
DROP TABLE SALGRADE;
CREATE TABLE SALGRADE
( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;
SET TERMOUT ON
SET ECHO ON
2. Eclipse에 JDBC 설정
- 오라클용 JDBC Driver 파일 (ojdbc7.jar)을 자바 설치 위치
(C:\Program Files\Java\jre1.8.0_45\lib\ext)로 복사한다.
- 이클립스에서 오라클 데이터베이스 연동 설정
: 이클립스의 Project Explorer 화면에서 JRE System Library에 오른 마우스 클릭하여 추가한다.
- 이클립스 재구동
- 간단한 자바-오라클 연동 파일을 작성한 후 테스트 해본다.
- 만약 데이터베이스 연결 실패 메세지가 나올때에는
C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 폴더 안에 있는
listener.ora, tnsnames.ora 파일의 Host=컴퓨터 이름, Port=1521 등을 점검한다.
* 이 파트는 자바 이클립스에서 데이터를 넣으면 오라클 Oracle SQL Developer에
데이터가 추가되게끔 연동시키는 것이다.
[ JDBC 로딩 테스트 ]
package sec01.exam01_jdbc;
import java.sql.*;
public class JDBC_Connect01 {
public static void main(String[] args) {
/** ORACLE JDBC Driver Test ***************************/
String driver = "oracle.jdbc.driver.OracleDriver";
/******************************************************/
/** My-SQL JDBC Driver Test **************************/
// String driver ="com.mysql.jdbc.Driver";
/*****************************************************/
try {
Class.forName(driver);
System.out.println("JDBC Driver Loading 성공~!!");
} catch (Exception e) {
System.out.println("JDBC Driver Loading 실패~!!");
e.printStackTrace();
}
}
}
[ JDBC 접속 테스트 ]
package sec01.exam01_jdbc;
import java.sql.*;
public class JDBC_Connect02 {
public static void main(String[] args) {
/** ORACLE JDBC Driver Test *****************************************/
String driver = "oracle.jdbc.driver.OracleDriver";
// String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
// jdbc:oracle:thin:@localhost:1521:XE 란,
// 오라클에 접속할 수 있는 커넥션 정보
// 데이터베이스 서버이름 : localhost
// 객체 이름..? : XE
/*******************************************************************/
/** My-SQL JDBC Driver *********************************************/
// String driver ="com.mysql.jdbc.Driver";
// String url = "jdbc:mysql://localhost/academy";
/*******************************************************************/
Connection con = null;
try {
// driver 를 메모리에 올린다.
Class.forName(driver);
/** ORACLE에서 Connection 객체 ***********************************/
con = DriverManager.getConnection(url, "SCOTT", "TIGER");
// url 하고 userid랑 password를 가지고 오라클 driver를 이용해서 커넥션을 한다.
// 패스워드를 TIGER대신 이상한 값 "TIGER1" 를 넣어주면 커넥션이 안되기 때문에
// 데이터베이스 연결 실패 가 출력된다.
/*******************************************************************/
/** My-SQL에서 Connection 객체 ***********************************/
// con = DriverManager.getConnection(url, "totoro", "1234" );
/*******************************************************************/
System.out.println("데이터베이스 연결 성공~!!");
} catch (Exception e) {
System.out.println("데이터베이스 연결 실패~!!");
e.printStackTrace();
} finally {
try {
if (con != null)
con.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
[ 2 ] JDBC 프로그램 작성하기
1. Statement 활용
- SQL문을 실행하기 위해서는 Statement 클래스를 이용한다. 주요 메소드는 다음과 같다.
메서드 | 설명 |
ResultSet executeQuery(String sql) | 주어진 SQL문(SELECT)을 실행하고 결과는 ResultSet 객체에 반환 |
int executeUpdate(String sql) | INSERT, UPDATE, 또는 DELETE과 같은 SQL문을 실행하고, SQL문 실행으로 영향 을 받은 행의 개수나 0을 반환 |
void close() | Statement 객체의 데이터베이스와 JDBC 리소스를 즉시 반환 |
* 먼저 다음의 사진에서 있는 CUSTOMER .SQL 파일(?)에 있는 CUSTOMER 테이블 만드는 코드를
Oracle SQL Developer에 가져다 CUSTOMER 테이블을 만든다!
[ 자바 이클립스의 콘솔창에서 데이터 입력하여 Oracle SQL Developer에 INSERT하는 구문 ]
package sec02.exam01_statement;
import java.sql.*;
import java.io.*; // 도스 콘솔 창에서 사용자 입력을 받아들이기 위해 BufferedReader
class JDBC_Insert_org{
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection con = null;
Statement stmt = null;
// ResultSet rs = null;
String sql;
String name, email, tel, no ;
try{
// 1. jdbc driver를 JVM 로딩 시킨다.
Class.forName(driver);
// 2. Connection 객체를 얻는다.
con = DriverManager.getConnection(url, "SCOTT", "TIGER" );
stmt= con.createStatement();
// createStatement 메서드로 Statement 객체 stmt의 값을 얻는다.
//---JDBC_Insert 추가된 내용-------
// 테이블에 추가할 내용을 도스 콘솔 창에서 사용자의 입력을 받도록 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(" customer 테이블에 값 입력하기 .....");
System.out.print(" 번호 입력: ");
no = br.readLine();
System.out.print(" 이름 입력: ");
name = br.readLine(); //테이블에 추가할 name 필드 값을 입력 받음
System.out.print(" 이메일 입력: ");
email = br.readLine(); //테이블에 추가할 email 필드 값을 입력 받음
System.out.print(" 전화번호 입력: ");
tel = br.readLine(); //테이블에 추가할 tel 필드 값을 입력 받음
// INSERT 쿼리문을 작성
sql = "INSERT into customer(no, name, email, tel) values " ;
sql += "(" + no + ",'" + name +"','" + email +"','"+ tel +"')" ;
//Statement 객체의 executeUpdate(sql) 메서드를 이용해 INSERT 시킨다.
int res = stmt.executeUpdate(sql) ; //데이터베이스 파일에 새로운 값을 추가시킴
// executeUpdate 함수는 매개변수로 받는 문장을 실행시키는 메서드이다.
if(res == 1){
System.out.println(" Data insert success!! ");
}else{
System.out.println(" Data insert failed ");
}
}
catch(Exception e){
System.out.println("데이터베이스 연결 실패!");
}
finally{
try{
// if( rs != null ) rs.close();
if( stmt != null ) stmt.close();
if( con != null ) con.close();
}
catch(Exception e){
System.out.println( e.getMessage());
}
}
}
}
* OracleDB에서 CUSTOMER 테이블 만들고 이클립스에서 데이터값 콘솔창에서 입력해주고
OracleDB에서 그 테이블에 데이터가 잘 입력 되었는지 SELECT 코드로 실행해서 출력해본 결과
위의 사진과 같이 나왔다.
[ 자바 이클립스에 데이터 입력하여 Oracle SQL Developer에 INSERT하는 구문 (코드 따라 치면서 흐름 익히기,,) ]
package sec02.exam01_statement;
//import java.sql.Connection;
//import java.sql.DriverManager;
//import java.sql.SQLException;
//import java.sql.Statement;
import java.sql.*;
public class JDBC_Insert {
public static void main(String[] args) {
// 자바에서 오라클DB에 접근하려면 JDBC가 무조건 있어야한다.
// 1. 프로젝트에 ojdbc7.jar 라이브러리를 포함시킨다.
String driver = "oracle.jdbc.driver.OracleDriver";
// driver에 들어가는건 ojdbc7(외부에서 만들어진 패키지)에 들어있는
// 클래스들을 넣어주는 것이다.
// 위에서는 oracle.jdbc.driver(외부에서 만들어진) 패키지에 있는
// OracleDriver라는 클래스를 지금 driver에 넣은 것이다.
String url = "jdbc:oracle:thin:@localhost:1521:XE"; // 오라클에 접속할 때 이러한 형태의 url로 접속한다.
String sql;
Connection con = null; // import java.sql.Connection; 해줘야한다.
Statement stmt = null; // import java.sql.Statement;
// 2. OracleDriver 클래스를 JVM에 로드시킨다. Class.forName(...)
try {
Class.forName(driver); // driver에 담겨있는 클래스를 메모리에 올릴 수 있는지 확인하는 구문
// driver 내용이 잘못 들어올 수가 있기 때문에 예외가 발생가능한 코드이다
// --> try-catch로 예외 처리해줘야함
System.out.println("JDBC Driver Loading 성공!!");
// 3. java.sql.DriverManager.getConnection()로 Connection 객체를 생성한다.
con = DriverManager.getConnection(url, "SCOTT", "TIGER");
// driver로 데이터베이스에 접속을 하면 con 객체가 생긴다. 그러면 url과 user_name과 패스워드로 접속을 시도한다.
System.out.println("데이터베이스 연결 성공!!");
// 4. Connection객체에서 createStatement()메서드로 Statement객체를 얻는다.
stmt = con.createStatement();
sql = "INSERT INTO CUSTOMER(NO, NAME, EMAIL, TEL) VALUES ";
sql += "(2, '유재석', 'js@naver.com', '010-4433-6655')";
// ( ) 안에서 문자열('유재석'이나 'js@naver.com' 등의 문자열)을 '' 로 한 이유는
// 걔네들은 oracleDB에서 데이터로 들어가는 애들이라 거기서는 문자를 ''로 인식하기 때문에 그렇게 적어준것이다.
// 5. Statement.executeUpdate() 메서드로 매개변수로 들어오는 sql 문장을 실행한다.
// Statement 객체에 있는 executeUpdate 메서드에 실행할 문장을 넣는다.
// executeQuery() 메서드 : SELECT 할 때 사용하는 메서드
int res = stmt.executeUpdate(sql); // stmt.executeUpdate(sql)는 1 리턴 <-- 데이터값을 하나 넣어줬기 때문에 1리턴
if(res==1) {
System.out.println("데이터 입력 성공!!");
} else {
System.out.println("데이터 입력 실패..");
}
} catch (Exception e) {
System.out.println("JDBC Driver Loading 실패..");
e.printStackTrace();
} finally {
try {
// 6. statement.close(), Connecton.close();
stmt.close();
con.close(); // 이 코드에서 예외가 발생할 수도 있어서 try-catch 로 예외 잡아줘야한다.
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
* OracleDB에서 CUSTOMER 테이블 만들고 이클립스에서 데이터값 콘솔창에서 입력해주고
OracleDB에서 그 테이블에 데이터가 잘 입력 되었는지 코드 실행해서 출력해본 결과
위의 사진과 같이 나왔다.
[ Oracle SQL Developer에서 테이블 CUSTOMER를 SELECT해서 자바 이클립스에 SELECT된 데이터를 출력하는 구문 ]
package sec02.exam01_statement;
import java.sql.*;
class JDBC_Select_org{
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection con = null;
Statement stmt = null;
//---JDBC_Select 추가된 내용 -------
ResultSet rs = null;
int no = 0;
String name, email, tel; //데이터베이스에서 얻어온 필드값 저장할 변수 선언
String sql; //SQL문을 저장할 변수 선언
try{
// 1. jdbc 라이브러리를 로딩한다.
Class.forName(driver);
// 2. Connection 객체를 얻는다.
con = DriverManager.getConnection(url, "SCOTT", "TIGER" );
// 3. Statement 객체를 얻는다.
stmt= con.createStatement();
//---JDBC_Select 추가된 내용 -------
sql = "SELECT * FROM customer";
System.out.printf("번호 \t 이름 \t\t 이메일 \t\t 전화번호 \n");
System.out.printf("-----------------------------------------------------------------\n");
// 4. ResultSet rs = stmt.executeQuery() 메서드로 SELECT문을 수행한다.
// int res = stmt.executeUpdate() 메서드로 INSERT / UPDATE / DELETE문을 수행한다.
// int res에는 추가된 데이터의 개수가 담아진다.
// ResultSet 는 테이블의 하나의 ROW 형태의 데이터타입으로
// ResultSet rs에는 추가되는 데이터값들이 테이블에 있는 하나의 ROW 형태로 담겨진다.
rs = stmt.executeQuery(sql); //얻어진 레코드를 가져옴
while( rs.next() ){
no = rs.getInt("no");
name = rs.getString("name");
email = rs.getString("email");
tel = rs.getString("tel");
System.out.printf(" %d \t %s \t %s \t %s\n", no, name,email,tel);
}
}
catch(Exception e){
System.out.println("데이터베이스 연결 실패!");
}
finally{
try{//rs, stmt, con 객체를 close() 메서드를 호출해 해제
if( rs != null ) rs.close();
if( stmt != null ) stmt.close();
if( con != null ) con.close();
}
catch(Exception e){
System.out.println( e.getMessage( ));
}
}
}
}
2. PreparedStatement 활용
[ PreparedStatement 활용 ]
package sec02.exam02_prestatement;
import java.io.BufferedReader; // 도스 콘솔 창에서 사용자 입력을 받아들이기 위해 BufferedReader
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
class JDBC_Insert01 {
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:MYORACLE";
Connection con = null;
PreparedStatement pstmt = null;
//ResultSet rs = null;
String sql;
String name, email, tel, no;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, "SCOTT", "TIGER");
// ---JDBC_Insert 추가된 내용-------
// 테이블에 추가할 내용을 도스 콘솔 창에서 사용자의 입력을 받도록 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
System.out.println(" customer 테이블에 값 입력하기 .....");
System.out.print(" 번호 입력: ");
no = br.readLine();
System.out.print(" 이름 입력: ");
name = br.readLine(); // 테이블에 추가할 name 필드 값을 입력 받음
System.out.print(" 이메일 입력: ");
email = br.readLine(); // 테이블에 추가할 email 필드 값을 입력 받음
System.out.print(" 전화번호 입력: ");
tel = br.readLine(); // 테이블에 추가할 tel 필드 값을 입력 받음
int ino = Integer.parseInt(no);
// INSERT 쿼리문을 작성
sql = "INSERT into customer (no, name, email, tel) values (?, ?, ?, ?)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, ino);
pstmt.setString(2, name);
pstmt.setString(3, email);
pstmt.setString(4, tel);
int result=pstmt.executeUpdate();
if(result == 1){
System.out.println("데이터 입력 성공");
}else{
System.out.println("데이터 입력 실패");
}
} catch (Exception e) {
System.out.println("데이터베이스 연결 실패!");
} finally {
try {
// if (rs != null)
// rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
[꿀팁] 저장 프로시저 실행 방법
- Stored Procedure(저장 프로시저)
: 데이터베이스 내에 프로시저를 선언하여 클라이언트가 필요할 때마다 호출하여 사용하는 프로시저,
이것은 클라이언트에서 SQL 문을 실행하는 것과 달리 데이타베이스쪽에서 프로시저로 존재하는 것이기 때문에,
클라이언트에서 저장된 프로시저를 실행만 해주면 그 프로시저 내용이 바로 처리되므로
실행 속도 또한 더 빠르며, 부하가 적다는 장점이 있다.
- CallableStatement 객체 : Stored Procedure(저장된 프로시저)를 호출하기 위해 존재하는 객체로
PreparedStatement 객체를 상속받아 사용한다.
• setXXX() 메소드 : PreparedStatement 객체를 사용할 때와 똑같이 사용 가능하다.
• registerOutParameter() 메소드 : 프로시저에서 넘어오는 값을 반환받기 위해서는 꼭 사용 해야 한다.
registerOutParameter() 메소드는 프로시저로부터 넘어오는 값의 타입을 지정해주는 역활을 한다.
• execute() 메소드 : CallableStatement 객체를 실행시킨다.
// CallableStatement 객체 활용
// ....
conn = ds.getConnection();
CallableStatement cs = conn.prepareCall("{call procedure_name(?,?,?)}");
cs.setInt(1,1);
cs.setString(2,"홍길동");
cs.registerOutParameter(3,java.sql.Types.VARCHAR);
cs.execute();
out.println("<h3>"+cs.getString(3)+"</h3>");
cs.close();
3. Timestamp 활용
[ Timestamp 활용 ]
package sec02.exam02_timestamp;
import java.io.BufferedReader; // 도스 콘솔 창에서 사용자 입력을 받아들이기 위해 BufferedReader
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
class JDBC_Insert02{
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:MYORACLE";
Connection con = null;
PreparedStatement pstmt = null;
// ResultSet rs = null;
String sql;
String name, email, tel, no, address;
try{
Class.forName(driver);
con = DriverManager.getConnection(url, "SCOTT", "TIGER" );
//---JDBC_Insert 추가된 내용-------
// 테이블에 추가할 내용을 도스 콘솔 창에서 사용자의 입력을 받도록 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(" customer 테이블에 값 입력하기 .....");
System.out.print(" 번호 입력: ");
no = br.readLine().trim();
System.out.print(" 이름 입력: ");
name = br.readLine().trim(); //테이블에 추가할 name 필드 값을 입력 받음
System.out.print(" 이메일 입력: ");
email = br.readLine().trim(); //테이블에 추가할 email 필드 값을 입력 받음
System.out.print(" 전화번호 입력: ");
tel = br.readLine().trim(); //테이블에 추가할 tel 필드 값을 입력 받음
System.out.println("주소를 입력 하세요?");
address = br.readLine().trim();
int ino = Integer.parseInt(no);
Timestamp ts = new Timestamp(System.currentTimeMillis());
// INSERT 쿼리문을 작성
sql = "INSERT into customer (no, name, email, tel, address, reg_date) values (?, ?, ?, ?,?,?)";
pstmt = con.prepareStatement( sql );
pstmt.setInt(1, ino);
pstmt.setString(2, name);
pstmt.setString(3, email);
pstmt.setString(4, tel);
pstmt.setString(5, address);
pstmt.setTimestamp(6, ts);
int result=pstmt.executeUpdate();
if(result == 1){
System.out.println(" Data insert success!! ");
}else{
System.out.println(" Data insert failed ");
}
} catch(Exception e){
System.out.println("데이터베이스 연결 실패!");
} finally{
try{
// if( rs != null ) rs.close();
if( pstmt != null ) pstmt.close();
if( con != null ) con.close();
} catch(Exception e){
System.out.println( e.getMessage());
}
}
}
}
4. Swing 활용
package sec02.exam03_swing;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class InsertMember extends JFrame implements ActionListener {
Connection con;
PreparedStatement pstmt;
Timestamp reg_date;
private String names[] = { "아이디", "비밀번호", "비밀번호 재입력", "이름" };
private JLabel labels[];
private JTextField fields[];
private JButton register, cancle, reWrite;
private JPanel panelCenter, panelSouth;
private int size = 4;
public InsertMember() {
super("회원등록");
labels = new JLabel[size];
fields = new JTextField[size];
for (int i = 0; i < labels.length; i++)
labels[i] = new JLabel(names[i]);
for (int i = 0; i < fields.length; i++)
fields[i] = new JTextField();
panelCenter = new JPanel();
panelCenter.setLayout(new GridLayout(size, 2));
for (int i = 0; i < size; i++) {
panelCenter.add(labels[i]);
panelCenter.add(fields[i]);
}
register = new JButton("회원등록");
cancle = new JButton("종료");
reWrite = new JButton("다시작성");
panelSouth = new JPanel();
panelSouth.add(register);
panelSouth.add(cancle);
panelSouth.add(reWrite);
add(panelCenter, "Center");
add(panelSouth, "South");
setBounds(300, 300, 300, 250);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
register.addActionListener(this);
cancle.addActionListener(this);
reWrite.addActionListener(this);
}// 생성자 end
// Database 연결 부분
public void dbConnect() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
System.out.println("드라이버 로딩에 실패");
}
try {
String url = "jdbc:oracle:thin:@localhost:1521:MYORACLE";
String userId = "SCOTT";
String userPass = "TIGER";
con = DriverManager.getConnection(url, userId, userPass);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("커넥션 설정에 실패");
}
}
// Event 처리 부분
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == register) { // 회원 등록
dbConnect();
insertMember();
clearFields();
} else if (ae.getSource() == cancle) { // 종료
System.exit(0);
} else if (ae.getSource() == reWrite) { // 다시작성
clearFields();
}
}
// 회원 가입 처리 부분
public void insertMember() {
Timestamp reg_date = new Timestamp(System.currentTimeMillis());
String data[] = getFieldValues();
// if(data[0].equals("") || data[1].equals("") || data[2].equals("") ||
// data[3].equals("")){
if (fields[0].getText().equals("") || fields[1].getText().equals("") ||
fields[2].getText().equals("")
|| fields[3].getText().equals("")) {
JOptionPane.showMessageDialog(this, "모든 정보를 입력 하세요!");
} else if (fields[1].getText().equals(fields[2].getText())) {
// }else if(data[1].equals(data[2])){ //비밀 번호가 일치하면 query문 실행
String sql = "insert into mem02 values(?,?,?,?)";
try {
pstmt = con.prepareStatement(sql);
// pstmt.setString(1,data[0]); //아이디
// pstmt.setString(2,data[1]); //비밀번호
// pstmt.setString(3,data[3]); //이름
pstmt.setString(1, fields[0].getText()); // 아이디
pstmt.setString(2, fields[1].getText()); // 비밀번호
pstmt.setString(3, fields[3].getText()); // 이름
pstmt.setTimestamp(4, reg_date); // 회원가입 날짜
int result = pstmt.executeUpdate();
if (result == 1) {
JOptionPane.showMessageDialog(this, "회원 가입 완료");
// this.dispose();
MemberManagement management = new MemberManagement();
} else {
JOptionPane.showMessageDialog(this, "회원 가입 실패");
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("새로운 레코드 추가에 실패");
}
} else { // 비밀 번호가 일치하지 않으면 메시지 박스
JOptionPane.showMessageDialog(this, "비밀번호가 일치하지 않습니다.");
}
}
// 다시 작성 처리 부분
public void clearFields() {
for (int i = 0; i < size; i++) {
fields[i].setText("");
}
}
// 입력한 회원 정보값을 구하는 부분
public String[] getFieldValues() {
String values[] = new String[size];
for (int i = 0; i < size; i++)
values[i] = fields[i].getText();
return values;
}
public static void main(String[] args) {
InsertMember insert = new InsertMember();
}
}
'Java' 카테고리의 다른 글
[Log]로그 레벨 (0) | 2024.07.12 |
---|---|
[Log]로그 vs 로깅 (0) | 2024.07.05 |
[정보처리기사]21년도_3회차_연산자 (0) | 2023.07.21 |
[정보처리기사]20년도_4회차_오버라이딩 (0) | 2023.07.21 |
참조 타입 (0) | 2022.12.09 |