기록
day 0607 데이터베이스 연결 프로그래밍 수정_삭제 본문
<< 레코드(데이터베이스) 수정하는 명령어 >>
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 |