VO/DTO
package CustomerAccount;
public class CustomerDTO {
private String id;
private String pwd;
private String name;
private String tel;
private String addr;
private String birth;
private String job ;
private String gender;
private String email;
private String intro;
//이클립스팁 : Getter/Setter 만들기
// 우클릭 -> source->Generate Getters And Setters-> [Select AlL] -> [OK]
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
//DTO 객체 확인
//이클립스팁 : toString() 자동생성: 우클릭 -> source -> Generate toString->[OK]
@Override
public String toString() {
return "CustomerDTO [id=" + id + ", pwd=" + pwd + ", name=" + name
+ ", tel=" + tel + ", addr=" + addr + ", birth=" + birth
+ ", job=" + job + ", gender=" + gender + ", email=" + email
+ ", intro=" + intro + "]";
}
}
Customer_List
package CustomerAccount;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import Main.CustomerProc;
public class Customer_List extends JFrame implements MouseListener,ActionListener{
Vector v;
Vector cols;
DefaultTableModel model;
JTable jTable;
JScrollPane pane;
JPanel pbtn;
JButton btnInsert;
public Customer_List(){
super("Wang 고객리스트");
//v=getCustomerList();
//CustomerDAO
CustomerDAO dao = new CustomerDAO();
v = dao.getCustomerList();
System.out.println("v="+v);
cols = getColumn();
//public DefaultTableModel()
//public DefaultTableModel(int rowCount, int columnCount)
//public DefaultTableModel(Vector columnNames, int rowCount)
//public DefaultTableModel(Object[] columnNames, int rowCount)
//public DefaultTableModel(Vector data,Vector columnNames)
//public DefaultTableModel(Object[][] data,Object[] columnNames)
model = new DefaultTableModel(v, cols);
//JTable()
//JTable(int numRows, int numColumns)
//JTable(Object[][] rowData, Object[] columnNames)
//JTable(TableModel dm)
//JTable(TableModel dm, TableColumnModel cm)
//JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
//JTable(Vector rowData, Vector columnNames)
//jTable = new JTable(v,cols);
jTable = new JTable(model);
pane = new JScrollPane(jTable);
add(pane);
pbtn = new JPanel();
btnInsert = new JButton("회원가입");
pbtn.add(btnInsert);
add(pbtn,BorderLayout.NORTH);
jTable.addMouseListener(this); //리스너 등록
btnInsert.addActionListener(this); //회원가입버튼 리스너 등록
setSize(600,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//end 생성자
//JTable의 컬럼
public Vector getColumn(){
Vector col = new Vector();
col.add("아이디");
col.add("비밀번호");
col.add("이름");
col.add("전화");
col.add("주소");
col.add("생일");
col.add("직업");
col.add("성별");
col.add("이메일");
col.add("자기소개");
return col;
}//getColumn
//Jtable 내용 갱신 메서드
public void jTableRefresh(){
CustomerDAO dao = new CustomerDAO();
DefaultTableModel model= new DefaultTableModel(dao.getCustomerList(), getColumn());
jTable.setModel(model);
}
public static void main(String[] args) {
new Customer_List();
}//main
@Override
public void mouseClicked(MouseEvent e) {
// mouseClicked 만 사용
int r = jTable.getSelectedRow();
String id = (String) jTable.getValueAt(r, 0);
//System.out.println("id="+id);
CustomerProc mem = new CustomerProc(id,this); //아이디를 인자로 수정창 생성
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
//버튼을 클릭하면
if(e.getSource() == btnInsert ){
new CustomerProc(this);
/*테스트*/
//dao = new CustomerDAO();
//dao.userSelectAll(model);
//model.fireTableDataChanged();
//jTable.updateUI();
//jTable.requestFocusInWindow();
}
}
}
DAO
package CustomerAccount;
//이름 규칙 : 테이블명DAO , 테이블명DTO
//CRUD : Create;insert , Read;Select, Update, delete
import java.sql.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//DB 처리
public class CustomerDAO {
private static final String DRIVER
= "oracle.jdbc.driver.OracleDriver";
private static final String URL
= "jdbc:oracle:thin:@localhost:1521:xe";
private static final String USER = "scott"; //DB ID
private static final String PASS = "tiger"; //DB 패스워드
Customer_List mList;
public CustomerDAO() {
}
public CustomerDAO(Customer_List mList){
this.mList = mList;
System.out.println("DAO=>"+mList);
}
/**DB연결 메소드*/
public Connection getConn(){
Connection con = null;
try {
Class.forName(DRIVER); //1. 드라이버 로딩
con = DriverManager.getConnection(URL,USER,PASS); //2. 드라이버 연결
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
/**한사람의 회원 정보를 얻는 메소드*/
public CustomerDTO getCustomerDTO(String id){
CustomerDTO dto = new CustomerDTO();
Connection con = null; //연결
PreparedStatement ps = null; //명령
ResultSet rs = null; //결과
try {
con = getConn();
String sql = "select * from tb_customer where id=?";
ps = con.prepareStatement(sql);
ps.setString(1, id);
rs = ps.executeQuery();
if(rs.next()){
dto.setId(rs.getString("id"));
dto.setPwd(rs.getString("Pwd"));
dto.setName(rs.getString("Name"));
dto.setTel(rs.getString("tel"));
dto.setAddr(rs.getString("addr"));
dto.setBirth(rs.getString("birth"));
dto.setJob(rs.getString("job"));
dto.setGender(rs.getString("gender"));
dto.setEmail(rs.getString("email"));
dto.setIntro(rs.getString("intro"));
}
} catch (Exception e) {
e.printStackTrace();
}
return dto;
}
/**멤버리스트 출력*/
public Vector getCustomerList(){
Vector data = new Vector(); //Jtable에 값을 쉽게 넣는 방법 1. 2차원배열 2. Vector 에 vector추가
Connection con = null; //연결
PreparedStatement ps = null; //명령
ResultSet rs = null; //결과
try{
con = getConn();
String sql = "select * from tb_customer order by name asc";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String tel = rs.getString("tel");
String addr = rs.getString("addr");
String birth = rs.getString("birth");
String gender = rs.getString("gender");
String job = rs.getString("job");
String email = rs.getString("email");
String intro = rs.getString("intro");
Vector row = new Vector();
row.add(id);
row.add(pwd);
row.add(name);
row.add(tel);
row.add(addr);
row.add(birth);
row.add(job);
row.add(gender);
row.add(email);
row.add(intro);
data.add(row);
}//while
}catch(Exception e){
e.printStackTrace();
}
return data;
}//getcustomerList()
/**회원 등록*/
public boolean insertCustomer(CustomerDTO dto){
boolean ok = false;
Connection con = null; //연결
PreparedStatement ps = null; //명령
try{
con = getConn();
String sql = "insert into tb_customer(" +
"id,pwd,name,tel,addr,birth," +
"job,gender,email,intro) "+
"values(?,?,?,?,?,?,?,?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, dto.getId());
ps.setString(2, dto.getPwd());
ps.setString(3, dto.getName());
ps.setString(4, dto.getTel());
ps.setString(5, dto.getAddr());
ps.setString(6, dto.getBirth());
ps.setString(7, dto.getJob());
ps.setString(8, dto.getGender());
ps.setString(9, dto.getEmail());
ps.setString(10, dto.getIntro());
int r = ps.executeUpdate(); //실행 -> 저장
if(r>0){
System.out.println("가입 성공");
ok=true;
}else{
System.out.println("가입 실패");
}
}catch(Exception e){
e.printStackTrace();
}
return ok;
}//insertMmeber
/**회원정보 수정*/
public boolean updateCustomer(CustomerDTO vCus){
System.out.println("dto="+vCus.toString());
boolean ok = false;
Connection con = null;
PreparedStatement ps = null;
try{
con = getConn();
String sql = "update tb_customer set name=?, tel=?, addr=?, birth=?, job=?, gender=?" +
", email=?,intro=? "+ "where id=? and pwd=?";
ps = con.prepareStatement(sql);
ps.setString(1, vCus.getName());
ps.setString(2, vCus.getTel());
ps.setString(3, vCus.getAddr());
ps.setString(4, vCus.getBirth());
ps.setString(5, vCus.getJob());
ps.setString(6, vCus.getGender());
ps.setString(7, vCus.getEmail());
ps.setString(8, vCus.getIntro());
ps.setString(9, vCus.getId());
ps.setString(10, vCus.getPwd());
int r = ps.executeUpdate(); //실행 -> 수정
// 1~n: 성공 , 0 : 실패
if(r>0) ok = true; //수정이 성공되면 ok값을 true로 변경
}catch(Exception e){
e.printStackTrace();
}
return ok;
}
/**회원정보 삭제 :
*tip: 실무에서는 회원정보를 Delete 하지 않고 탈퇴여부만 체크한다.*/
public boolean deleteCustomer(String id, String pwd){
boolean ok =false ;
Connection con =null;
PreparedStatement ps =null;
try {
con = getConn();
String sql = "delete from tb_customer where id=? and pwd=?";
ps = con.prepareStatement(sql);
ps.setString(1, id);
ps.setString(2, pwd);
int r = ps.executeUpdate(); // 실행 -> 삭제
if (r>0) ok=true; //삭제됨;
} catch (Exception e) {
System.out.println(e + "-> 오류발생");
}
return ok;
}
/**DB데이터 다시 불러오기*/
public void userSelectAll(DefaultTableModel model) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = getConn();
String sql = "select * from tb_customer order by name asc";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
// DefaultTableModel에 있는 데이터 지우기
for (int i = 0; i < model.getRowCount();) {
model.removeRow(0);
}
while (rs.next()) {
Object data[] = { rs.getString(1), rs.getString(2),
rs.getString(3), rs.getString(4),
rs.getString(5),
rs.getString(6),
rs.getString(7),
rs.getString(8),
rs.getString(9),
rs.getString(10)};
model.addRow(data);
}
} catch (SQLException e) {
System.out.println(e + "=> userSelectAll fail");
} finally{
if(rs!=null)
try {
rs.close();
} catch (SQLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
if(ps!=null)
try {
ps.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Main
package Main;
import java.awt.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import CustomerAccount.CustomerDAO;
import CustomerAccount.CustomerDTO;
import CustomerAccount.Customer_List;
import java.awt.event.*;
public class CustomerProc extends JFrame implements ActionListener {
JPanel p;
JTextField tfId, tfName, tfAddr, tfEmail;
JTextField tfTel1, tfTel2, tfTel3; //전화
JComboBox cbJob; //직업
JPasswordField pfPwd; //비밀번호
JTextField tfYear, tfMonth, tfDate; //생년월일
JRadioButton rbMan, rbWoman; //남, 여
JTextArea taIntro;
JButton btnInsert, btnCancel, btnUpdate,btnDelete; //가입, 취소, 수정 , 탈퇴 버튼
GridBagLayout gb;
GridBagConstraints gbc;
Customer_List mList ;
public CustomerProc(){ //가입용 생성자
createUI(); // UI작성해주는 메소드
btnUpdate.setEnabled(false);
btnUpdate.setVisible(false);
btnDelete.setEnabled(false);
btnDelete.setVisible(false);
}//생성자
public CustomerProc(Customer_List mList){ //가입용 생성자
createUI(); // UI작성해주는 메소드
btnUpdate.setEnabled(false);
btnUpdate.setVisible(false);
btnDelete.setEnabled(false);
btnDelete.setVisible(false);
this.mList = mList;
}//생성자
public CustomerProc(String id,Customer_List mList){ // 수정/삭제용 생성자
createUI();
btnInsert.setEnabled(false);
btnInsert.setVisible(false);
this.mList = mList;
System.out.println("id="+id);
CustomerDAO dao = new CustomerDAO();
CustomerDTO vCus = dao.getCustomerDTO(id);
viewData(vCus);
}//id를 가지고 생성
//CustomerDTO 의 회원 정보를 가지고 화면에 셋팅해주는 메소드
private void viewData(CustomerDTO vCus){
String id = vCus.getId();
String pwd = vCus.getPwd();
String name = vCus.getName();
String tel = vCus.getTel();
String addr = vCus.getAddr();
String birth = vCus.getBirth();
String job = vCus.getJob();
String gender = vCus.getGender();
String email= vCus.getEmail();
String intro = vCus.getIntro();
//화면에 세팅
tfId.setText(id);
tfId.setEditable(false); //편집 안되게
pfPwd.setText(""); //비밀번호는 안보여준다.
tfName.setText(name);
String[] tels = tel.split("-");
tfTel1.setText(tels[0]);
tfTel2.setText(tels[1]);
tfTel3.setText(tels[2]);
tfAddr.setText(addr);
tfYear.setText(birth.substring(0, 4));
tfMonth.setText(birth.substring(4, 6));
tfDate.setText(birth.substring(6, 8));
cbJob.setSelectedItem(job);
if(gender.equals("M")){
rbMan.setSelected(true);
}else if(gender.equals("W")){
rbWoman.setSelected(true);
}
tfEmail.setText(email);
taIntro.setText(intro);
}//viewData
private void createUI(){
this.setTitle("회원가입");
gb = new GridBagLayout();
setLayout(gb);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
//아이디
JLabel bId = new JLabel("아이디 : ");
tfId = new JTextField(20);
//그리드백에 붙이기
gbAdd(bId, 0, 0, 1, 1);
gbAdd(tfId, 1, 0, 3, 1);
//비밀번호
JLabel bPwd = new JLabel("비밀번호 : ");
pfPwd = new JPasswordField(20);
gbAdd(bPwd, 0, 1, 1, 1);
gbAdd(pfPwd, 1, 1, 3, 1);
//이름
JLabel bName = new JLabel("이름 :");
tfName = new JTextField(20);
gbAdd(bName,0,2,1,1);
gbAdd(tfName,1,2,3,1);
//전화
JLabel bTel = new JLabel("전화 :");
JPanel pTel = new JPanel(new FlowLayout(FlowLayout.LEFT));
tfTel1 = new JTextField(6);
tfTel2 = new JTextField(6);
tfTel3 = new JTextField(6);
pTel.add(tfTel1);
pTel.add(new JLabel(" - "));
pTel.add(tfTel2);
pTel.add(new JLabel(" - "));
pTel.add(tfTel3);
gbAdd(bTel, 0, 3, 1,1);
gbAdd(pTel, 1, 3, 3,1);
//주소
JLabel bAddr = new JLabel("주소: ");
tfAddr = new JTextField(20);
gbAdd(bAddr, 0,4,1,1);
gbAdd(tfAddr, 1, 4, 3,1);
//생일
JLabel bBirth= new JLabel("생일: ");
tfYear = new JTextField(6);
tfMonth = new JTextField(6);
tfDate = new JTextField(6);
JPanel pBirth = new JPanel(new FlowLayout(FlowLayout.LEFT));
pBirth.add(tfYear);
pBirth.add(new JLabel("/"));
pBirth.add(tfMonth);
pBirth.add(new JLabel("/"));
pBirth.add(tfDate);
gbAdd(bBirth, 0,5,1,1);
gbAdd(pBirth, 1, 5, 3,1);
//직업
JLabel bJob = new JLabel("직업 : ");
String[] arrJob = {"---", "학생", "직장인", "주부"};
cbJob = new JComboBox(arrJob);
JPanel pJob = new JPanel(new FlowLayout(FlowLayout.LEFT));
pJob.add(cbJob);
gbAdd(bJob, 0,6,1,1);
gbAdd(pJob,1,6,3,1);
//성별
JLabel bGender = new JLabel("성별 : ");
JPanel pGender = new JPanel(new FlowLayout(FlowLayout.LEFT));
rbMan = new JRadioButton("남",true);
rbWoman = new JRadioButton("여",true);
ButtonGroup group = new ButtonGroup();
group.add(rbMan);
group.add(rbWoman);
pGender.add(rbMan);
pGender.add(rbWoman);
gbAdd(bGender, 0,7,1,1);
gbAdd(pGender,1,7,3,1);
//이메일
JLabel bEmail = new JLabel("이메일 : ");
tfEmail = new JTextField(20);
gbAdd(bEmail, 0,8,1,1);
gbAdd(tfEmail,1,8,3,1);
//자기소개
JLabel bIntro = new JLabel("자기 소개: ");
taIntro = new JTextArea(5, 20); //행 : 열
JScrollPane pane = new JScrollPane(taIntro);
gbAdd(bIntro,0,9,1,1);
gbAdd(pane,1,9,3,1);
//버튼
JPanel pButton = new JPanel();
btnInsert = new JButton("가입");
btnUpdate = new JButton("수정");
btnDelete = new JButton("탈퇴");
btnCancel = new JButton("취소");
pButton.add(btnInsert);
pButton.add(btnUpdate);
pButton.add(btnDelete);
pButton.add(btnCancel);
gbAdd(pButton, 0, 10, 4, 1);
//버튼에 감지기를 붙이자
btnInsert.addActionListener(this);
btnUpdate.addActionListener(this);
btnCancel.addActionListener(this);
btnDelete.addActionListener(this);
setSize(350,500);
setVisible(true);
//setDefaultCloseOperation(EXIT_ON_CLOSE); //System.exit(0) //프로그램종료
setDefaultCloseOperation(DISPOSE_ON_CLOSE); //dispose(); //현재창만 닫는다.
}//createUI
//그리드백레이아웃에 붙이는 메소드
private void gbAdd(JComponent c, int x, int y, int w, int h){
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gb.setConstraints(c, gbc);
gbc.insets = new Insets(2, 2, 2, 2);
add(c, gbc);
}//gbAdd
public static void main(String[] args) {
new CustomerProc();
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == btnInsert){
insertCustomer();
System.out.println("insertCustomer() 호출 종료");
}else if(ae.getSource() == btnCancel){
this.dispose(); //창닫기 (현재창만 닫힘)
//system.exit(0)=> 내가 띄운 모든 창이 다 닫힘
}else if(ae.getSource() == btnUpdate){
UpdateCustomer();
}else if(ae.getSource() == btnDelete){
//int x = JOptionPane.showConfirmDialog(this,"정말 삭제하시겠습니까?");
int x = JOptionPane.showConfirmDialog(this,"정말 삭제하시겠습니까?","삭제",JOptionPane.YES_NO_OPTION);
if (x == JOptionPane.OK_OPTION){
deleteCustomer();
}else{
JOptionPane.showMessageDialog(this, "삭제를 취소하였습니다.");
}
}
//jTable내용 갱신 메소드 호출
mList.jTableRefresh();
}//actionPerformed
private void deleteCustomer() {
String id = tfId.getText();
String pwd = pfPwd.getText();
if(pwd.length()==0){ //길이가 0이면
JOptionPane.showMessageDialog(this, "비밀번호를 꼭 입력하세요!");
return; //메소드 끝
}
//System.out.println(mList);
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.deleteCustomer(id, pwd);
if(ok){
JOptionPane.showMessageDialog(this, "삭제완료");
dispose();
}else{
JOptionPane.showMessageDialog(this, "삭제실패");
}
}//deleteCustomer
private void UpdateCustomer() {
//1. 화면의 정보를 얻는다.
CustomerDTO dto = getViewData();
//2. 그정보로 DB를 수정
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.updateCustomer(dto);
if(ok){
JOptionPane.showMessageDialog(this, "수정되었습니다.");
this.dispose();
}else{
JOptionPane.showMessageDialog(this, "수정실패: 값을 확인하세요");
}
}
private void insertCustomer(){
//화면에서 사용자가 입력한 내용을 얻는다.
CustomerDTO dto = getViewData();
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.insertCustomer(dto);
if(ok){
JOptionPane.showMessageDialog(this, "가입이 완료되었습니다.");
dispose();
}else{
JOptionPane.showMessageDialog(this, "가입이 정상적으로 처리되지 않았습니다.");
}
}//insertCustomer
public CustomerDTO getViewData(){
//화면에서 사용자가 입력한 내용을 얻는다.
CustomerDTO dto = new CustomerDTO();
String id = tfId.getText();
String pwd = pfPwd.getText();
String name = tfName.getText();
String tel1 = tfTel1.getText();
String tel2 = tfTel2.getText();
String tel3 = tfTel3.getText();
String tel = tel1+"-"+tel2+"-"+tel3;
String addr = tfAddr.getText();
String birth1 = tfYear.getText();
String birth2 = tfMonth.getText();
String birth3 = tfDate.getText();
//String birth = birth1+"/"+birth2+"/"+birth3;
String birth = birth1+birth2+birth3;
String job = (String)cbJob.getSelectedItem();
String gender = "";
if(rbMan.isSelected()){
gender = "M";
}else if(rbWoman.isSelected()){
gender = "W";
}
String email = tfEmail.getText();
String intro = taIntro.getText();
//dto에 담는다.
dto.setId(id);
dto.setPwd(pwd);
dto.setName(name);
dto.setTel(tel);
dto.setAddr(addr);
dto.setBirth(birth);
dto.setJob(job);
dto.setGender(gender);
dto.setEmail(email);
dto.setIntro(intro);
return dto;
}
}//end
DB Connection
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBConnection {
public static Connection getConnection() {
Connection conn=null;
String url="jdbc:oracle:thin:@localhost:1521:xe";
String id="scott";
String pw="tiger";
String driver="oracle.jdbc.driver.OracleDriver";
try {
Class.forName(driver);
conn=DriverManager.getConnection(url, id, pw);
System.out.println("DB연결 완료");
}catch(Exception e) {
e.printStackTrace();
System.out.println("DB연결 실패");
}
return conn;
}
public static void close(Connection c, PreparedStatement p,
ResultSet r) {
try {
if(r!=null)r.close();
if(p!=null)p.close();
if(c!=null)c.close();
}catch(Exception e) {}
}
public static void close(Connection c, PreparedStatement p) {
try {
if(p!=null)p.close();
if(c!=null)c.close();
}catch(Exception e) {}
}
public static void main(String[] args) {
getConnection();
}
}
JoinFrame
package Main;
import java.awt.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import CustomerAccount.CustomerDAO;
import CustomerAccount.CustomerDTO;
import java.awt.event.*;
JoinFrame
public class JoinFrame extends JFrame implements ActionListener {
JPanel p;
JTextField tfId, tfName, tfAddr, tfEmail;
JTextField tfTel1, tfTel2, tfTel3; //전화
JComboBox cbJob; //직업
JPasswordField pfPwd; //비밀번호
JTextField tfYear, tfMonth, tfDate; //생년월일
JRadioButton rbMan, rbWoman; //남, 여
JTextArea taIntro;
JButton btnInsert, btnCancel, btnUpdate,btnDelete; //가입, 취소, 수정 , 탈퇴 버튼
GridBagLayout gb;
GridBagConstraints gbc;
Customer_List mList ;
public JoinFrame(){ //가입용 생성자
createUI(); // UI작성해주는 메소드
btnUpdate.setEnabled(false);
btnUpdate.setVisible(false);
btnDelete.setEnabled(false);
btnDelete.setVisible(false);
}//생성자
public JoinFrame(Customer_List mList){ //가입용 생성자
createUI(); // UI작성해주는 메소드
btnUpdate.setEnabled(false);
btnUpdate.setVisible(false);
btnDelete.setEnabled(false);
btnDelete.setVisible(false);
this.mList = mList;
}//생성자
public JoinFrame(String id,Customer_List mList){ // 수정/삭제용 생성자
createUI();
btnInsert.setEnabled(false);
btnInsert.setVisible(false);
this.mList = mList;
System.out.println("id="+id);
CustomerDAO dao = new CustomerDAO();
CustomerDTO vCus = dao.getCustomerDTO(id);
viewData(vCus);
}//id를 가지고 생성
//CustomerDTO 의 회원 정보를 가지고 화면에 셋팅해주는 메소드
private void viewData(CustomerDTO vCus){
String id = vCus.getId();
String pwd = vCus.getPwd();
String name = vCus.getName();
String tel = vCus.getTel();
String addr = vCus.getAddr();
String birth = vCus.getBirth();
String job = vCus.getJob();
String gender = vCus.getGender();
String email= vCus.getEmail();
String intro = vCus.getIntro();
//화면에 세팅
tfId.setText(id);
tfId.setEditable(false); //편집 안되게
pfPwd.setText(""); //비밀번호는 안보여준다.
tfName.setText(name);
String[] tels = tel.split("-");
tfTel1.setText(tels[0]);
tfTel2.setText(tels[1]);
tfTel3.setText(tels[2]);
tfAddr.setText(addr);
tfYear.setText(birth.substring(0, 4));
tfMonth.setText(birth.substring(4, 6));
tfDate.setText(birth.substring(6, 8));
cbJob.setSelectedItem(job);
if(gender.equals("M")){
rbMan.setSelected(true);
}else if(gender.equals("W")){
rbWoman.setSelected(true);
}
tfEmail.setText(email);
taIntro.setText(intro);
}//viewData
private void createUI(){
this.setTitle("회원가입");
gb = new GridBagLayout();
setLayout(gb);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
//아이디
JLabel bId = new JLabel("아이디 : ");
tfId = new JTextField(20);
//그리드백에 붙이기
gbAdd(bId, 0, 0, 1, 1);
gbAdd(tfId, 1, 0, 3, 1);
//비밀번호
JLabel bPwd = new JLabel("비밀번호 : ");
pfPwd = new JPasswordField(20);
gbAdd(bPwd, 0, 1, 1, 1);
gbAdd(pfPwd, 1, 1, 3, 1);
//이름
JLabel bName = new JLabel("이름 :");
tfName = new JTextField(20);
gbAdd(bName,0,2,1,1);
gbAdd(tfName,1,2,3,1);
//전화
JLabel bTel = new JLabel("전화 :");
JPanel pTel = new JPanel(new FlowLayout(FlowLayout.LEFT));
tfTel1 = new JTextField(6);
tfTel2 = new JTextField(6);
tfTel3 = new JTextField(6);
pTel.add(tfTel1);
pTel.add(new JLabel(" - "));
pTel.add(tfTel2);
pTel.add(new JLabel(" - "));
pTel.add(tfTel3);
gbAdd(bTel, 0, 3, 1,1);
gbAdd(pTel, 1, 3, 3,1);
//주소
JLabel bAddr = new JLabel("주소: ");
tfAddr = new JTextField(20);
gbAdd(bAddr, 0,4,1,1);
gbAdd(tfAddr, 1, 4, 3,1);
//생일
JLabel bBirth= new JLabel("생일: ");
tfYear = new JTextField(6);
tfMonth = new JTextField(6);
tfDate = new JTextField(6);
JPanel pBirth = new JPanel(new FlowLayout(FlowLayout.LEFT));
pBirth.add(tfYear);
pBirth.add(new JLabel("/"));
pBirth.add(tfMonth);
pBirth.add(new JLabel("/"));
pBirth.add(tfDate);
gbAdd(bBirth, 0,5,1,1);
gbAdd(pBirth, 1, 5, 3,1);
//직업
JLabel bJob = new JLabel("직업 : ");
String[] arrJob = {"---", "학생", "직장인", "주부"};
cbJob = new JComboBox(arrJob);
JPanel pJob = new JPanel(new FlowLayout(FlowLayout.LEFT));
pJob.add(cbJob);
gbAdd(bJob, 0,6,1,1);
gbAdd(pJob,1,6,3,1);
//성별
JLabel bGender = new JLabel("성별 : ");
JPanel pGender = new JPanel(new FlowLayout(FlowLayout.LEFT));
rbMan = new JRadioButton("남",true);
rbWoman = new JRadioButton("여",true);
ButtonGroup group = new ButtonGroup();
group.add(rbMan);
group.add(rbWoman);
pGender.add(rbMan);
pGender.add(rbWoman);
gbAdd(bGender, 0,7,1,1);
gbAdd(pGender,1,7,3,1);
//이메일
JLabel bEmail = new JLabel("이메일 : ");
tfEmail = new JTextField(20);
gbAdd(bEmail, 0,8,1,1);
gbAdd(tfEmail,1,8,3,1);
//자기소개
JLabel bIntro = new JLabel("자기 소개: ");
taIntro = new JTextArea(5, 20); //행 : 열
JScrollPane pane = new JScrollPane(taIntro);
gbAdd(bIntro,0,9,1,1);
gbAdd(pane,1,9,3,1);
//버튼
JPanel pButton = new JPanel();
btnInsert = new JButton("가입");
btnUpdate = new JButton("수정");
btnDelete = new JButton("탈퇴");
btnCancel = new JButton("취소");
pButton.add(btnInsert);
pButton.add(btnUpdate);
pButton.add(btnDelete);
pButton.add(btnCancel);
gbAdd(pButton, 0, 10, 4, 1);
//버튼에 감지기를 붙이자
btnInsert.addActionListener(this);
btnUpdate.addActionListener(this);
btnCancel.addActionListener(this);
btnDelete.addActionListener(this);
setSize(350,500);
setVisible(true);
//setDefaultCloseOperation(EXIT_ON_CLOSE); //System.exit(0) //프로그램종료
setDefaultCloseOperation(DISPOSE_ON_CLOSE); //dispose(); //현재창만 닫는다.
}//createUI
//그리드백레이아웃에 붙이는 메소드
private void gbAdd(JComponent c, int x, int y, int w, int h){
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gb.setConstraints(c, gbc);
gbc.insets = new Insets(2, 2, 2, 2);
add(c, gbc);
}//gbAdd
public static void main(String[] args) {
new JoinFrame();
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == btnInsert){
insertCustomer();
System.out.println("insertCustomer() 호출 종료");
}else if(ae.getSource() == btnCancel){
this.dispose(); //창닫기 (현재창만 닫힘)
//system.exit(0)=> 내가 띄운 모든 창이 다 닫힘
}else if(ae.getSource() == btnUpdate){
UpdateCustomer();
}else if(ae.getSource() == btnDelete){
//int x = JOptionPane.showConfirmDialog(this,"정말 삭제하시겠습니까?");
int x = JOptionPane.showConfirmDialog(this,"정말 삭제하시겠습니까?","삭제",JOptionPane.YES_NO_OPTION);
if (x == JOptionPane.OK_OPTION){
deleteCustomer();
}else{
JOptionPane.showMessageDialog(this, "삭제를 취소하였습니다.");
}
}
//jTable내용 갱신 메소드 호출
mList.jTableRefresh();
}//actionPerformed
private void deleteCustomer() {
String id = tfId.getText();
String pwd = pfPwd.getText();
if(pwd.length()==0){ //길이가 0이면
JOptionPane.showMessageDialog(this, "비밀번호를 꼭 입력하세요!");
return; //메소드 끝
}
//System.out.println(mList);
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.deleteCustomer(id, pwd);
if(ok){
JOptionPane.showMessageDialog(this, "삭제완료");
dispose();
}else{
JOptionPane.showMessageDialog(this, "삭제실패");
}
}//deleteCustomer
private void UpdateCustomer() {
//1. 화면의 정보를 얻는다.
CustomerDTO dto = getViewData();
//2. 그정보로 DB를 수정
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.updateCustomer(dto);
if(ok){
JOptionPane.showMessageDialog(this, "수정되었습니다.");
this.dispose();
}else{
JOptionPane.showMessageDialog(this, "수정실패: 값을 확인하세요");
}
}
private void insertCustomer(){
//화면에서 사용자가 입력한 내용을 얻는다.
CustomerDTO dto = getViewData();
CustomerDAO dao = new CustomerDAO();
boolean ok = dao.insertCustomer(dto);
if(ok){
JOptionPane.showMessageDialog(this, "가입이 완료되었습니다.");
dispose();
}else{
JOptionPane.showMessageDialog(this, "가입이 정상적으로 처리되지 않았습니다.");
}
}//insertCustomer
public CustomerDTO getViewData(){
//화면에서 사용자가 입력한 내용을 얻는다.
CustomerDTO dto = new CustomerDTO();
String id = tfId.getText();
String pwd = pfPwd.getText();
String name = tfName.getText();
String tel1 = tfTel1.getText();
String tel2 = tfTel2.getText();
String tel3 = tfTel3.getText();
String tel = tel1+"-"+tel2+"-"+tel3;
String addr = tfAddr.getText();
String birth1 = tfYear.getText();
String birth2 = tfMonth.getText();
String birth3 = tfDate.getText();
//String birth = birth1+"/"+birth2+"/"+birth3;
String birth = birth1+birth2+birth3;
String job = (String)cbJob.getSelectedItem();
String gender = "";
if(rbMan.isSelected()){
gender = "M";
}else if(rbWoman.isSelected()){
gender = "W";
}
String email = tfEmail.getText();
String intro = taIntro.getText();
//dto에 담는다.
dto.setId(id);
dto.setPwd(pwd);
dto.setName(name);
dto.setTel(tel);
dto.setAddr(addr);
dto.setBirth(birth);
dto.setJob(job);
dto.setGender(gender);
dto.setEmail(email);
dto.setIntro(intro);
return dto;
}
}//end
LoginFrame
package Main;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import CustomerAccount.CustomerDAO;
import DAO.CustomerDTO;
import DAO.CustomerLoginDao;
//import DAO.CustomerLoginDao;
public class LoginFrame extends JFrame {
private JPanel contentPane;
private JTextField tfId, tfPassword;
private JButton loginBtn, joinBtn;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LoginFrame frame = new LoginFrame();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public LoginFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblLogin = new JLabel("ID");
lblLogin.setBounds(41, 52, 69, 35);
contentPane.add(lblLogin);
JLabel lblPassword = new JLabel("Password");
lblPassword.setBounds(41, 103, 69, 35);
contentPane.add(lblPassword);
tfId = new JTextField();
tfId.setBounds(157, 52, 176, 35);
contentPane.add(tfId);
tfId.setColumns(10);
joinBtn = new JButton("회원가입");
joinBtn.setBounds(229, 154, 104, 29);
contentPane.add(joinBtn);
loginBtn = new JButton("로그인");
loginBtn.setBounds(108, 154, 106, 29);
contentPane.add(loginBtn);
tfPassword = new JTextField();
tfPassword.setColumns(10);
tfPassword.setBounds(157, 103, 176, 35);
contentPane.add(tfPassword);
setVisible(true);
//회원가입 액션
joinBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JoinFrame frame = new JoinFrame();
}
});
//로그인 액션
loginBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String id = tfId.getText();
String pwd = tfPassword.getText();
CustomerLoginDao dao = CustomerLoginDao.getInstance();
int result = dao.findByUsernameAndPassword(id, pwd);
if (result == 1) {
JOptionPane.showMessageDialog(null, "로그인 성공");
dispose();
} else {
JOptionPane.showMessageDialog(null, "로그인 실패");
// setVisible(false); // 기존의 로그인 화면 꺼주기
}
// 새로운 화면 구현
}
});
}
}
'PortFolio' 카테고리의 다른 글
Spring Framework 댓글 기능 구현하기 (0) | 2021.02.20 |
---|---|
Spring Framework 게시판 만들기 구현하기 (0) | 2021.02.20 |
자바 전화번호부 구현하기 (0) | 2021.02.20 |