資料庫查詢
利用Connection對象的createStatement方法建立Statement對象,利用Statement對象的executeQuery()方法執行SQL查詢語句進行查詢,傳回結果集,再形如getXXX()的方法從結果集中讀取資料。經過這樣的一系列步驟就能實現對資料庫的查詢。
【例】Java應用程式存取資料庫。應用程式開啟考生資料表ksInfo,從中取出考生的各項資料。設考生資訊資料庫的架構如下:
import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.sql.*;public class Example10_9 extends JFrame implements ActionListener{ public static Connection connectByJdbco String url, String username,String password){ Connection con = null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //載入ODBC驅動程式} catch (Exception e){ e.printStackTrace(); return null; //載入失敗,連線不成功} try{ con = DriverManager.getConnection(url, username, password); } catch (SQLException e){ e.printStackTrace(); return null; //連線失敗} return con; //連線成功} String title[] ={"考號", "姓名", "成績", "位址", "履歷"}; JTextField txtNo = new JTextField(8 ); JTextField txtName = new JTextField(10); JTextField txtScore = new JTextField(3); JTextField txtAddr = new JTextField(30); JTextArea txtresume = new JTextArea(); JButton prev = new JButton("前一個"); JButton next = new JButton("後一個"); JButton first = new JButton("第一個") ; JButton last = new JButton("最後一個"); Statement sql; //SQL語句物件ResultSet rs; //存放查詢結果物件Example10_9(Connection connect){ super("考生資訊檢視視窗"); setSize(450, 350); try{ sql = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ON. sql.executeQuery("SELECT * FROM ksInfo"); Container con = getContentPane(); con.setLayout(new BorderLayout(0, 6); JPanel p[] = new JPanel[4]; for (int i = 0; i < 4; i++){ p[ i] = new JPane(new FlowLayout(FlowLayout.LEFT, 8, 0)); p[i].add(new JLabel(title[i])); } p[0].add(txtNo); p[1].add(txtName); p[2].add(txtScore); p[3].add(txtAddr); JPanel p1 = new JPane(new GridLayout94, 1, 0, 8)); JScrollPane jsp = new JScrollPane(txtResume, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setPreforredSize(new Dimension(300, 60); for (int i = 0; i < 4; i++){ p1.add; JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0); p2.add(new JLabel(title[4])); p2.add(jsp); Jpanel p3 = new Jpanel(); p3.add(prev); p3.add (next); p3.add(first); p3.add(last); prev.addActionListener(this); next.addActionListener(this); first.addActionListener(this); last.addActionlistener(this); rs.first(); readRecord(); } catch (Exception e){ e.printStackTrace(): } setVisraceible(ture); } public void modifyRecord(Connection connect){ String stuNo = (String)JOptionPane.showInputDialog(null, "請輸入考生考號", "輸入考號對話框", JOptionPane.PLAIN_MESSAGE, null, null, ""); try { sql = connect.createStatement(ResultSet.TYPE_SCRO .CONCUR_READ_ONLY); rs = sql.executeQuery("SELECT * FROM ksInfo"); Container con = getContentPane(); con.setLayout(new Boarderlayout(0, 6)); Jpanel p[] = new JPanel[4]; for (int i = 0; i < ; i++){ p[i] = new JPane(new FlowLayout(flowLayout.LEFT, 8, 0)); p[i].add(new JLabel(title[i])); } p[0].add(txtNo); p[1].add(txtName); p[2].add(txtScore ); p[3].add(txtAddr); Jpanel p1 = new Jpane(new GridLayout(4, 1, 0, 8)); JScrollPane jsp = new JScrollPane(txtResume, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setPreferredSize (new dimension(300, 60)); for (int i = 0++ i < 4 dimension(300, 60)); for (int i = 0++ i < 4 i i(paddi); } Jpanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0)); p2.add(new JLableI(title[4])); p2.add(jsp); JPanel p3 = new JPanel(); p3.add(prev) ; p3.add(next); p3.add(first); p3.add(last); prev.addActionListener(this); next.addActionListener(this); first.addActionListenerIthis); last.addActionListener(this); rs.first(); readRecord(); } catch (Exception e){ e.printStackTrace(); } setVisraceible(true); } booleanion e){ e.printStackTrace(); } setVisraceible(true); } boolean readRecord(){ try{ txtNo.setText(rs.getString("考號")); txtName.setText(rs.getString("姓名")); txtScore.setText(rs.getString("成績")); txtAddr.setText(rs.getString("位址")); txtResume.setText(rs.getString( "簡歷")); } catch (SQLException e){ e.printStackTrace(); return false; } return true; } public void actionPerformed(ActionEvent e){ try{ if (e.getSource() == prev)rs.previous(); else if (e.getSource() == next)rs.next(); else if (e.getSource( ) == first)rs.first(); else if (e.getSource() == last)rs.last(); readRecord(); } catch (Exception e2){} } public static void main(String args[]){ connection connect = null; JFrame .setDefaultLookAndFeeDecorated(true); Font font = new Font("JFrame", Font.PLAIN, 14); if ( (connect =connectByJdbcOdbc("jdbc:odbc:redsun", "xia", "1234")) == null){ JOptionPane.showMessageDialog(null, "資料庫連線失敗!"); System.exit ( - 1); } new Example10_9 (connect); //建立物件}}
Java資料庫更新<br />資料庫更新操作包括資料表建立、刪除、以及資料表記錄的增加、刪除、修改等操作。如果利用資料SQL指令實現,則利用Statement對旬的executeUpdate()方法,執行SQL的update語句,實現資料表的修改;執行SQL的insert語句,實作資料表記錄的新增。
例如,在前面資料為查詢範例基礎上,再增加資料表的修改和插入。限於篇幅,不再給予完整程序,只給予實現修改和插入的方法。程式可再增設插入、,,除儲存按鈕,透過現有的瀏覽,定位到資料表的特定位置,對癰疽記錄進行編輯修改,或插入,或刪除,然後按下儲存按鈕,完成修改後的資料表保存。
下面用程式碼說明資料表更新的方法。與資料表連接時,需指定所取得的ResultSet 物件是可更新的。
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);