Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- zipcode
- 스프링
- 아이폰
- Android
- SEQUENCE
- 외래키
- java
- 설치
- 우편번호
- iPhone
- IT·컴퓨터
- 자바
- 안드로이드
- MVC
- 이클립스
- 개행처리
- IO
- ibatis bind
- Spring
- ibatis parameter
- ibatis 개행
- 오라클
- Objective C
- Oracle
- Eclipse
- SQL
- 연동
- jdbc
- 예제
- Android SDK
Archives
- Today
- Total
MisoBoy Blog...
Swing 을 이용한 DB 연동 프로그램 본문
Swing 을 이용한 DB 연동 프로그램 입니다.
기능 설명 :
- ID : DB 접속 ID
- PASSWORD : DB 접속 PASSWORD
- Connect : ID,PASSWORD 입력 후 Connect 버튼 클릭시 DB 연결
- Close : DB 연결 후 Close 버튼 클릭 시 연결 해제
- Execute : 하단 SQL 문을 작성후 Enter 를 치거나 Execute 버튼 클릭시 SQL 문 실행
- Exit : 프로그램 Close
- 하단 SQL TextField : SQL 문을 작성 후 Enter 쳐도 실행이 된다.
< JDBCSwing.java >
import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.border.BevelBorder; import javax.swing.border.TitledBorder; import javax.swing.table.TableModel; public class JDBCSwing implements ActionListener { private JFrame f; private Font font; private DBBean db; private Connection conn; private Container con; private JScrollPane pane; private JTable table; private JPanel nPanel, cPanel, sPanel; private JTextField tfID, tfPwd, tfSql; private JButton btnConnect, btnClose, btnExecute, btnExit; // DB 접속 Constructor JDBCSwing() throws IOException, ClassNotFoundException{ db = new DBBean("oracle"); db.loadDriver(); font = new Font("Times New Romans", Font.BOLD, 25); } private void go(){ // Frame 제작 f = new JFrame("My SQLgate"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); con = f.getContentPane(); con.setLayout(new BorderLayout()); nPanel = getNorthPanel(); cPanel = getCenterPanel(); sPanel = getSouthPanel(); con.add("North", nPanel); con.add("Center", cPanel); con.add("South", sPanel); f.setSize(600, 400); f.setVisible(true); } private JPanel getSouthPanel(){ //SQL 문을 입력할 South Panel JPanel panel = new JPanel(); BevelBorder bb = new BevelBorder(BevelBorder.RAISED); TitledBorder tb = new TitledBorder(bb, "SQL 문을 입력하세요"); panel.setBorder(tb); panel.setLayout(new BorderLayout()); panel.add(tfSql = new JTextField()); // tfSql TextField 에서 Enter 눌렀을 경우 발생 Event tfSql.addActionListener(this); tfSql.setFont(font); return panel; } private JPanel getCenterPanel(){ // 테이블을 출력할 Center Panel JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); pane = new JScrollPane(table = new JTable()); panel.add(pane); return panel; } private JPanel getNorthPanel(){ // ID, PASSWORD 와 Connect, Close, Excute, Exit 버튼을 넣을 North Panel JPanel panel = new JPanel(); panel.setLayout(new GridLayout(2,4)); panel.add(new JLabel("ID : ", JLabel.CENTER)); panel.add(tfID = new JTextField()); panel.add(new JLabel("PASSWORD : ", JLabel.CENTER)); panel.add(tfPwd = new JPasswordField()); panel.add(btnConnect = new JButton("Connect")); btnConnect.addActionListener(this); panel.add(btnClose = new JButton("Close")); btnClose.addActionListener(this); panel.add(btnExecute = new JButton("Execute")); btnExecute.addActionListener(this); panel.add(btnExit = new JButton("Exit")); btnExit.addActionListener(this); return panel; } // Button 을 클릭 했을 경우 발생하는 Event Method public void actionPerformed(ActionEvent evt){ if(evt.getSource() == btnExit){ System.exit(1); }else if(evt.getSource() == btnConnect){ try{ dbConnect(); JOptionPane.showMessageDialog(f, "DB Connection Success", "Information", JOptionPane.INFORMATION_MESSAGE); }catch(Exception ex){ JOptionPane.showMessageDialog(f, ex.getMessage(), "Exception", JOptionPane.ERROR_MESSAGE); tfID.setText(""); tfPwd.setText(""); //tfID.setNextFocusableComponent(aComponent) } }else if(evt.getSource() == btnClose){ try{ dbClose(); JOptionPane.showMessageDialog(f, "Good Bye", "Information", JOptionPane.INFORMATION_MESSAGE); }catch(SQLException ex){ JOptionPane.showMessageDialog(f, ex.getMessage(), "Exception", JOptionPane.ERROR_MESSAGE); } //Excute Button or tfSql 에서 Event 발생 했을 경우 실행 }else if(evt.getSource() == btnExecute || evt.getSource() == tfSql){ try{ execute(); }catch(SQLException ex){ JOptionPane.showMessageDialog(f, ex.getMessage(), "Exception", JOptionPane.ERROR_MESSAGE); } } } // Excute 버튼을 클릭했을 경우 실행될 Method private void execute() throws SQLException { Statement stmt = this.conn.createStatement(); String sql = tfSql.getText().trim(); // 사용자가 SQL 마지막에 ; 넣었을 경우 if(sql.lastIndexOf(";") > 0) sql = sql.substring(0, sql.length() - 1); java.util.StringTokenizer st = new java.util.StringTokenizer(sql); // 사용자가 SELECT 문을 실행 했을 경우 if(st.nextToken().toUpperCase().equals("SELECT")){ ResultSet rs = stmt.executeQuery(sql); // SELECT 문 일경우 TABLE 정보 출력하기 위해 // MyTableModel Class 생성 TableModel tm = new MyTableModel(rs); this.table.setModel(tm); }else{ // SELECT 외 실행 했을 경우 //UPDATE, INSERT, DELETE, DML, DCL int rowcount = stmt.executeUpdate(sql); JOptionPane.showMessageDialog(f, rowcount + "행이 잘 반영됐습니다."); } } // Close 버튼을 클릭 했을 경우 SQL 닫기 Method private void dbClose() throws SQLException { if(this.conn != null) conn.close(); } // DB접속 & 접속 했을 경우 노출될 문구 private void dbConnect() throws Exception { String id = this.tfID.getText().trim(); String pwd = this.tfPwd.getText().trim(); String url = "jdbc:oracle:thin:@localhost:1521/ORCL"; this.conn = DriverManager.getConnection(url, id, pwd); java.net.InetAddress ia = java.net.InetAddress.getLocalHost(); f.setTitle(id + "@" + ia.getHostName() + ":1521/ORCL"); } // 최초로 실행될 Main 으로 Swing 실행 public static void main(String[] args) { try{ new JDBCSwing().go(); }catch(Exception ex){ ex.printStackTrace(); } } }
< MyTableModel.java >
import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.Vector; import javax.swing.table.DefaultTableModel; public class MyTableModel extends DefaultTableModel { private ResultSet rs; public MyTableModel(ResultSet rs) throws SQLException{ this.rs = rs; go(); } private void go() throws SQLException{ // ResultSetMetaData 선언 ResultSetMetaData rsmd = this.rs.getMetaData(); // 해당 컬럼 갯수 int count = rsmd.getColumnCount(); // 컬럼명을 삽입할 Header Vector Vector<string> header = new Vector<string>(1,1); for(int i = 1 ; i <= count ; i++){ header.addElement(rsmd.getColumnLabel(i)); } Vector<object> dataVector = new Vector<object>(1,1); while(rs.next()){ Vector<object> rowVector = new Vector<object>(1,1); // 해당 컬럼의 데이터를 타입별로 가져와서 rowVector 에 삽입 (열로 삽입) for(int i = 1 ;i <= count ; i++){ switch(rsmd.getColumnType(i)){ case Types.INTEGER : case Types.NUMERIC : rowVector.addElement(rs.getInt(i)); break; case Types.FLOAT : rowVector.addElement(rs.getFloat(i)); break; case Types.DOUBLE : rowVector.addElement(rs.getDouble(i)); break; case Types.DATE : rowVector.addElement(rs.getDate(i)); break; case Types.CHAR : default : rowVector.addElement(rs.getString(i)); break; }//switch end }//for end // 열로 들어가 있는 rowVecter 데이터를 DataVecotr에 행으로 삽입 dataVector.addElement(rowVector); } // 모두 저장된 dataVector 와 header 통합 this.setDataVector(dataVector, header); } }
< DBBean.java >
import java.sql.SQLException; import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.util.Properties; import java.io.FileInputStream; import java.io.IOException; import java.io.File; public class DBBean { private Connection conn; private Properties info; private Statement stmt; private ResultSet rs; //Constructor public DBBean(String rdbms) throws IOException{ File file = null; switch(rdbms.toUpperCase().charAt(0)){ case 'O': //Oracle file = new File("D:\\temp\\dbinfo.properties"); break; case 'M': //MySQL file = new File("D:\\temp\\mysqlinfo.properties"); break; default : } info = new Properties(); info.load(new FileInputStream(file)); } public void loadDriver() throws ClassNotFoundException { Class.forName(this.info.getProperty("DBDRIVER")); } public void setConnection() throws SQLException { this.conn = DriverManager.getConnection(this.info.getProperty("DBURL"), this.info.getProperty("DBID"), this.info.getProperty("DBPWD")); } public Connection getConnection() throws SQLException { return this.conn; } public void setStatement() throws SQLException { this.stmt = conn.createStatement(); } public Statement getStatement() throws SQLException{ return this.stmt; } public ResultSet executeSelect(String sql) throws SQLException { //SELECT //System.out.println("DBBean sql = " + sql); rs = this.stmt.executeQuery(sql); return this.rs; } public int executeNonSelect(String sql) throws SQLException { int rowcount = 0; //UPDATE, DELETE, INSERT, DDL, DCL rowcount = this.stmt.executeUpdate(sql); return rowcount; } public void connClose() throws SQLException{ if(this.conn != null) this.conn.close(); } public void stmtClose() throws SQLException { if(this.stmt != null) this.stmt.close(); } public void rsClose() throws SQLException { if(this.rs != null) this.rs.close(); } }
'Java' 카테고리의 다른 글
Enumeration & Iterator (0) | 2011.09.01 |
---|---|
Singleton Pattern (디자인 패턴) (0) | 2011.07.27 |
[20110720] ResultSetMetaData 객체를 사용하여 출력하는 예제 (0) | 2011.07.20 |
[20110720] JDBC 를 통한 DB 연동 (0) | 2011.07.20 |
[20110715] Java JDBC (JDBC 로 ORACLE 연동하여 ZIPCODE 프로그램) (0) | 2011.07.15 |