Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

기록

day 0607 데이터베이스 연결 프로그래밍 수정_삭제 본문

📖

day 0607 데이터베이스 연결 프로그래밍 수정_삭제

슈슈파나 2024. 6. 7. 17:50

<< 레코드(데이터베이스) 수정하는 명령어 >>

 

update 테이블명 set 컬럼1 = 값1, 컬럼2 = 값2, .. ;

 

예) 모든 학생의 국어, 영어점수 수정

update student set kor = 100, eng = 50;

 

commit; 작업저장

rollback; 작업취소

 

예) 학생의 국어점수 95점으로 변경

update student set kor = 95 where name = '학생';

 

데이터베이스에 변경이 있는 명령(insert, update, delete)을 실행한 후에는

반드시 commit, rollback을 해야 합니다

btnAddUpdate.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        name = jtf_name.getText();
        kor = Integer.parseInt(jtf_kor.getText());
        eng = Integer.parseInt(jtf_eng.getText());
        math = Integer.parseInt(jtf_math.getText());

        String sql = "update student set kor="+kor+",eng="+eng+",math="+math+" where name = '"+name+"'";

        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
            stmt = conn.createStatement();

            int re = stmt.executeUpdate(sql);

            if(re > 0) {
                JOptionPane.showMessageDialog(null, "학생 정보를 수정하였습니다.");
                loadStudent();
            }else {
                JOptionPane.showMessageDialog(null, "학생 정보 수정에 실패하였습니다.");
            }
        }catch(Exception ex){
            System.out.println("예외발생 : " + ex.getMessage());
        }finally {
            try {
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(Exception ex) {
                System.out.println("예외발생 : " + ex.getMessage());
            }
        }
    }
});

 

<< 데이터베이스 레코드를 삭제하는 명령어 >>

 

detele 테이블명 [where 조건식];

 

예) student 테이블의 모든 레코드 삭제

delete student;

 

예) student 테이블에서 학생 이름이 '이름'인 레코드 삭제하기

delete student where name = '이름';

btnAddDelete.addActionListener(new ActionListener() {			
    @Override
    public void actionPerformed(ActionEvent e) {
        name = jtf_name.getText();
        String sql = "delete student where name = '"+name+"'";

        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
            stmt = conn.createStatement();

            int re = stmt.executeUpdate(sql);

            if(re > 0) {
                JOptionPane.showMessageDialog(null, "학생 정보가 삭제되었습니다.");
                loadStudent();
            }else {
                JOptionPane.showMessageDialog(null, "학생 정보 삭제에 실패하였습니다.");
            }
        }catch(Exception ex) {
            System.out.println("예외발생 : " + ex.getMessage());
        }finally {
            try {
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(Exception ex) {
                System.out.println("예외발생 : " + ex.getMessage());
            }
        }
    }
});

 

JOptionPane.showConfirmDialog 예, 아니오 두가지 버튼만 사용하기

// 삭제할 학생을 선택하지 않았으면 경고메세지 출력
if(name.equals("")) {
    JOptionPane.showMessageDialog(null, "삭제할 학생을 선택하세요.");
    return;
}

// 삭제하는 명령은 무조건 삭제시키기보다는 한번 더 물어보고 삭제하기
int r = JOptionPane.showConfirmDialog(null, "정말 삭제하시겠습니가?", "삭제하기", JOptionPane.YES_NO_OPTION); // 예, 아니오
if(r != 0) {
    return;
}

 

** 전체 코드 **

package com.kosta.exam01;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class InsertSelectStudent extends JFrame {
	JTextField jtf_name;
	JTextField jtf_kor;
	JTextField jtf_eng;
	JTextField jtf_math;
	
	Vector<String> colName;
	Vector<Vector<String>> rowData;
	JTable table;

	public static String driver = "oracle.jdbc.driver.OracleDriver";
	public static String url= "jdbc:oracle:thin:@localhost:1521:XE";
	public static String username = "c##madang";
	public static String password = "madang";
	
	Statement stmt = null;
	Connection conn = null;
	ResultSet rs = null;
	
	Vector<String> row;
	
	String name;
	int kor, eng, math;
	
	// student 의 모든 학생 정보를 조회하여 JTable에 출력하는 메소드
	public void loadStudent() {
		rowData.clear();
		
		// order by column_name asc 각 열을 기준으로 오름차순 정렬
		String sql = "select * from student order by name asc";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			
			// 조회하기 (ResultSet으로 반환한다)
			rs = stmt.executeQuery(sql);
			
			// next() 데이터를 하나씩 옮겨가다 없으면 false
			while(rs.next()) {
				// 칼럼을 변수에 담는다
				name = rs.getString(1); // 첫번째 칼럼
				kor = rs.getInt(2); // 두번째 칼럼
				eng = rs.getInt(3);
				math = rs.getInt(4);	
				// Vector에 추가하기
				row = new Vector<String>();
				row.add(name);
				row.add(kor+"");
				row.add(eng+"");
				row.add(math+"");
				rowData.add(row);
			}
			
			// 테이블을 다시 그려줘
			table.updateUI();
			
			jtf_name.setText("");
			jtf_kor.setText("");
			jtf_eng.setText("");
			jtf_math.setText("");

		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(rs != null) {
					rs.close();
				}
				if(stmt != null) {
					stmt.close();
				}
				if( conn != null) {
					conn.close();
				}
			}catch (Exception ex) {
				System.out.println("예외발생 : " + ex.getMessage());
			}
		}
	}
	
	public InsertSelectStudent(){	
		jtf_name = new JTextField(10);
		jtf_kor = new JTextField(5);
		jtf_eng = new JTextField(5);
		jtf_math = new JTextField(5);
		
		JPanel p = new JPanel();
		
		p.add(new JLabel("이름"));
		p.add(jtf_name);
		p.add(new JLabel("국어"));
		p.add(jtf_kor);
		p.add(new JLabel("영어"));
		p.add(jtf_eng);
		p.add(new JLabel("수학"));
		p.add(jtf_math);

		colName = new Vector<String>();
		colName.add("이름");		
		colName.add("국어");		
		colName.add("영어");		
		colName.add("수학");
		
		rowData = new Vector<Vector<String>>();
		table = new JTable(rowData, colName);
		JScrollPane jsp = new JScrollPane(table);

		JButton btnAdd= new JButton("등록");
		JButton btnAddUpdate = new JButton("수정");
		JButton btnAddDelete = new JButton("삭제");
		JButton btnRead = new JButton("조회");
		
		p.add(btnAdd);		
		p.add(btnAddUpdate);		
		p.add(btnAddDelete);		
		p.add(btnRead);
		
		add(p, BorderLayout.NORTH);
		add(jsp, BorderLayout.CENTER);
		
		// 창이 열리자마자 정보창에 출력하기
		loadStudent();
		
		setSize(710, 350);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		table.addMouseListener(new MouseListener() {		
			@Override
			public void mouseReleased(MouseEvent e) {
				// JTable에서 눌렀다 떼지면 선택한 학생 정보 출력하기 (선택한 행의 인덱스 가져오기)
				int idx = table.getSelectedRow();
				
				// JTable의 데이터를 갖고있는 rowDate로 부터 선택한 행의 정보를 갖고온다
				row = rowData.get(idx);
				
				// 갖고온 Vector로 부터 이름을 가져온다
				String search = row.get(0);
				
				// student 테이블에서 선택한 학생의 이름을 레코드에서 조회하기 위한 명령어를 만든다
				String sql = "select * from student where name = '"+search+"'";
				
				try {
					Class.forName(driver);
		            conn = DriverManager.getConnection(url, username, password);
		            stmt = conn.createStatement();

		            rs = stmt.executeQuery(sql);
		            
					// 만약 학생의 이름이 중복되지 않는다면 검색결과가 한 건 밖에 없을 것이므로
					// while문 보다는 if문을 사용한다
					if(rs.next()) {
						name = rs.getString(1);
						kor = rs.getInt(2);
						eng = rs.getInt(3);
						math = rs.getInt(4);	
						jtf_name.setText(name);
						jtf_kor.setText(kor + "");
						jtf_eng.setText(eng + "");
						jtf_math.setText(math + "");			
			           }					
		        }catch (Exception ex) {
		            System.out.println("예외발생:"+ex.getMessage());
		        }finally {
		            try {
		                if(rs != null) {
		                    rs.close();
		                }
		                if(stmt != null) {
		                    stmt.close();
		                }
		                if( conn != null) {
		                    conn.close();
		                }
		            }catch (Exception ex) {
		                System.out.println("예외발생:"+ex.getMessage());
		            }
		        }
		    }
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
			}
		});
		
		btnAddDelete.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				
				// 삭제할 학생을 선택하지 않았으면 경고메세지 출력
				if(name.equals("")) {
					JOptionPane.showMessageDialog(null, "삭제할 학생을 선택하세요.");
					return;
				}
				
				// 삭제하는 명령은 무조건 삭제시키기보다는 한번 더 물어보고 삭제하기
				int r = JOptionPane.showConfirmDialog(null, "정말 삭제하시겠습니까?", "삭제하기", JOptionPane.YES_NO_OPTION); // 예, 아니오
				if(r != 0) {
					return;
				}		
				
				String sql = "delete student where name = '"+name+"'";
				
				try {
					Class.forName(driver);
					conn = DriverManager.getConnection(url, username, password);
					stmt = conn.createStatement();
					
					int re = stmt.executeUpdate(sql);
					
					if(re > 0) {
						JOptionPane.showMessageDialog(null, "학생 정보가 삭제되었습니다.");
						loadStudent();
					}else {
						JOptionPane.showMessageDialog(null, "학생 정보 삭제에 실패하였습니다.");
					}
				}catch(Exception ex) {
					System.out.println("예외발생 : " + ex.getMessage());
				}finally {
		            try {
		                if(stmt != null) {
		                    stmt.close();
		                }
		                if(conn != null) {
		                    conn.close();
		                }
		            }catch(Exception ex) {
		                System.out.println("예외발생 : " + ex.getMessage());
		            }
				}
			}
		});
		
		btnAddUpdate.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				kor = Integer.parseInt(jtf_kor.getText());
				eng = Integer.parseInt(jtf_eng.getText());
				math = Integer.parseInt(jtf_math.getText());
				
				String sql = "update student set kor="+kor+",eng="+eng+",math="+math+" where name = '"+name+"'";
				
				try {
					Class.forName(driver);
					conn = DriverManager.getConnection(url, username, password);
					stmt = conn.createStatement();
					
					int re = stmt.executeUpdate(sql);
					
					if(re > 0) {
						JOptionPane.showMessageDialog(null, "학생 정보를 수정하였습니다.");
						loadStudent();
					}else {
						JOptionPane.showMessageDialog(null, "학생 정보 수정에 실패하였습니다.");
					}
				}catch(Exception ex){
					System.out.println("예외발생 : " + ex.getMessage());
				}finally {
					try {
						if(stmt != null) {
							stmt.close();
						}
						if(conn != null) {
							conn.close();
						}
					}catch(Exception ex) {
						System.out.println("예외발생 : " + ex.getMessage());
					}
				}
			}
		});
		
		btnAdd.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				kor = Integer.parseInt(jtf_kor.getText());
				eng = Integer.parseInt(jtf_eng.getText());
				math = Integer.parseInt(jtf_math.getText());

				try {
					String sql = "insert into student values('"+name+"',"+kor+","+eng+","+math+")";
					
					Class.forName(driver);
					conn = DriverManager.getConnection(url, username, password);
					stmt = conn.createStatement();

					int re = stmt.executeUpdate(sql);
					
					if(re == 1) {
						System.out.println("학생의 정보를 추가 하였습니다.");
						loadStudent();
					}else {
						System.out.println("학생의 정보 추가에 실패하였습니다.");
						loadStudent();
					}
					
				}catch (Exception ex) {
					System.out.println("예외발생:"+ex.getMessage());
				}finally {
					try {
						if(stmt != null) {
							stmt.close();
						}
						if( conn != null) {
							conn.close();
						}	
						if(rs != null) {
							rs.close();
						}
						
						jtf_name.setText("");
						jtf_kor.setText("");
						jtf_eng.setText("");
						jtf_math.setText("");
						
					}catch (Exception ex) {
						System.out.println("예외발생 : " + ex.getMessage());
					}
				}	
			}
		});

		btnRead.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					loadStudent();
				}
			});
	}
	
	public static void main(String[] args) {
		new InsertSelectStudent();
	}
}

 

- DAO (Data Access Object)

    실제로 DB의 데이터에 접근하는 객체

    DAO는 Service와 DB를 연결하는 역할을 하며,

    실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행한다

 

- DTO (Data Transfer Object)

    계층 간 데이터 교환을 위한 객체

    로직을 가지지 않고 getter/setter 메소드만 가진 순수한 데이터 객체 클래스(Java Beans)로

    DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용한다

 

- VO(Value Object)

    변경 불가능하며 오직 읽기만 가능 (Read-Only)

    DTO는 setter를 가지고 있어 값을 변경할 수 있지만,

    VO는 getter만을 가지기 때문에 읽기만 가능하고 수정은 불가능하다

 

VO는 DTO와 동일한 개념이나 차이점은 read only 속성을 가져 객체로서 데이터 그 자체에 의미를 갖는다

VO는 리터럴 값(변하지 않는 데이터)이고, DTO는 인스턴스 개념이다

이름 SQL 역할
CREATE INSERT 생성
READ SELECT 읽기
UPDATE UPDATE 갱신
DELETE DELETE 삭제

 

 

package com.kosta.exam02;

public class StudentVO {

	// 4개의 속성
	private String name;
	private int kor;
	private int eng;
	private int math;

	public StudentVO() {
		super();
		// TODO Auto-generated constructor stub
	}

	public StudentVO(String name, int kor, int eng, int math) {
		super();

		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}
}
package com.kosta.exam02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;

public class StudentDAO {
	public static String driver = "oracle.jdbc.driver.OracleDriver";
	public static String url = "jdbc:oracle:thin:@localhost:1521:XE";
	public static String username = "c##madang";
	public static String password = "madang";
	
	Statement stmt = null;
	Connection conn = null;
	ResultSet rs = null;
	
	// CREATE 생성
	public int insertStudent(StudentVO i) {
		int re = -1;
		
		String sql = "insert into student values('"+i.getName()+"',"+i.getKor()+","+i.getEng()+","+i.getMath()+")";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			re = stmt.executeUpdate(sql);
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return re;
	}
	
	// READ 모든 학생의 정보를 조회하여 ArrayList로 반환하는 메소드
	public ArrayList<StudentVO> listStudent(){
		ArrayList<StudentVO> list = new ArrayList<>();
		
		String sql = "select * from student order by name asc";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				list.add(new StudentVO(rs.getString(1), rs.getInt(2),  rs.getInt(3),  rs.getInt(4)));
			}
			
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(rs != null) {
					rs.close();
				}
				if(stmt != null) {
					stmt.close();
				}
				if( conn != null) {
					conn.close();
				}
			}catch (Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return list;
	}
	
	// UPDATE 갱신
	public int updateStudent(StudentVO u) {
		int re = -1;
		
		String sql = "update student set kor="+u.getKor()+",eng="+u.getEng()+",math="+u.getMath()+" where name = '"+u.getName()+"'";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			re = stmt.executeUpdate(sql);
			
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
				}
				if( conn != null) {
					conn.close();
				}
			}catch (Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return re;
	}
	
	// DELETE 삭제
	public int deleteStudent(StudentVO d) {
		int re = -1;
		
		String sql = "delete student where name = '"+d.getName()+"'";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			re = stmt.executeUpdate(sql);
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
				}
				if( conn != null) {
					conn.close();
				}
			}catch (Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return re;
	}
}
package com.kosta.exam02;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Vector;

import javax.print.DocFlavor.STRING;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class StudentTest extends JFrame {
	JTextField jtf_name;
	JTextField jtf_kor;
	JTextField jtf_eng;
	JTextField jtf_math;
	
	Vector<String> colName;
	Vector<Vector<String>> rowData;
	JTable table;
	
	String name;
	int kor, eng, math;
	
	// 모든 학생의 목록을 읽어와서 JTable에 출력하는 메소드
	public void loadStudent() {
		rowData.clear();
		
		StudentDAO dao = new StudentDAO();
		ArrayList<StudentVO> list = dao.listStudent();
		for(StudentVO vo : list) {
			Vector<String> row = new Vector<String>();
			row.add(vo.getName());
			row.add(vo.getKor()+"");
			row.add(vo.getEng()+"");
			row.add(vo.getMath()+"");
			rowData.add(row);
		}
		table.updateUI();
	}
	
	public StudentTest(){	
		jtf_name = new JTextField(10);
		jtf_kor = new JTextField(5);
		jtf_eng = new JTextField(5);
		jtf_math = new JTextField(5);
		
		JPanel p = new JPanel();
		
		p.add(new JLabel("이름"));
		p.add(jtf_name);
		p.add(new JLabel("국어"));
		p.add(jtf_kor);
		p.add(new JLabel("영어"));
		p.add(jtf_eng);
		p.add(new JLabel("수학"));
		p.add(jtf_math);

		colName = new Vector<String>();
		colName.add("이름");		
		colName.add("국어");		
		colName.add("영어");		
		colName.add("수학");
		
		rowData = new Vector<Vector<String>>();
		table = new JTable(rowData, colName);
		JScrollPane jsp = new JScrollPane(table);

		JButton btnAdd= new JButton("등록");
		JButton btnAddUpdate = new JButton("수정");
		JButton btnAddDelete = new JButton("삭제");
		// JButton btnRead = new JButton("조회");
		
		p.add(btnAdd);		
		p.add(btnAddUpdate);		
		p.add(btnAddDelete);		
		// p.add(btnRead);
		
		add(p, BorderLayout.NORTH);
		add(jsp, BorderLayout.CENTER);

		setSize(710, 350);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		loadStudent();
		
		table.addMouseListener(new MouseListener() {
			@Override
			public void mouseReleased(MouseEvent e) {				
				int idx = table.getSelectedRow();
				Vector<String> row = rowData.get(idx);
				jtf_name.setText(row.get(0));
				jtf_kor.setText(row.get(1));
				jtf_eng.setText(row.get(2));
				jtf_math.setText(row.get(3));
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {		
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
			}
		});
		
		btnAdd.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				kor = Integer.parseInt(jtf_kor.getText());
				eng = Integer.parseInt(jtf_eng.getText());
				math = Integer.parseInt(jtf_math.getText());
				
				// VO 객체 생성 
				StudentVO vo = new  StudentVO(name, kor, eng, math);
				// DAO 객체 생성
				StudentDAO dao = new StudentDAO();
				// DAO에 데이터를 보낸다
				int re = dao.insertStudent(vo);
				if(re == 1) {
					JOptionPane.showMessageDialog(null, "학생 정보를 추가했습니다.");
					loadStudent();
				}else {
					JOptionPane.showMessageDialog(null, "학생 등록에 실패하였습니다.");
				}
			}
		});
		
		btnAddUpdate.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				kor = Integer.parseInt(jtf_kor.getText());
				eng = Integer.parseInt(jtf_eng.getText());
				math = Integer.parseInt(jtf_math.getText());
				
				StudentVO vo = new StudentVO(name, kor, eng, math);
				StudentDAO dao = new StudentDAO();
				int re = dao.updateStudent(vo);
				if(re > 0) {
					JOptionPane.showMessageDialog(null, "학생 정보를 수정하였습니다.");
					loadStudent();
				}else {
					JOptionPane.showMessageDialog(null, "학생 정보 수정에 실패하였습니다.");
				}
			}
		});
		
		btnAddDelete.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				name = jtf_name.getText();
				StudentVO vo = new StudentVO();
				vo.setName(name);
				StudentDAO dao = new StudentDAO();
				int re = dao.deleteStudent(vo);
				
				if(name.equals("")) {
					JOptionPane.showMessageDialog(null, "삭제할 학생을 선택하세요.");
					return;
				}
				
				int r  = JOptionPane.showConfirmDialog(null, "정말 삭제하시겠습니까?", name, JOptionPane.YES_NO_OPTION);
				if(r != 0) {
					return;
				}

				if(re > 0) {
					JOptionPane.showMessageDialog(null, "학생 정보를 삭제하였습니다.");
					loadStudent();
				}else {
					JOptionPane.showMessageDialog(null, "학생 정보 삭제에 실패하였습니다.");
				}
				
			}
		});
		
	}
	
	public static void main(String[] args) {
		new StudentTest();
	}
}

 

/등록/

/수정/

/삭제/

 


 

14:00 ~

 

간단한 상품관리 시스템을 위한 "상품" 테이블을 만들어 봅시다

속성 : 상품번호 / 상품명 / 수량 / 가격

 

primary key : 테이블 내에서 중복되지 않는다

create table goods(no number primary key, item varchar2(20), qty number, price number);

 

테이블 구조 

desc 테이블명;

 

port 번호 확인해보기 listener.ora

 

insertGoods 는 왜 int를 반환하나요?

  새로운 레코드를 추가하기 위하여 executeUpdate를 실행하게 된다

  이때 executeUpdate는 성공적으로 명령을 실행한 건수를 반환하는데

  insertGoods 메소드를 호출하는 쪽에서는 레코드 추가에 성공했는지 판별할 필요가 있기 때문에

  int를 반환하도록 한다

 

<< 데이터베이스 명령을 실행하기 위한 메소드 >>

 

int re = stmt.executeUpdate(sql); 

  데이터베이스 변동이 있는 명령을 실행할 때

  새로운 레코드 추가,수정,삭제

  (insert, update, delete)

  성공여부를 알려주기 위해 레코드의 수를 반환

 

ResultSet rs = stmt.executeQuery(sql);

  데이터베이스 내요을 조회할 때

  조회한 결과를 ResultSet으로 반환

 

/화면 구성하기/

package com.kosta.exam03;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GoodsTest extends JFrame {
	JTextField jtf_no;
	JTextField jtf_item;
	JTextField jtf_qty;
	JTextField jtf_price;

	public GoodsTest(String title) {
		super(title);
		
		jtf_no = new JTextField();
		jtf_item = new JTextField();
		jtf_qty = new JTextField();
		jtf_price = new JTextField();
		
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		p1.setLayout(new GridLayout(4, 2));
		p1.add(new JLabel("상품번호"));
		p1.add(jtf_no);
		p1.add(new JLabel("상품명"));
		p1.add(jtf_item);
		p1.add(new JLabel("수량"));
		p1.add(jtf_qty);
		p1.add(new JLabel("가격"));
		p1.add(jtf_price);
		
	
		p2.setLayout(new FlowLayout());
		JButton btnOk = new JButton("등록");
		p2.add(btnOk);
		
		add(p1, BorderLayout.CENTER);
		add(p2, BorderLayout.SOUTH);
		
		setSize(400, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new GoodsTest("상품관리");
	}
}

/조회 할 테이블 구성하기/

public class GoodsTest extends JFrame {
	JTextField jtf_no;
	JTextField jtf_item;
	JTextField jtf_qty;
	JTextField jtf_price;

	Vector<String> colName;
	Vector<Vector<String>> rowDate;
	JTable table;

	public GoodsTest(String title) {
		super(title);
		
		jtf_no = new JTextField();
		jtf_item = new JTextField();
		jtf_qty = new JTextField();
		jtf_price = new JTextField();
		
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		p1.setLayout(new GridLayout(4, 2));
		p1.add(new JLabel("상품번호"));
		p1.add(jtf_no);
		p1.add(new JLabel("상품명"));
		p1.add(jtf_item);
		p1.add(new JLabel("수량"));
		p1.add(jtf_qty);
		p1.add(new JLabel("가격"));
		p1.add(jtf_price);
		
		p2.setLayout(new FlowLayout());
		JButton btnAdd = new JButton("등록");
		p2.add(btnAdd);
		
		colName = new Vector<String>();
		colName.add("상품번호");
		colName.add("상품명");
		colName.add("수량");
		colName.add("가격");
		
		rowDate = new Vector<Vector<String>>();
		table = new JTable(rowDate, colName);
		JScrollPane jsp = new JScrollPane(table);
		
		JPanel p_north = new JPanel();
		p_north.setLayout(new BorderLayout());
		p_north.add(p1, BorderLayout.CENTER);
		p_north.add(p2, BorderLayout.SOUTH);
		
		// add(p1, BorderLayout.NORTH);
		// add(p2, BorderLayout.CENTER);
		add(p_north, BorderLayout.NORTH);
		add(jsp, BorderLayout.CENTER);
	
		setSize(500, 400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

package com.kosta.exam03;

public class GoodsVO {

	private int no;       // 상품번호
	private String item;  // 상품명
	private int qty;      // 수량
	private int price;    // 가격

	public GoodsVO() {
		super();
		// TODO Auto-generated constructor stub
	}

	public GoodsVO(int no, String item, int qty, int price) {
		super();
		this.no = no;
		this.item = item;
		this.qty = qty;
		this.price = price;
	}

	public int getNo() {
		return no;
	}

	public void setNo(int no) {
		this.no = no;
	}

	public String getItem() {
		return item;
	}

	public void setItem(String item) {
		this.item = item;
	}

	public int getQty() {
		return qty;
	}

	public void setQty(int qty) {
		this.qty = qty;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}

 

/상품 등록하기/

// 새로운 상품을 등록하기위한 구조
public int insertGoods(GoodsVO i) {
    // 상관없는 -1값을 임의의 값으로 넣는다
    int re = -1; 

    String sql = "insert into goods values("+i.getNo()+", '"+i.getItem()+"', "+i.getQty()+", "+i.getPrice()+")";

    try {
        Class.forName(driver);
        conn = DriverManager.getConnection(url, username, password);
        stmt = conn.createStatement();
        re = stmt.executeUpdate(sql);
    }catch(Exception e) {
        System.out.println("예외발생 : " + e.getMessage());
    }finally {
        try {
            if(stmt != null) {
                stmt.close();
            }
            if(conn != null) {
                conn.close();
            }
        }catch(Exception e) {
            System.out.println("예외발생 : " + e.getMessage());
        }
    }	
    return re;
}
btnAdd.addActionListener(new ActionListener() {	
    @Override
    public void actionPerformed(ActionEvent e) {
        int no =Integer.parseInt(jtf_no.getText());
        String item = jtf_item.getText();
        int qty =Integer.parseInt(jtf_qty.getText());
        int price =Integer.parseInt(jtf_qty.getText());

        GoodsVO vo = new GoodsVO(no, item, qty, price);
        GoodsDAO dao = new GoodsDAO();
        int re = dao.insertGoods(vo);

        if(re > 0) {
            JOptionPane.showMessageDialog(null, "상품을 등록하였습니다.");
        }else {
            JOptionPane.showMessageDialog(null, "상품을 등록에 실패하였습니다.");
        }
    }
});

qty 1, price 1이 나오는 것에 대하여 ,,

집에서 하니까 잘 된다 ㅠ 학원가면 테이블 지우고 다시 만들어봐야겠다 ..ㅠ

drop table 테이블명; 으로 지우고

다시 만들어줬더니 잘 된다 ~!~! 

package com.kosta.exam03;

public class GoodsVO {

	private int no; 	  // 상품번호
	private String item;  // 상품명
	private int qty; 	  // 수량
	private int price; 	  // 가격

	public GoodsVO() {
		super();
		// TODO Auto-generated constructor stub
	}

	public GoodsVO(int no, String item, int qty, int price) {
		super();
		this.no = no;
		this.item = item;
		this.qty = qty;
		this.price = price;
	}

	public int getNo() {
		return no;
	}

	public void setNo(int no) {
		this.no = no;
	}

	public String getItem() {
		return item;
	}

	public void setItem(String item) {
		this.item = item;
	}

	public int getQty() {
		return qty;
	}

	public void setQty(int qty) {
		this.qty = qty;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}
package com.kosta.exam03;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class GoodsDAO {

	public static String driver = "oracle.jdbc.driver.OracleDriver";
	public static String url = "jdbc:oracle:thin:@localhost:1521:XE";
	public static String username = "c##madang";
	public static String password = "madang";
	
	Statement stmt = null;
	Connection conn = null;
	ResultSet rs = null; // 조회
	
	// 모든 상품목록을 조회하여 ArrayList로 반환하는 메소드를 정의
	public ArrayList<GoodsVO> listGoods(){
		ArrayList<GoodsVO> list = new ArrayList<GoodsVO>();
		
		String sql = "select * from goods order by no asc";
		
		try {
			getClass().forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				list.add(new GoodsVO(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4)));
			}
			
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(rs != null) {
					rs.close();
				}
				if(stmt != null) {
					stmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return list;
	}
	
	// 새로운 상품을 등록하기위한 구조
	public int insertGoods(GoodsVO i) {
		// 상관없는 -1값을 임의의 값으로 넣는다
		int re = -1; 
		
		String sql = "insert into goods values("+i.getNo()+", '"+i.getItem()+"', "+i.getQty()+", "+i.getPrice()+")";
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			re = stmt.executeUpdate(sql);
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}	
		return re;
	}
	
	public int updateGoods(GoodsVO u) {
		int re = -1;
		
		String sql = "update goods set item = '"+u.getItem()+"', qty = "+u.getQty()+", price = "+u.getPrice()+"  where no = "+u.getNo()+""; 
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			
			re = stmt.executeUpdate(sql);
			
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
					}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return re;
	}
	
	public int deleteGoods(GoodsVO d) {
		int re = -1;
		
		String sql = "delete from goods where no = "+d.getNo();
		
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			re = stmt.executeUpdate(sql);
			
		}catch(Exception e) {
			System.out.println("예외발생 : " + e.getMessage());
		}finally {
			try {
				if(stmt != null) {
					stmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e) {
				System.out.println("예외발생 : " + e.getMessage());
			}
		}
		return re;
	}
}
package com.kosta.exam03;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class GoodsTest extends JFrame {
	JTextField jtf_no;
	JTextField jtf_item;
	JTextField jtf_qty;
	JTextField jtf_price;

	Vector<String> colName;
	Vector<Vector<String>> rowDate;
	JTable table;
	
	public void reset() {
		jtf_no.setText("");
		jtf_item.setText("");
		jtf_qty.setText("");
		jtf_price.setText("");
	}
	
	public void loadGoods() {
		rowDate.clear();
		
		GoodsDAO dao = new GoodsDAO();
		ArrayList<GoodsVO> list = dao.listGoods();
		for (GoodsVO vo : list) {
			Vector<String> row = new Vector<String>();
			row.add(vo.getNo()+"");
			row.add(vo.getItem());
			row.add(vo.getQty()+"");
			row.add(vo.getPrice()+"");
			rowDate.add(row);
		}
		table.updateUI();
	}
	
	public GoodsTest(String title) {
		super(title);
		
		jtf_no = new JTextField();
		jtf_item = new JTextField();
		jtf_qty = new JTextField();
		jtf_price = new JTextField();
		
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		
		p1.setLayout(new GridLayout(4, 2));
		p1.add(new JLabel("상품번호"));
		p1.add(jtf_no);
		p1.add(new JLabel("상품명"));
		p1.add(jtf_item);
		p1.add(new JLabel("수량"));
		p1.add(jtf_qty);
		p1.add(new JLabel("가격"));
		p1.add(jtf_price);
		
		p2.setLayout(new FlowLayout());
		JButton btnAdd = new JButton("등록");
		p2.add(btnAdd);
		JButton btnUpdate= new JButton("수정");
		p2.add(btnUpdate);
		JButton btnDelete = new JButton("삭제");
		p2.add(btnDelete);
		
		colName = new Vector<String>();
		colName.add("상품번호");
		colName.add("상품명");
		colName.add("수량");
		colName.add("가격");
		
		rowDate = new Vector<Vector<String>>();
		table = new JTable(rowDate, colName);
		JScrollPane jsp = new JScrollPane(table);
		
		JPanel p_north = new JPanel();
		p_north.setLayout(new BorderLayout());
		p_north.add(p1, BorderLayout.CENTER);
		p_north.add(p2, BorderLayout.SOUTH);
		
		// add(p1, BorderLayout.NORTH);
		// add(p2, BorderLayout.CENTER);
		add(p_north, BorderLayout.NORTH);
		add(jsp, BorderLayout.CENTER);
	
		setSize(500, 350);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		loadGoods();
		
		table.addMouseListener(new MouseListener() {
			@Override
			public void mouseReleased(MouseEvent e) {
				int idx = table.getSelectedRow();
				Vector<String> row = rowDate.get(idx);
				jtf_no.setText(row.get(0));
				jtf_item.setText(row.get(1));
				jtf_qty.setText(row.get(2));
				jtf_price.setText(row.get(3));
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {		
			}
		});
		
		btnAdd.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				int no =Integer.parseInt(jtf_no.getText());
				String item = jtf_item.getText();
				int qty =Integer.parseInt(jtf_qty.getText());
				int price =Integer.parseInt(jtf_price.getText());
				
				GoodsVO vo = new GoodsVO(no, item, qty, price);
				GoodsDAO dao = new GoodsDAO();
				int re = dao.insertGoods(vo);
				
				if(re == 1) {
					JOptionPane.showMessageDialog(null, "상품을 등록하였습니다.");
					loadGoods();
				}else {
					JOptionPane.showMessageDialog(null, "상품을 등록에 실패하였습니다.");
				}
				reset();
			}
		});
		
		btnUpdate.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int no =Integer.parseInt(jtf_no.getText());
				String item = jtf_item.getText();
				int qty =Integer.parseInt(jtf_qty.getText());
				int price =Integer.parseInt(jtf_price.getText());
				
				GoodsVO vo = new GoodsVO(no, item, qty, price);
				GoodsDAO dao = new GoodsDAO();
				int re = dao.updateGoods(vo);
				
				if(re > 0) {
					JOptionPane.showMessageDialog(null, "상품 정보를 수정하였습니다.");
					loadGoods();
				}else {
					JOptionPane.showMessageDialog(null, "상품 정보 수정에 실패하였습니다.");
				}
				reset();
			}
		});
		
		btnDelete.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int no = Integer.parseInt(jtf_no.getText());
				
				GoodsVO vo = new GoodsVO();
				vo.setNo(no);
				GoodsDAO dao = new GoodsDAO();
				int re = dao.deleteGoods(vo);
				
				if(re > 0) {
					JOptionPane.showMessageDialog(null, "상품 정보를 삭제하였습니다.");
					loadGoods();
				}else {
					JOptionPane.showMessageDialog(null, "상품 정보 삭제에 실패하였습니다.");
				}
				reset();
			}
			
		});
	}

	public static void main(String[] args) {
		new GoodsTest("상품관리");
	}
}

 

- 평가가 끝난 사람들은 시험지를 앞에 제출하고 오늘 학습한 내용에 대하여 요약 정리 합니다

 

'📖' 카테고리의 다른 글

day 0610 상품_등록_수정_삭제_조회  (0) 2024.06.10
데이터베이스 명령어  (1) 2024.06.09
day 0605 데이터베이스 연결 프로그래밍  (0) 2024.06.05
day 0604 네트워크 프로그래밍  (2) 2024.06.04
day 0603 메모장  (0) 2024.06.03