Salted Caramel

[수업 26일차] 21.09.09 Java와 데이터베이스간의​ 연동, JDBC(Java DataBase Connectivity)-3, 문제풀이 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 26일차] 21.09.09 Java와 데이터베이스간의​ 연동, JDBC(Java DataBase Connectivity)-3, 문제풀이

꽃무늬라떼 2021. 9. 10. 00:27

con 연결이 끊김 

연결을 닫아주는 코드를 실행해야하는 코드 보다 앞에 써줬을 경우에 

insert( ); 메서드에서 연결이 끊어짐 -- > 데이터베이스가

다시 connect( ); 객체를 호출해야한다.  그래서 close 코드를 맞게 작성해야한다. 

 

 

// getValueAt(세로인덱스(행), 가로인데스(열))
// ==> 원하는 위치(행, 열)의 데이터를 가져오는 메서드.
pstmt.setString(1, (String)model.getValueAt(row, 0));

 

이 부분 이해하기

 

 

 

17_DEPT
sist
DEPT

package sist;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class DEPT extends JFrame {

	
	/*
	 * - DefaultTableModel :테이블을 만들고 난 후 데이터를 넣고
	 *                      추가, 수정, 삭제 시에도 변경이 가능함.
	 * 
	 * 
	 * - JTable : 일단은 테이블을 만들고 난 후 데이터를 넣으면
	 *            한번 만든 테이블의 데이터는 변경이 불가능.
	 *            추가 , 수정, 삭제는 불가능
	 *            추가, 수정, 삭제 시에는 다시 새로운 객체를 만들어야 함.
	 * 
	 */
	
	
	
	
	
	
	
	Connection con = null;                                //DB와 연결하는 객체
	
	PreparedStatement pstmt = null;                       // DB와 SQL문을 전송하는 객체
	
	ResultSet rs = null;                                  // SQL문의 실행 결과를 저장하고 있는 객체
	
	DefaultTableModel model;
	
	JTextField jtf1, jtf2, jtf3;
	
	 JTable table;
	
	
	public DEPT() {
	     
		setTitle("부서 테이블");
	     
	    JPanel container1 = new JPanel();   // 상단 컨테이너
	    JPanel container2 = new JPanel();   // 하단 컨테이너
	    
	    // 1. 컴포넌트를 만들어 보자.
	    // 1-1. 상단 컨테이너에 올라갈 컴포넌트를 만들자
	    
	    JLabel lable1 = new JLabel("부서번호 : ");
	    jtf1 = new JTextField(2);
	    
	    JLabel lable2 = new JLabel("부서명 : ");
	    jtf2 = new JTextField(10);
	    
	    JLabel lable3 = new JLabel("근무지 : ");
	    jtf3 = new JTextField(10);
	    
	    // 1-2. 중앙에 들어갈 컴포넌트를 만들자. 
	    String[] header = {"부서번호", "부서명", "근무지"};
	    
	    model = new DefaultTableModel(header, 0);
	    
	    table = new JTable(model);
	    
	    JScrollPane jsp = new JScrollPane(
	    		table,
	    		ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
	    		ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
	    
	    
	    // 1-3. 하단 컨테이너에 올라갈 컴포넌트를 만들어 보자.
	    JButton jb1 = new JButton("전체 목록");
	    JButton jb2 = new JButton("부서 추가");
	    JButton jb3 = new JButton("부서 수정");
	    JButton jb4 = new JButton("부서 삭제");
	    
	    // 2. 컨테이너에 컴포넌트를 올려 주어야 한다. 
	    // 2-1. 상단 컨테이너에 1-1 컴포넌트들을 올려 주자.
	    container1.add(lable1); container1.add(jtf1);
	    container1.add(lable2); container1.add(jtf2);
	    container1.add(lable3); container1.add(jtf3);
	    
	    // 2-2. 하단 컨테이너에 1-3 컴포넌트들을 올려 주자.
	    container2.add(jb1); container2.add(jb2);
	    container2.add(jb3); container2.add(jb4);
	    
	    // 3. 프레임에 컨테이너를 올려 주어야 한다. 
	    add(container1, BorderLayout.NORTH);
	    add(jsp, BorderLayout.CENTER);
	    add(container2, BorderLayout.SOUTH);
	    
	    setBounds(200, 200, 500, 250);
	    
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    
	    setVisible(true);
	    
	    // 4. 이벤트 처리
	    // 전체목록(jb1) 버튼을 클릭했을 때 dept 테이블의
	    // 전체 리스트를 jTable에 출력을 해 주면 됨.
	    jb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			
				connect();               // 데이터베이스 연동 메서드 호출.
				model.setRowCount(0);    // 전체 테이블의 화면을 지워주는 메서드.
				select();                // DB에서 전체 내역을 조회하는 메서드 호출.
				
			}
		});
	    		
	    
	    // 부서추가(jb2) 버튼을 클릭했을 때 각각의 텍스트 필드에 입력된 정보를
	    // DB에 추가한 후 추가된 전체리스트를 JTable에 다시 보여주면 됨
	    jb2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				connect();                 //데이터베이스 연동 메서드 호출
				insert();                  // 데이터베이스에 저장하는 메서드 호출
				
				//입력 텍스트 핑드 영역 초기화
				jtf1.setText(null);jtf2.setText(null);
				jtf3.setText(null);jtf1.requestFocus();
				
				model.setRowCount(0);    // 전체 테이블 화면을 지우는 메서드
				select();                // DB에서 전체 내역을 조회하는 메서드 호출.
				
				
			}
		});
	     
	    
	    // 부서수정(jb3) 버튼을 눌렀을 때 각각의 텍스트 필드에 입력된 정보를
	    // 바탕으로 DB에 수정한 후, dept 테이블 전체 리스트를 JTable에 다시 보여주면됨.
	    
	    jb3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				connect();                 //데이터베이스 연동 메서드 호출
				update();                  // 데이터베이스에 수정하는 메서드 호출
				
				//입력 텍스트 필드 영역 초기화
				jtf1.setText(null);jtf2.setText(null);
				jtf3.setText(null);jtf1.requestFocus();
				
				model.setRowCount(0);    // 전체 테이블 화면을 지우는 메서드
				select();                // DB에서 전체 내역을 조회하는 메서드 호출.
				
			}
		});
	    
	    
	    // JTable의 특정 행을 클릭한 산태로 부서삭제(jb4) 버튼을 눌렀을 때
	    // 클릭된 행을 DB에서 삭제시키는 작업 후, dept 테이블의 전체 리스트를 
	    // JTable에 다시 보여주면 됨.
	    jb4.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {

			int result = JOptionPane.showConfirmDialog
				(null, "정말로 삭제하시겠습니까?", "확인",
						JOptionPane.YES_NO_OPTION);
			
			if(result == JOptionPane.CLOSED_OPTION) {
				JOptionPane.showMessageDialog(null, "취소를 클릭하였습니다");
				
			}else if(result == JOptionPane.YES_OPTION) {
				connect();
				delete();
			}
				
			}
		});
	    
	    
	    
	    
	}
	
	// DB를 연동하는 메서드. 
	void connect() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "web";
		String password = "1234";
		
		
		try {
			//1. 접속할 오라클 데이터베이스 드라이버를 메모리에 올리자 - 동적 작업
			Class.forName(driver);
			
			//2. 오라클 데이터베이스와 연결을 하자. 
			con = DriverManager.getConnection(url, user, password);
			
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}   // connet() 메서드 end
	
	// dept 테이블의 전체 내역을 조회하는 메서드.
	void select() {
		
		
		try {
			 // 1. 데이터 베이스에 SQL문을 전송하기 위한 쿼리문 작성.
			String sql = "select * from dept order by deptno";
			
			// 2. 쿼리문을 전송을 하자.
			pstmt = con.prepareStatement(sql);
			
			// 3. 실제로 DB 상에서 쿼리문을 실행하도록 하자.
			rs = pstmt.executeQuery();
			
			// 4. 레코드 수만큼 반복하여 데이터를 추출하여 model 객체에 저장해 주자.
			while(rs.next()) {
				int deptno = rs.getInt("deptno");
				String dname = rs.getString("dname");
				String loc = rs.getString("loc");
				
				Object[] data = {deptno,dname,loc};
				
				//저장한 한 개의 레코드(data)를 model에 추가해 주면 됨.
				model.addRow(data);
				
				
				
			}
			
			// 5. 연결되어있던 객체 닫아주기
			rs.close();pstmt.close(); con.close();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}  // select() 메서드 end
	
	
	// dept 테이블에 부서 정보를 추가하는 메서드.
	void insert() {
		
		try {
			// 1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
			String sql = "insert into dept values(?,?,?)";
			
			// 2. 쿼리문을 전송하자.
			pstmt = con.prepareStatement(sql);
			
			//int deptno = Integer.parseInt(jtf1.getText());
			//String dname = jtf2.getText();
			//String location = jtf3.getText();
			
			pstmt.setInt(1, Integer.parseInt(jtf1.getText()));	
			pstmt.setString(2, jtf2.getText());			
			pstmt.setString(3, jtf3.getText());
			
			// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
			int res = pstmt.executeUpdate();
			
			if(res > 0) {
				JOptionPane.showMessageDialog(null, "부서 추가 성공");
	
			}else {
				JOptionPane.showMessageDialog(null, "부서 추가 실패");
			}
			
			
			
			// 4. 연결되어 있던 객체 닫기
			
			pstmt.close(); //con.close();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}  //insert() 메서드 end
	
	
	// dept테이블의 특정 레코드를 수정하는 메서드
	void update( ) {
		
		
		//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
		String sql = "update dept set dname = ?, loc = ?"
				+"where deptno = ?";
		
		
		try {
			//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
			String sql1 = "update dept set dname = ?, loc = ? where deptno = ?";
			
			//2.쿼리문을 전송하다.
			pstmt = con.prepareStatement(sql1);
			
			pstmt.setString(1, jtf2.getText());
			pstmt.setString(2, jtf3.getText());
			pstmt.setInt(3, Integer.parseInt(jtf1.getText()));
			
			// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
			int res = pstmt.executeUpdate();
						
			if(res > 0) {
				JOptionPane.showMessageDialog(null, "부서 정보 수정 성공");
				
			}else {
				JOptionPane.showMessageDialog(null, "부서 정보 수정 실패");
			}			
			
			// 4. 연결되어 있던 객체 종료
			pstmt.close();    //con.close();
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}    //update() 메서드 end
	
	
	// dept 테이블에서 특정 행을 삭제시키는 메서드.
		void delete() {
		
		
		//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성,
		String sql ="delete from dept where deptno = ?";
		
		//2. 쿼리문을 전송하자. 
		
		try {
			//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성,
			String sql1 ="delete from dept where deptno = ?";
			
			//2. 쿼리문을 전송하자.
			pstmt = con.prepareStatement(sql1);
			
			//JTable에서 선택된 셀의 row값을 int형으로 반환해 주는 메서드.
			int row = table.getSelectedRow();
			
			// getValueAt(세로인덱스(행), 가로인데스(열))
			// ==> 원하는 위치(행, 열)의 데이터를 가져오는 메서드.
			pstmt.setInt(1,(int)model.getValueAt(row, 0));
			
			// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
			int res = pstmt.executeUpdate();
			
			if(res > 0) {
				JOptionPane.showMessageDialog(null, "부서 삭제 성공");
			}else {
				JOptionPane.showMessageDialog(null, "부서 삭제 실패");
			}	
			
			
			model.removeRow(row);          // 테이블 상의 한 줄 삭제.
			
			// 4. 연결되어 있던 객체 종료.
			pstmt.close();con.close();
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	
	public static void main(String[] args) {
		
		new DEPT();
	}

}

 

 

18_STUDENT
sist
STUDENT

package sist;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class STUDENT extends JFrame{

	Connection con = null;               // DB와 연결하는 객체
	PreparedStatement pstmt = null;      // SQL문을 DB에 전송하는 객체
	ResultSet rs = null;                 // SQL문의 결과를 가지고 있는 객체
	
	DefaultTableModel model;

	JTextField jtf1, jtf2,jtf3,jtf4,jtf5,jtf6,jtf7;
	
	JTable table;
	

	public STUDENT() {
	
		setTitle("학생 테이블");
		
		JPanel container1 = new JPanel();     //상단-1 컨테이너
		JPanel container2 = new JPanel();     //상단-2 컨테이너
		JPanel container3 = new JPanel();     //하단 컨테이너
		
		// 1. 컴포넌트를 만들어보자.
		// 1-1. 상단-1 컨테이너에 올려질 컴포넌트들을 만들어 보자.
		
		JLabel lable1 = new JLabel("학번 : ");
		jtf1 = new JTextField(10);
		
		JLabel lable2 = new JLabel("이름 : ");
		jtf2 = new JTextField(5);
		
		JLabel lable3 = new JLabel("학과 : ");
		jtf3 = new JTextField(15);
		
		
		// 1-2. 상단-2 컨테이너에 올려질 컴포넌트들을 만들어 보자.
		JLabel lable4 = new JLabel("학년 : ");
		jtf4 = new JTextField(1);
		
		JLabel lable5 = new JLabel("나이 : ");
		jtf5 = new JTextField(2);
		
		JLabel lable6 = new JLabel("연락처 : ");
		jtf6 = new JTextField(11);
		
		JLabel lable7 = new JLabel("주소 : ");
		jtf7 = new JTextField(20);
		
		// 1-2. 중앙에 들어갈 컴포넌트를 만들자.
		String[] header = 
			{"학번", "이름","학과","학년","나이","연락처","주소", "등록일"};
		
		model = new DefaultTableModel(header,0);
		
		table = new JTable(model);
	
		JScrollPane jsp = new JScrollPane(
				table, 
				ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
				ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
				
		pack();
		
		
		JButton jb1 = new JButton("전체 목록");
		JButton jb2 = new JButton("학생 추가");
		JButton jb3 = new JButton("학생 수정");
		JButton jb4 = new JButton("학생 삭제");
		
		// 2. 컨테이너에 컴포넌트를 올려 주어야 한다. 
	    // 2-1. 상단 컨테이너에 1-1 컴포넌트들을 올려 주자.
		container1.add(lable1);container1.add(jtf1);
		container1.add(lable2);container1.add(jtf2);
		container1.add(lable3);container1.add(jtf3);
		
		// 2-2. 상단-2 컨테이너에 1-2 컴포넌트를 올리자.
		container2.add(lable4);container2.add(jtf4);
		container2.add(lable5);container2.add(jtf5);
		container2.add(lable6);container2.add(jtf6);
		container2.add(lable7);container2.add(jtf7);
		
		// 2-3. 하단 컨테이너에 1-4 컴포넌트를 올리자
		container3.add(jb1); container3.add(jb2);
		container3.add(jb3); container3.add(jb4);
		
		
		// 컨테이너를 하나 더 만들어서 기존의 컨테이너들을 새로운 컨테이너에 올려 주자.
		JPanel group = new JPanel(new BorderLayout());
		
		group.add(container2,BorderLayout.NORTH);
		group.add(jsp,BorderLayout.CENTER);
		group.add(container3,BorderLayout.SOUTH);
		
		
		// 3. 프레임에 컨테이너를 올려 주어야 한다. 
		add(container1,BorderLayout.NORTH);
		add(group,BorderLayout.CENTER);
		
		setBounds(200, 200, 700, 300);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setVisible(true);
		
		
		// 4. 이벤트 처리
		// 전체목록(jb1) 버튼을 클릭했을 때 student 테이블의 
		// 전체 리스트를 jTable에 출력을 해 주면 됨.
		jb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				connect();                   // 데이터베이스 연동 메서드 호출
				model.setRowCount(0);        // 전체 테이블의 화면을 지워주는 메서드 
				select();                    // DB에서 전체 내역을 조회하는 메서드 호출.
				
			}
		});
		
		
		// 학생추가(jb2) 버튼을 클릭했을 때 각각의 텍스트 필드에 입력된 정보를
	    // DB에 추가한 후 추가된 전체리스트를 JTable에 다시 보여주면 됨
		jb2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				connect();                   // 데이터베이스 연동 메서드 호출
				insert();                    // 데이터베이스에 저장하는 메서드 호출
				
				// 입력 텍스트 필드 영역 초기화
				jtf1.setText(null);jtf2.setText(null);
				jtf3.setText(null);jtf4.setText(null);
				jtf5.setText(null);jtf6.setText(null);
				jtf7.setText(null);
				jtf1.requestFocus();
				
				model.setRowCount(0);        // 전체 테이블 화면을 지우는 메서드
				select();                    // (지웠다가 다시 호출) DB에서 전체 내역을 조회하는 메서드 호출.
				
			}
		});
		
		
		// 학생정보수정(jb3) 버튼을 클릭했을 때 각각의 텍스트 필드에 입력된 정보를
	    // DB에 추가한 후 추가된 전체리스트를 JTable에 다시 보여주면 됨
		jb3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				connect();                   // 데이터베이스 연동 메서드 호출
				update();                    // 데이터베이스에 수정하는 메서드 호출
				
				
				// 입력 텍스트 필드 영역 초기화
				jtf1.setText(null);jtf2.setText(null);
				jtf3.setText(null);jtf4.setText(null);
				jtf5.setText(null);jtf6.setText(null);
				jtf7.setText(null);
				jtf1.requestFocus();
				
				model.setRowCount(0);        // 전체 테이블 화면을 지우는 메서드
				select();                    // DB에서 전체 내역을 조회하는 메서드 호출

			}
		});
		
		
		// JTable의 특정 행을 클릭한 산태로 학생삭제(jb4) 버튼을 눌렀을 때
	    // 클릭된 행을 DB에서 삭제시키는 작업 후, student 테이블의 전체 리스트를 
	    // JTable에 다시 보여주면 됨.
		jb4.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				int result = JOptionPane.showConfirmDialog
						(null, "정말로 삭제하시겠습니까?", "확인", 
								JOptionPane.YES_NO_OPTION);
				
				if(result == JOptionPane.CLOSED_OPTION) {
					JOptionPane.showMessageDialog(null, "취소를 클릭하였습니다");
				}else if(result == JOptionPane.YES_OPTION) {
					connect();
					delete();
				}else {
					JOptionPane.showMessageDialog(null, "취소 버튼을 누르셨습니다.");
					
				}
				
				
			}
		});
		

	}
	
	// DB를 연동하는 메서드
	void connect() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "web";
		String password = "1234";
		
		try {
			//1. 접속할 오라클 데이터베이스 드라이버를 메모리에 올리자 - 동적 작업
			Class.forName(driver);
			
			// 2. 오라클 데이터베이스와 연결을 하자.
			con = DriverManager.getConnection(url, user, password);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}  // connet() 메서드 end
	
	// student 테이블의 전체 내역을 조회하는 메서드.
	
	void select() {
		
	    try {

	    //1. 데이터 베이스에 SQL문을 전송하기 위한 쿼리문 작성.
	    String sql = "select * from student order by hakbun";	
	    	
	    // 2. 쿼리문을 전송을 하자.
		pstmt = con.prepareStatement(sql);
		
		// 3. 실제로 DB 상에서 쿼리문을 실행하도록 하자. 
		rs = pstmt.executeQuery();
		
		// 4. 레코드 수만큼 반복하여 데이터를 추출하여 model 객체에 저장해 주자.
		while(rs.next()) {
			String hakbun = rs.getString("hakbun");
			String name = rs.getString("name");
			String major = rs.getString("major");
			int year = rs.getInt("year");
			int age = rs.getInt("age");
			String phone = rs.getString("phone");
			String addr = rs.getString("addr");
			String regdate = rs.getString("regdate").substring(0, 10);
		
			Object[] date = {hakbun,name,major,year,age,phone,addr};
			
			// 저장한 한 개의 레코드(data)를 model에 추가해 주면 됨.
			model.addRow(date);
			
		}
		// 5.연결되어 있던 객체 닫아주기
		rs.close();pstmt.close(); con.close();
	    
	    } catch(SQLException e) {
	    	
	    	e.printStackTrace();
	    }
		
	} //select() 메서드 end
	
	
	//student 테이블에 부서 정보를 추가하는 메서드
	void insert() {
		
		
		
		try {
			// 1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
			String sql = "insert into student values(?,?,?,?,?,sysdate,?,?)";
						
			// 2. 쿼리문을 전송하자
			pstmt = con.prepareStatement(sql);
			
			pstmt.setString(1, jtf1.getText());
			pstmt.setString(2, jtf2.getText());
			pstmt.setString(3, jtf3.getText());
			pstmt.setInt(4, Integer.parseInt(jtf4.getText()));
			pstmt.setString(5, jtf6.getText());
			pstmt.setString(6, jtf7.getText());
			pstmt.setInt(7, Integer.parseInt(jtf5.getText()));
			
			// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
			int res = pstmt.executeUpdate();
			
			if(res > 0) {
				JOptionPane.showMessageDialog(null, "학생 추가 성공");
			}else {
				JOptionPane.showMessageDialog(null, "학생 추가 실패");
			}
			
			
			// 4. 연결되어 있던 객체 닫기
			pstmt.close();
	
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} // insert() 메서드 end
	
	
	//student 테이블의 특정 레코드를 수정하는 메서드
	void update( ) {
		
		
		try {
		//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
		String sql = "update student set year = ?, age = ?, phone = ?, addr =? where hakbun = ?";
		//2.쿼리문을 전송하다.
		pstmt = con.prepareStatement(sql);
		
		pstmt.setInt(1, Integer.parseInt(jtf4.getText()));
		pstmt.setInt(2, Integer.parseInt(jtf5.getText()));
		pstmt.setString(3, jtf6.getText());
		pstmt.setString(4, jtf7.getText());
		pstmt.setString(5, jtf1.getText());
		
		// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
		int res = pstmt.executeUpdate();
		
		if(res > 0) {
			JOptionPane.showMessageDialog(null, "학생 정보 수정 성공");
		}else {
			JOptionPane.showMessageDialog(null, "학생 정보 수정 실패");
		}		
				
		// 4. 연결되어 있던 객체 종료
		pstmt.close();    //con.close();
		
					
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		
	}  //update() 메서드 end 
	
			
		//student 테이블에서 특정 행을 삭제시키는 메서드
	 void delete() {
		 
		

			try {
				//1. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성,
				String sql = "delete from student where hakbun = ?";
				//2. 쿼리문을 전송하자.
				pstmt = con.prepareStatement(sql);
				
				//JTable에서 선택된 셀의 row값을 int형으로 반환해 주는 메서드.
				int row = table.getSelectedRow();
				
				// getValueAt(세로인덱스(행), 가로인데스(열))
				// ==> 원하는 위치(행, 열)의 데이터를 가져오는 메서드.
				pstmt.setString(1, (String)model.getValueAt(row, 0));
				
				// 3. 실제로 DB상에서 쿼리문을 실행하도록 하자.
				int res = pstmt.executeUpdate();
				
				if(res > 0) {
					JOptionPane.showMessageDialog(null, "학생 삭제 성공");
				}else {
					JOptionPane.showMessageDialog(null, "학생 삭제 실패");
				}		
				
				model.removeRow(row);        //테이블 상의 한 줄 삭제/
				
				// 4. 연결되어 있던 객체 종료.
				pstmt.close();con.close();
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			
	 }

	
	
	public static void main(String[] args) {
		
		new STUDENT();

	}

}