반응형

JFrame을 이용하여 폼을 만든 후 Mysql DB에 접속하여 select, insert, delete 을 해보자!!



CustomerDBUse.java


package CustomerDB;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

import javax.print.attribute.standard.*;
import javax.swing.*;
import javax.swing.table.*;

public class CustomerDBUse extends JFrame implements ActionListener {

	JPanel panWest;
	JPanel panSouth;

	// 레이블과 텍스트 필드를 묶어서 panWest에 배치될 패널
	JPanel p1, p2, p3, p4;

	// 텍스트 필드
	JTextField txtName, txtEmail, txtTel;

	// 아래쪽의 버튼
	JButton btnTotal, btnAdd, btnDel, btnSearch, btnCancel;

	// 데이터를 출력할 테이블
	JTable table;

	// 누른 버튼의 이름을 기억하기 위한 상수 선언 및 변수 선언
	private static final int NONE = 0;
	private static final int ADD = 1;
	private static final int DELETE = 2;
	private static final int SEARCH = 3;
	private static final int TOTAL = 4;

	int cmd = NONE;

	// 데이터베이스 연결을 저장할 변수
	Connection con;

	// sql 수행을 위한 변수
	Statement stmt;
	PreparedStatement pstmtInsert;
	PreparedStatement pstmtDelete;

	// 데이터베이스 연결 클래스 이름과 위치 및 아이디와 패스워드 저장
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@211.183.0.100:1521:orcl";
	private String user = "user12";
	private String pwd = "user12";

	// 데이터베이스 접속하는 메서드

	private void dbConnect() {
		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url, user, pwd);
			stmt = con.createStatement();
			JOptionPane.showMessageDialog(this, "접속 성공");
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, e.getMessage());
		}

	}

	private String sqlInsert = "insert into customer2 values(id_sequence.nextval,?,?,?,sysdate)";

	private String sqlDelete = "delete from customer2 where name = ?";

	PreparedStatement pstmtTotal;
	private String sqlTotal = "select * from customer2";

	PreparedStatement pstmtSearch;
	private String sqlSearch = "select * from customer2 where name =?";

	// 생성자 - 화면 구성과 이벤트 연결
	public CustomerDBUse() {
		dbConnect();
		panWest = new JPanel(new GridLayout(5, 0));

		p1 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		p1.add(new JLabel("이 름"));
		p1.add(txtName = new JTextField(12));
		panWest.add(p1);

		p2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		p2.add(new JLabel("이 메 일"));
		p2.add(txtEmail = new JTextField(12));
		panWest.add(p2);

		p3 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		p3.add(new JLabel("전화번호"));
		p3.add(txtTel = new JTextField(12));
		panWest.add(p3);

		p4 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		p4.add(new JLabel(" "));
		panWest.add(p4);

		add(panWest, "West");

		panSouth = new JPanel();
		panSouth.add(btnTotal = new JButton("전체보기"));
		panSouth.add(btnAdd = new JButton("추 가"));
		panSouth.add(btnDel = new JButton("삭 제"));
		panSouth.add(btnSearch = new JButton("검 색"));
		panSouth.add(btnCancel = new JButton("취 소"));
		add(panSouth, "South");

		// 테이블을 생성해서 부착
		add(new JScrollPane(table = new JTable()), "Center");

		// 텍스트 필드를 사용할 수 없도록 설정
		txtEmail.setEditable(false);
		txtName.setEditable(false);
		txtTel.setEditable(false);

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setTitle("데이터베이스 연동");
		setBounds(100, 100, 500, 250);
		setVisible(true);

		btnAdd.addActionListener(this);
		btnTotal.addActionListener(this);
		btnDel.addActionListener(this);
		btnSearch.addActionListener(this);
		btnCancel.addActionListener(this);

		this.addWindowListener(new WindowAdapter() {

			public void windowClosing(WindowEvent e) {
				try {
					if (con != null) {
						con.close();
					}
				} catch (Exception e1) {

				}
			}
		});

	}

	// 사용자가 작업을 위해서 버튼을 처음 눌렀을 때 호출되서
	// 버튼의 활성화 여부를 설정하는 사용자 정의 메서드
	private void setButton(int command) {
		// 취소 버튼을 제외한 버튼 비 활성화
		btnTotal.setEnabled(false);
		btnAdd.setEnabled(false);
		btnCancel.setEnabled(false);
		btnDel.setEnabled(false);
		btnSearch.setEnabled(false);

		switch (command) {
		case ADD: {
			btnAdd.setEnabled(true);
			cmd = ADD;
			break;
		}
		case DELETE: {
			btnDel.setEnabled(true);
			cmd = DELETE;
			break;
		}
		case TOTAL: {
			btnTotal.setEnabled(true);
			cmd = TOTAL;
			break;
		}
		case SEARCH: {
			btnSearch.setEnabled(true);
			cmd = SEARCH;
			break;
		}
		case NONE: {
			btnTotal.setEnabled(true);
			btnAdd.setEnabled(true);
			btnCancel.setEnabled(true);
			btnDel.setEnabled(true);
			btnSearch.setEnabled(true);
			cmd = NONE;
			break;
		}
		default:
			break;
		}
	}

	private void setText(int command) {
		switch (command) {
		case ADD: {
			txtName.setEditable(true);
			txtEmail.setEditable(true);
			txtTel.setEditable(true);
			break;
		}
		case DELETE: {
			txtName.setEditable(true);
			txtEmail.setEditable(false);
			txtTel.setEditable(false);
			break;
		}
		case SEARCH: {
			txtName.setEditable(true);
			txtEmail.setEditable(false);
			txtTel.setEditable(false);
			break;
		}
		default:
			break;
		}
		setButton(command);
	}

	// 액션 리스너
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 자동 생성된 메소드 스텁

		Object obj = e.getSource();
		if (obj == btnTotal) {
			System.out.println("전체보기를 눌렀습니다.");
			setTitle("전체보기");
			totel();

		} else if (obj == btnAdd) {
			System.out.println("추가를 눌렀습니다.");
			if (cmd != ADD) {
				setText(ADD);
				return;
			}
			setTitle("데이터 추가");
			add();

		} else if (obj == btnCancel) {
			System.out.println("닫기를 눌렀습니다.");

		} else if (obj == btnSearch) {
			System.out.println("찾기를 눌렀습니다.");
			search();

		} else if (obj == btnDel) {
			System.out.println("삭제를 눌렀습니다.");
			if (cmd != DELETE) {
				setText(DELETE);
				return;
			}
			setTitle("데이터 삭제");
			delete();

		}
		setText(NONE);

	}

	private void search() {
		// TODO 자동 생성된 메소드 스텁
		try {

			// txtname에 이름이 없으면 메시지 박스를 출력하고 return
			String Strname = txtName.getText();
			if (Strname.trim().length() < 1) {
				JOptionPane.showMessageDialog(null, "이름 적어");
				return;
			}

			pstmtSearch = con.prepareStatement(sqlSearch);
			pstmtSearch.setString(1, Strname);

			String[] columnNames = { "번호", "이름", "이메일", "전화번호", "가입일" };

			// select 구문실행
			ResultSet rs = pstmtSearch.executeQuery();

			ArrayList> data_arr = new ArrayList>();

			if (rs.next()) {
				do {
					ArrayList imsi = new ArrayList();
					imsi.add(rs.getString("CUSTOMER_ID"));
					imsi.add(rs.getString("NAME"));
					imsi.add(rs.getString("EMAIL"));
					imsi.add(rs.getString("TAL"));
					imsi.add(rs.getString("JOIDATE"));
					data_arr.add(imsi);
				} while (rs.next());

				String[][] data = new String[data_arr.size()][5];

				for (int i = 0; i < data_arr.size(); i++) {
					ArrayList al = data_arr.get(i);
					for (int j = 0; j < 5; j++) {
						data[i][j] = al.get(j);
					}
				}

				// 테이블에 출력하기 위한 데이터 모델 생성
				DefaultTableModel model = new DefaultTableModel(data,
						columnNames);

				// 테이블 모델 적용
				table.setModel(model);
				// 테이블 갱신
				table.updateUI();
			} else {
				JOptionPane.showMessageDialog(null, "데이터 없음");
			}

			rs.close();

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage());
		} finally {

			try {
				if (pstmtSearch != null)
					pstmtSearch.close();
			} catch (SQLException e) {
				// TODO 자동 생성된 catch 블록
				e.printStackTrace();
			}

		}

	}

	// 모든 데이터를 보여주는 정의 메서드
	private void totel() {
		try {
			pstmtTotal = con.prepareStatement(sqlTotal);

			// select 구문 실행
			ResultSet rs = pstmtTotal.executeQuery();

			String[] columnNames = { "번호", "이름", "이메일", "전화번호", "가입일" };
			ArrayList> imsiData = new ArrayList>();

			if (rs.next()) {

				do {
					// 하나의 행 데이터를 저장할 가변 배열 생성
					ArrayList imsi = new ArrayList();
					imsi.add(rs.getString("CUSTOMER_ID"));
					imsi.add(rs.getString("NAME"));
					imsi.add(rs.getString("EMAIL"));
					imsi.add(rs.getString("TAL"));
					imsi.add(rs.getString("JOIDATE"));

					imsiData.add(imsi);

				} while (rs.next());

				// 테이블에 데이터를 출력하기 위해서
				// 테이버베이스에서 읽어온 데이터를 2차원 배열로 반환
				String[][] data = new String[imsiData.size()][5];
				for (int i = 0; i < imsiData.size(); i++) {
					ArrayList al = imsiData.get(i);
					for (int j = 0; j < 5; j++) {
						data[i][j] = al.get(j);
					}

				}

				// 테이블에 출력하기 위한 데이터 모델 생성
				DefaultTableModel model = new DefaultTableModel(data,
						columnNames);

				// 테이블 모델 적용
				table.setModel(model);
				// 테이블 갱신
				table.updateUI();
			} else {
				JOptionPane.showMessageDialog(null, "데이터가 없다");
			}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage());
		} finally {
			try {
				if (pstmtTotal != null)
					pstmtTotal.close();
			} catch (Exception e) {

			}
		}

	}

	// 데이터를 삭제하는 사용자 정의 메서드
	private void delete() {
		try {
			String strname = txtName.getText();
			if (strname.trim().length() < 1) {
				JOptionPane.showMessageDialog(null, "이름 필수 입력");
				return;
			}

			pstmtDelete = con.prepareStatement(sqlDelete);
			pstmtDelete.setString(1, strname);

			int result = pstmtDelete.executeUpdate();
			if (result > 0) {
				JOptionPane.showMessageDialog(null, "삭제 성공");
			} else {
				JOptionPane.showMessageDialog(null, "삭제할 이름 없음");
			}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage());
		} finally {
			try {
				if (pstmtDelete != null)
					pstmtDelete.close();
			} catch (Exception e) {

			}

		}
	}

	// 데이터를 추가하는 사용자 정의 메서드
	private void add() {
		try {
			// 유호성 검사 - txtname에 텍스트 확인
			String strname = txtName.getText();
			String strEmail = txtEmail.getText();
			String strTel = txtTel.getText();

			if (strname.trim().length() < 1) {
				JOptionPane.showMessageDialog(null, "이름 필수 입력");
				return;
			}
			// 삽입하는 sql 문장을 수행해 줄 Statement 생성
			pstmtInsert = con.prepareStatement(sqlInsert);
			pstmtInsert.setString(1, strname);
			pstmtInsert.setString(2, strEmail);
			pstmtInsert.setString(3, strTel);

			int result = pstmtInsert.executeUpdate();
			if (result > 0) {
				JOptionPane.showMessageDialog(null, "삽입 성공");
			} else {
				JOptionPane.showMessageDialog(null, "삽입 실패");
			}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage());
		} finally {
			try {
				if (pstmtInsert != null)
					pstmtInsert.close();
			} catch (Exception e) {

			}
		}
	}

}


Customer.java


package CustomerDB;

//customer 테이블의 데이터를 표현할 클래스
public class Customer {
	//변수명은 특별한 경우가 아니면 테이블의 컬럼 이름을 그래도 사용
	private String customer_id;
	private String name;
	private String email;
	private String tel;
	private String joidate;
	public Customer() {
		super();
		// TODO 자동 생성된 생성자 스텁
	}
	public Customer(String customer_id, String name, String email, String tel,
			String joidate) {
		super();
		this.customer_id = customer_id;
		this.name = name;
		this.email = email;
		this.tel = tel;
		this.joidate = joidate;
	}
	
	
	public String getCustomer_id() {
		return customer_id;
	}
	public void setCustomer_id(String customer_id) {
		this.customer_id = customer_id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getJoidate() {
		return joidate;
	}
	public void setJoidate(String joidate) {
		this.joidate = joidate;
	}
	@Override
	public String toString() {
		return "Customer [customer_id=" + customer_id + ", name=" + name
				+ ", email=" + email + ", tel=" + tel + ", joidate=" + joidate
				+ "]";
	}
	
	//디버깅을 위한 메서드
	
}


Main.java


package CustomerDB;

public class Main {

	public static void main(String[] args) {
		// TODO 자동 생성된 메소드 스텁
		
		//new CustomerDBUse();
		//new CopyOfCustomerDBUse_1();
		
		new CopyOfCustomerDBUse_hachmap();
	}

}


'JAVA > Java' 카테고리의 다른 글

java String Calss  (0) 2015.03.18
[JAVA] SocketServer  (0) 2014.11.18
[JAVA] Mysql DB 접속하기(Connect)  (0) 2014.11.18
[JAVA] Oracle DB 접속 후 Insert,select 하기  (0) 2014.11.18
[JAVA] oracle DB 접속하기  (0) 2014.11.18

+ Recent posts