갈림길 이정표

[java] DB 역행, 첫행, 마지막행 레코드 읽기 본문

Programming Language/Java 마스터하기(feat. 이것이 자바다)

[java] DB 역행, 첫행, 마지막행 레코드 읽기

이몽뇽 2020. 8. 5. 00:40
package pack1;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

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

public class DbTest4RexMove extends JFrame implements ActionListener{
	JButton btnF, btnP, btnN, btnL;
	JLabel lblNo, lblName;
	
	Connection conn;
	Statement stmt;
	ResultSet rs;

	
	
	
	public DbTest4RexMove() {
		super("레코드 이동");
		
		layInit();
		accDb();
		
		setBounds(300, 300, 300, 250);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	}
	
	private void layInit() {
		lblNo = new JLabel("");	//JLabel("", 5)은 자릿 수 못줌 (TextField 는 가능)
		lblName = new JLabel("");
		JPanel panel = new JPanel();
		panel.add(new JLabel("직원 자료: "));
		panel.add(lblNo);
		panel.add(lblName);
		add("North",panel);
		
		btnF = new JButton("|<<");	//처음
		btnP = new JButton("<<");	//이전
		btnN = new JButton(">>");	//다음
		btnL = new JButton(">>|");	//마지막
		
		JPanel panel2 = new JPanel();
		panel2.add(btnF);
		panel2.add(btnP);
		panel2.add(btnN);
		panel2.add(btnL);
		add("Center",panel2);
		
		btnF.addActionListener(this);
		btnP.addActionListener(this);
		btnN.addActionListener(this);
		btnL.addActionListener(this);
	}
	
	private void accDb() {	//DB 접속
		try {
			Class.forName("org.mariadb.jdbc.Driver");	//딱 한번 연결  (필요할 때만 연결해줘야 돼)
			
			//DB 접속은 한번 하고 끝내는 게 맞지만 연속된 자료를 보여줘야할 때는? (Connection로 계속 연결) → 어플리케이션만 권장
			//웹에서는 cookie, session으로 연결되어 있는 거처럼 느끼게 해줌
			
			//경우에 따라 DB 연결이 지속되어야 한다.(비권장)
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "369369");
			stmt = conn.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,	//DB연결 지속가능케 하는 옵션 (TYPE_FORWARD_ONLY(기본값))
					//수정불가능(SCROLL INSENSITIVE) ?????
					ResultSet.CONCUR_READ_ONLY);	//레코드 역방향 이동 가능
			rs = stmt.executeQuery("SELECT jikwon_no, jikwon_name FROM jikwon");
			
//			rs.next();	//한 행 이동해야 첫줄 읽기
			
			display();
			
		} catch (Exception e) {
			System.out.println("err: " + e);
		}	
	}
	
	
	private void display() {
		try {
			lblNo.setText(rs.getString("jikwon_no"));
			lblName.setText(rs.getString("jikwon_name"));
		} catch (Exception e) {
			
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
			try {
				if(e.getSource() == btnF) rs.first();
				else if(e.getSource() == btnP) rs.previous();
				else if(e.getSource() == btnN) rs.next();	//원래 기본 기능
				else if(e.getSource() == btnL) rs.last();
				
				display();
			} catch (Exception e2) {	// 에러가 나지 않을 것이 확실하다면 굳이 안적어도 됨 

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

}
Comments