IT/Java

자바에서 mysql 연습 2

인러너 2018. 5. 24. 17:30

와우 너무 힘들었다 .. remove()를 몰라서 고생했다 

그리고 rs.getString()과 배열의 시작 값이 달라서 오류도 많이 났다 배열= 0 부터

그리고 rs.close() 를 마지막에 넣었는데 열려있지 않은 상태에서 닫고자 하면 오류가난다 





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
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.*;
import java.sql.*;
 
public class dbTest extends JFrame implements ActionListener{
    
    JPanel p,p2;
    JTextField tf;
    JButton b1,b2,b3;
    Connection conn;
    Statement st;
    ResultSet rs;
    ResultSetMetaData md;
    String sql;
 
    // 텍스트필드, 버튼1,2,3 생성후 패널에 부착 , 패널,패널2  프레임에 부착 
    public dbTest() {
        
        setTitle("db시험");
        setSize(500,600);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        p = new JPanel();
        p2 = new JPanel();
        
        p.setLayout(new GridLayout(41));
        
        tf = new JTextField();
        tf.setSize(10020);
        p.add(tf);
        
        b1 = new JButton("Create 버튼");
        b1.setSize(10020);
        b1.addActionListener(this);
        p.add(b1);
        
        b2 = new JButton("Insert 버튼");
        b2.setSize(10020);
        b2.addActionListener(this);
        p.add(b2);
        
        b3 = new JButton("Select 버튼");
        b3.setSize(10020);
        b3.addActionListener(this);
        p.add(b3);
        
        
        add("North",p);     // 위치를 지정하지 않으면 보이지않음.. 
        add("Center",p2);
        
        setVisible(true);
    }
    
    //sql커넥션 과정을 메소드화 시킴 
    public void connection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample""root""0426");
            st = conn.createStatement();
            
        } catch(ClassNotFoundException ce) {
            System.out.println("driver 오류");
        } catch(SQLException se) {
            System.out.println("sql 오류");
        } catch(Exception e1) {
            System.out.println("그외 오류");
        }
        
    }
    
    //버튼 세부기능 작성 
    public void actionPerformed(ActionEvent e) {
        try {
            connection(); //연결을 여기 넣어줌 .. 버튼을 클릭할때마다 rs.close() 등 이 작동되기때문에 다시 생성 을 위해서.. 
            
            if(e.getSource() == b1 || e.getSource() == b2) { //사실b1 , b2는 나눌필요 없음 , 시험때문.
                sql = tf.getText();
                st.executeUpdate(sql);
                System.out.println("성공");
            }
            
            //테이블 작성후 패널2에 부착하는 기능 까지 있음.
            else if(e.getSource()== b3) { 
                p2.removeAll(); // 다시 지워줘야지 잘나옴 아니면 밑으로 추가되거나 안나옴.. 
                
                sql =tf.getText();
                rs = st.executeQuery(sql);
                md = rs.getMetaData();
                
                //입력값에 따른 테이블 작성을 위해 복잡하게 만듬 
                Object[][] ob = new Object[0][md.getColumnCount()];
                String[] str = new String[md.getColumnCount()];
                DefaultTableModel model ;
                JTable table;
                JScrollPane js;
                
                for(int i = 0 ; i<str.length; i++) {
                    str[i] = md.getColumnName(i+1);
                }
                
                model = new DefaultTableModel(ob,str); // ob는 열 갯수를 위해, str은 열에 들어갈 이름 쉽게말하면 컬럼네임
                table = new JTable(model);
                js = new JScrollPane(table);
                p2.add(js);
                
                //테이블에 행추가 
                while(rs.next()) {
                    Object[] obb = new Object[md.getColumnCount()];
                    
                    for(int i =0 ; i<md.getColumnCount();i++) {
                        obb[i] = rs.getString(i+1);
                    }
                    model.addRow(obb);// while이 작동되는 동안 한 행씩 테이블에 입력된다 
                }                            
                setVisible(true); //이걸 써줘야지 버튼 누를때 마다 잘나옴. 
            }
            
        }catch(SQLException se) {
            System.out.println("버튼 sql오류");
        }catch(Exception e1) {
            System.out.println("버튼 그외오류");
        }finally {
            if (rs != null) {try{rs.close();}catch(SQLException se) {System.out.println("rs오류");}}
            try{st.close();}catch(SQLException se) {System.out.println("st오류");}
            try{conn.close();}catch(SQLException se) {System.out.println("conn오류");}
        }
        
        
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
    dbTest dt = new dbTest();
    
    }
 
}
 
cs