CAFE

수업내용

JTable + JDBC 쉬운 예제 있는 곳

작성자2pro|작성시간09.12.09|조회수249 목록 댓글 0

http://sunfuture.springnote.com/pages/3364253

 

 

09/05/12 과제

09/05/12 과제 :  아래와 같이, Frame을 만들어서 JComboBox 와 JTextField 에 입력된 값을 SQL문으로 전송해서 아래에 출력하는 프로그램을 만들어라.

JdbcFindMulti2.JPG

개선해야할 점 : jtf 에서 엔터키를 쳤을 때도 작동하도록 만드는 게 좋을 듯 하다.

출력결과가 리스트의 아래쪽에 나온다. ㅡㅅ-);; 제일 위로 이동해서 출력하게 하는 방법은 없을까?

아니면, 출력되어 있는 내용들을 쓰윽 지워버리는 것은... 안될까?? tablemodel 함수로 행의 수를 파악한 다음 위에서부터 삭제해!? For 문 돌려?

OTL... 해보지 않으면 모르는거지. ㅎㅎ


  1. import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.Vector;

    public class JdbcFindMulti2 extends JFrame implements ActionListener {
        // 변수선언부
        JLabel jlb;
        JButton jbtn;
        JTextField jtf;
        JComboBox jcb;
        JPanel jp;
        Vector article, title, rowData, first;
        String coln, colv, sql;
        DefaultTableModel model;
        Container c;
        String[] m = {"번호", "이름", "주소"};

        //database() 에서 사용할 변수들
        String db_connect = "jdbc:oracle:thin:@61.103.103.184:1521:cjedu";  //JDBC URL
        String db_user = "scott";
        String db_passwd = "tiger";

        Connection conn;
        Statement stat;

        public JdbcFindMulti2(){
            database(); //DB 준비작업
            makeGUI();    //화면 구성

            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent x){
                   try {
                   Window w = (Window)x.getSource();
                   w.setVisible(false);
                   w.dispose();//화면에 썼던 자원을 해지하는것.
                  
                   stat.close();
                   conn.close();
                   System.exit(0); //프로세스 종료
                   }catch(Exception e){}
                  }
             });
        }

        public void database() {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                conn = DriverManager.getConnection( db_connect, db_user, db_passwd );
                stat = conn.createStatement();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        //database 에서 만들어진 자료를
        public void makeGUI() {
            c = getContentPane();
            c.setLayout( new BorderLayout() );

            //North에 들어갈 객체들
            jlb = new JLabel("Data to Field");

            jcb = new JComboBox(m);
            jtf = new JTextField(20);
            jbtn = new JButton("검색");

            jcb.addActionListener(this);
            jtf.addActionListener(this);
            jbtn.addActionListener(this);

            jp = new JPanel();
            jp.add(jlb);
            jp.add(jcb);
            jp.add(jtf);
            jp.add(jbtn);
            c.add(jp, "North");

            first = new Vector();
            title = new Vector();
            title.add("Num");
            title.add("Name");
            title.add("Address");

            model = new DefaultTableModel();
            model.setDataVector(first, title);
            JTable table = new JTable(model);
            JScrollPane sp = new JScrollPane(table);
            c.add(sp,"Center");




        }

        public void actionPerformed(ActionEvent ae){
            Object o = ae.getSource();
            if ( o == jcb ) {
               
            } else if ( o == jtf ) {
                colv = jtf.getText();

            } else if ( o == jbtn ) {
                if (jcb.getSelectedItem().equals("번호")){
                    coln = "num";
                } else if (jcb.getSelectedItem().equals("이름")) {
                    coln = "name";
                } else{
                    coln = "address";
                }
                colv = jtf.getText();
                sql = "SELECT * FROM customer WHERE "+ coln + " like '%" + colv + "%'";
                if (jtf.getText().equals("")) {
                    System.out.println("데이터를 입력하세요.");
                } else {
                    try {
                        ResultSet rs = stat.executeQuery(sql);
                        while(rs.next()) {
                            rowData = new Vector();    //새로운 행을 담을 벡터
                            rowData.add(rs.getString(1));
                            rowData.add(rs.getString(2));
                            rowData.add(rs.getString(3));

                            model.addRow(rowData);
                            jtf.setText("");
                        }           
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        public static void main(String[] args)    {
            JdbcFindMulti2 jfm = new JdbcFindMulti2();
            jfm.pack();
            jfm.setSize(500,500);
            jfm.setVisible(true);
        }
    }

  1. // 위 코드와의 차이점이라고 한다면, database(String sql) 이라고 하는 메소드를 오버로딩으로 해서 하나 추가했다. 그리고
    // DefaultTableModel newTable(); 이라고 하는 메소드 안에 넣어봤다. 쓸데없는 일일지도...
  2. import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.Vector;

    public class JdbcFindMulti2 extends JFrame implements ActionListener {
        // 변수선언부
        JLabel jlb;
        JButton jbtn;
        JTextField jtf;
        JComboBox jcb;
        JPanel jp;
        Vector article, title, rowData, first;
        String coln, colv, sql;
        DefaultTableModel model;
        Container c;
        String[] m = {"번호", "이름", "주소"};

        //database() 에서 사용할 변수들
        String db_connect = "jdbc:oracle:thin:@61.103.103.184:1521:cjedu";  //JDBC URL
        String db_user = "scott";
        String db_passwd = "tiger";

        Connection conn;
        Statement stat;

        public JdbcFindMulti2(){
            database(); //DB 준비작업
            makeGUI();    //화면 구성

            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent x){
                   try {
                   Window w = (Window)x.getSource();
                   w.setVisible(false);
                   w.dispose();//화면에 썼던 자원을 해지하는것.
                 
                   stat.close();
                   conn.close();
                   System.exit(0); //프로세스 종료
                   }catch(Exception e){}
                  }
             });
        }

        public void database() {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                conn = DriverManager.getConnection( db_connect, db_user, db_passwd );
                stat = conn.createStatement();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        //actionListener에서 검색 버튼을 눌렀을 경우, jtf 값이 Null이 아니면 호출된다.
        public void database(String sql){
            try {
                        ResultSet rs = stat.executeQuery(sql);
                        while(rs.next()) {
                            rowData = new Vector();    //새로운 행을 담을 벡터
                            rowData.add(rs.getString(1));
                            rowData.add(rs.getString(2));
                            rowData.add(rs.getString(3));

                            model.addRow(rowData);
                            jtf.setText("");
                        }          
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
        }

        public void newTable() {
            model = new DefaultTableModel();
            model.setDataVector(first, title);
            JTable table = new JTable(model);
            JScrollPane sp = new JScrollPane(table);
            c.add(sp,"Center");
        }

        //database 에서 만들어진 자료를
        public void makeGUI() {
            c = getContentPane();
            c.setLayout( new BorderLayout() );

            //North에 들어갈 객체들
            jlb = new JLabel("Data to Field");

            jcb = new JComboBox(m);
            jtf = new JTextField(20);
            jbtn = new JButton("검색");

            jcb.addActionListener(this);
            jtf.addActionListener(this);
            jbtn.addActionListener(this);

            jp = new JPanel();
            jp.add(jlb);
            jp.add(jcb);
            jp.add(jtf);
            jp.add(jbtn);
            c.add(jp, "North");

            first = new Vector();
            title = new Vector();
            title.add("Num");
            title.add("Name");
            title.add("Address");

            newTable();

        }

        public void actionPerformed(ActionEvent ae){
            Object o = ae.getSource();
            if ( o == jcb ) {
               // 경우에 따라서는 선택된 항목에 따라서 정렬된 값을 출력할 수 있겠다.
            } else if ( o == jtf ) {
                colv = jtf.getText();
                System.out.println(colv);

            } else if ( o == jbtn ) {
                if (jcb.getSelectedItem().equals("번호")){
                    coln = "num";
                } else if (jcb.getSelectedItem().equals("이름")) {
                    coln = "name";
                } else{
                    coln = "address";
                }
                colv = jtf.getText();
                sql = "SELECT * FROM customer WHERE "+ coln + " like '%" + colv + "%'";
                if (jtf.getText().equals("")) {
                    System.out.println("데이터를 입력하세요.");
                } else {
                    this.database(sql);
                }
            }
        }

        public static void main(String[] args)    {
            JdbcFindMulti2 jfm = new JdbcFindMulti2();
            jfm.pack();
    //        jfm.setSize(500,500);
            jfm.setVisible(true);
        }
    }
다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼