JAVA/Basic
JDBC) 테이블에 DB연동하기 3) 결과
붓그린
2017. 6. 23. 12:35
1) 테이블표
2) 이클립스 콘솔
3) 오라클
1 2 3 4 5 6 7 8 9 | SQL> select * from person; NAME AGE TEL --------------- --- -------------------- 김철수 25 031-832-4321 홍길동 23 02-123-1264 김길수 34 02-343-7823 김영희 20 02-456-1567 | cs |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | package j0623; // 테이블에 DB연동하기 import java.awt.*; import java.awt.event.*; // ActionEvent import javax.swing.*; // JTable import javax.swing.table.*; // DefaultTableModel을 이용하여 데이터 저장 import java.sql.*; // DB연동 public class DB_Person extends JFrame implements ActionListener { JLabel l1,l2,l3; //이름, 나이, 전화번호 JTextField tf1,tf2,tf3; JPanel panel; //+JLabel, JTextArea 부착 //JTable Object ob[][]=new Object[0][3]; // 데이터 표시(행X) 열만 나오게 설정 DefaultTableModel model; //데이터 저장부분 JTable table; JScrollPane js; String str[]= {"이름","나이","전화번호"}; //컬럼명 // DB 연동 Connection con=null; PreparedStatement pstmt=null; //SQL구문을 실행 ResultSet rs=null; // select 구문을 사용할 때 반드시 필요 public DB_Person() { // 컴포넌트 생성하여 부착 super("테이블에 데이터 입력"); panel=new JPanel(); panel.setBackground(Color.ORANGE); // <-> getBackground() // 1) 문자열, 2)위치(left,Center,right) l1=new JLabel("이름",JLabel.CENTER); l2=new JLabel("나이",JLabel.LEFT); //default l3=new JLabel("전화번호",JLabel.RIGHT); tf1=new JTextField(); tf2=new JTextField(); tf3=new JTextField(); // 패널의 배치 - 3행 2열(GridLayout) panel.setLayout(new GridLayout(3,4)); //구조 변경 panel.add(l1); panel.add(tf1); // 이름 panel.add(l2); panel.add(tf2); // 나이 panel.add(l3); panel.add(tf3); // 전화번호 this.add("North",panel); // 부착 // JTable 가운데 배치 model=new DefaultTableModel(ob, str); //1)데이저 저장[][], 2)컬럼명 table=new JTable(model); // table=new JTable(ob,str); js=new JScrollPane(table); this.add("Center", js); setBounds(250, 250, 300, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); // 이벤트 연결하는 코딩 tf1.addActionListener(this); tf2.addActionListener(this); tf3.addActionListener(this); // DB 접속하여 select문장을 사용해 JTable에 보여주는 구문 코딩 connect(); // DB접속하는 메소드 select(); // select하는 메소드 this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub try { // 프로그램 종료전에 메모리에 DB연동 부분 해제 if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); }catch(Exception e2) { System.exit(0); } } }); } // connect()는 내부적으로 호출하기때문에 다른 클래스에서 호출되면 안됨 private void connect() { try { // 1) 접속할 드라이버를 메모리에 올리기 : 정적 메소드 Class.forName("oracle.jdbc.driver.OracleDriver"); String url="jdbc:oracle:thin:@localhost:1521:orcl"; // 2) 접속하기 위한 메소드(1.접속url 2.계정명 3.계정암호) con=DriverManager.getConnection(url, "scott", "tiger"); System.out.println("접속 : "+con); }catch(Exception e) { System.out.println("DB 접속 오류 : "+e); } } public void select() { try { // 1) 실행할 SQL 문장 작성 String sql="select * from person"; //지역변수 선언 pstmt=con.prepareStatement(sql); System.out.println("pstmt : "+pstmt); rs=pstmt.executeQuery(); // select문장 System.out.println("rs : "+rs); // person테이블에서 불러오기 while(rs.next()) { String name=rs.getString("name"); String age=rs.getString("age"); String tel=rs.getString("tel"); // Object[]을 만들어 저장하여 model에 추가하면 JTable에서 결과를 확인 가능 Object data[]= {name,age,tel}; model.addRow(data); System.out.println(name+", "+age+", "+tel); // 콘솔 출력 } }catch(Exception e) { System.out.println("select() 실행 오류 : " +e); } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==tf1) { // 이름을 입력한 후 enter 친 경우 tf2.requestFocus(); // 커서입력 } else if(e.getSource()==tf2) { tf3.requestFocus(); } else if(e.getSource()==tf3) { if(tf1.getText().equals("") && tf2.getText().equals("") && tf3.getText().equals("")) { // alert(~) // JOptionPane.showMessageDialog(부모명,경고메세지) JOptionPane.showMessageDialog(this, "값을 입력하세요."); tf1.requestFocus(); // 이름필드부터 입력할 수 있게 커서 이동 return; } // 다 입력을 했다면 값을 모델에 데이터를 입력 : JTable에 화면 결과 출력 // 형식) 모델객체명.addRow(저장할 값(배열)); Object data[]= {tf1.getText(), tf2.getText(), tf3.getText()}; model.addRow(data); // model에 저장한 데이터를 오라클 테이블에 저장(inset) try{ // String sql="insert into person values('김영희','26',서울시 강남구')"; String sql="insert into person values(?,?,?)"; // ? : 파라미터 인수 pstmt=con.prepareStatement(sql); // 형식) pstmt.set자료형(?순서번호,저장할값); => setString, setInt~ pstmt.setString(1, tf1.getText()); pstmt.setString(2, tf2.getText()); pstmt.setString(3, tf3.getText()); // 반환값 int insert=pstmt.executeUpdate(); // 1:sql성공, 0:sql실패 System.out.println("데이터 성공 유무(insert) : "+insert); // select 조회 rs=pstmt.executeQuery("select * from person"); while(rs.next()) { String name=rs.getString("name"); String age=rs.getString("age"); String tel=rs.getString("tel"); System.out.println(name+", "+age+", "+tel); // 콘솔 출력 } }catch(Exception e2) { System.out.println("person테이블에 데이터 입력 실패 : "+e2); } // 재입력을 위한 필드 초기화 tf1.setText(""); tf2.setText(""); tf3.setText(""); tf1.requestFocus(); // 커서 이동 } } public static void main(String[] args) { // TODO Auto-generated method stub new DB_Person(); } } | cs |