ࡱ>    !"#$%&'()*+,-./01234Root Entry F@5WordDocument cCompObjnditable(false); JScrollPane textScrollPane = new JScrollPane(textArea); JPanel bottomPanel = new JPanel(); bottomPanel.add(textScrollPane,BorderLayout.CENTER); container.add(bottomPanel, BorderLayout.SOUTH); //Add a Listener for the queryTextField queryTextField.addActionListener(this); updateTextField.addActionListener(this); } /** opens a connection to the db */ public void start () { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch(Exception ex) { displayError("Can't find Database driver class: " + ex); return; } url = getParameter("URL"); user = getParameter("USER"); // password = getParameter("PASSWORD"); password = null; try { con = (Connection) DriverManager.getConnection(url, user, password); feedbackMessage("Connected to " + url + newline); } catch(SQLException ex) { displayError("SQLException: " + ex); } } /** closes the connection to the db (when the applet is killed) */ public void destroy () { try { con.close(); } catch(SQLException ex) { displayError("SQLException: " + ex); } } /** sends a query to the db */ public class QueryTableModel extends AbstractTableModel { // initalize because swing wants to paint the table int noCols = 0; int nRows = 0; String [] resColNames; Vector cachedData = new Vector (); private void setQuery(String queryString) { try { Statement stmt = (Statement) con.createStatement(); ResultSet rs = (ResultSet) stmt.executeQuery(queryString); ResultSetMetaData rsMeta = (ResultSetMetaData) rs.getMetaData(); noCols = rsMeta.getColumnCount(); stmt.close(); // Create the Array that holds labels resColNames = new String [noCols]; for (int c=1; c<=noCols; c++) { resColNames[c-1]= rsMeta.getColumnLabel(c); } // "Copy" the data line by line into a Vector cachedData = new Vector (); while (rs.next()) { // create a string array for each line and fill it // For sophisticated treatement it would be an obj array String [] rawLineData = new String[noCols]; for (int c=0; c 0) feedbackMessage("Update successful: " + updateRowCount + " Rows updated."); ܥe# y(c%,bl,blbb b 9(bbbTb$ 9 MS Sans Serif SymbolTimes New Roman/******************************************************************** * Made by Daniel.Schneider@tecfa.unige.ch 1999 TECFA. * This is Freeware * * Java Tutorial inspired JDBC Example adapted to MySQL * MM MySQL Driver Version -> http://www.worldserver.com/mm.mysql/ * At TECFA (UNIX) : source /local/env/java117.csh * setenv CLASSPATH /local/java/classes/mm-jdbc/mysql.jar:. * Other Sites: install the Driver * * You need Swing !! (JDK 1.2 apppletview or customized NS or Java plugin) * The simplest thing is to put swing.jar in your Netscape/...java/classes/ * * WARNING: This example might NOT work as is (access restrictions sometimes) * If it does work, make sure that the WWW server is tecfa2, NOT tecfa * * This needs some clean up ... but I don't have time :) * - not fully tested yet, layout is different from I think it ought to be :) * - Text fields are not cut/pastable ... needs some additional swing stuff * - Some destroy code is lacking * - ... and more, this is my second Swing program =) * *******************************************************************/ /** * This is a demonstration JDBC applet. * It will let you query and update a COFFEE table */ import org.gjt.mm.mysql.*; import org.gjt.mm.mysql.Connection; import org.gjt.mm.mysql.Statement; import org.gjt.mm.mysql.Driver; import org.gjt.mm.mysql.ResultSet; import org.gjt.mm.mysql.ResultSetMetaData; import java.applet.Applet; import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.Vector; import java.sql.*; public class MySqlUpdateSwingApplet extends JApplet implements ActionListener { // This is a hack to avoid an ugly error message. public MySqlUpdateSwingApplet() { getRootPane().putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE); } // Our 2 Input Widgets JTextField queryTextField; JTextField updateTextField; // Feedback text + Scroll Pane around JTextArea textArea; // The queryPanel JPanel queryPanel; QueryTableModel tableModel; // params from the applet String url = null; String user = null; String password = null; // Variables that hold data String [][] resultData; String [] resColNames; // NewLines are different on different machines ! String newline = System.getProperty("line.separator"); // the DataBase Connection Connection con; // The TopLevelContainer Container container; public void init () { // The Container container = getContentPane(); // The update panel JPanel updatePanel = new JPanel (); updateTextField = new JTextField ("UPDATE COFFEES SET SALES = 75 WHERE COF_NAME LIKE 'Espresso'",45); updatePanel.add(updateTextField, BorderLayout.NORTH); // The query panel (label + select field) queryPanel = new JPanel (); queryTextField = new JTextField("SELECT * FROM COFFEES", 45); queryPanel.add(queryTextField, BorderLayout.NORTH ); tableModel = new QueryTableModel (); JTable table=new JTable (tableModel); table.setPreferredScrollableViewportSize(new Dimension(500, 200)); JScrollPane queryScrollPane = new JScrollPane(table); queryPanel.add(queryScrollPane, BorderLayout.CENTER); // The tabbed Pane and the whole container JTabbedPane tabbedPane = new JTabbedPane (); tabbedPane.addTab("Update", null, updatePanel, "Simple Update Window"); tabbedPane.addTab("Query", null, queryPanel, "Simple Query Window"); container.add(tabbedPane, BorderLayout.CENTER); // Text in the bottom panel textArea = new JTextArea("HELLO",4,45); textArea.setE else feedbackMessage ("Update feedback: " + updateRowCount + " Rows updated." + newline + "Either NO update was needed, or you misspelled a value" + newline + "You sent: \"" + updateString + "\"" ); } catch(SQLException ex) { displayError("SQLException: " + ex); } } /** * This method is used to print error messages */ private void displayError(String mess) { textArea.setText("Mhh there was a problem, likely an illegal SQL expression:" + newline); textArea.append(mess); // updatePanel.repaint(); } /** * This method is used for other general feedback */ private void feedbackMessage(String mess) { textArea.setText("Hello:" + newline); textArea.append(mess); // updatePanel.repaint(); } public void actionPerformed(ActionEvent evt) { String text; Object TheWidget = evt.getSource(); // user hit return in query Text Field if (TheWidget == queryTextField) { text = queryTextField.getText(); //activate the setQuery method of the tableModel tableModel.setQuery (text); queryTextField.selectAll(); } // must have hit return in the other field else if (TheWidget == updateTextField) { text = updateTextField.getText(); update (text); updateTextField.selectAll(); } else displayError("This should not happen: " + TheWidget); } } ()`atuwx23>?ABijÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a & VWXY\]>?abÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &    1 2 3 + , b c h i j     2 3 ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &3 R S p q   H I   ! " G H P Q ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &Q m n o RST,-.Z[OPQ ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a & UVOPz{ !PQÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &>?345BC%&/0ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &05678?@"#,-234;<Z[abcÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &  *+UVW,-=>HIxyÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &  67Z[./ab%&KLvwx%ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &%&34=>?IJ  /01UVstu ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &  / 0 u v | } ~ >!?!X!Y!|!}!!!!! " "*"+"T"U""""".#/#F#ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &F#G#i#j#################!$"$$$$$$$$$$$$ % %%%%B%ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &B%C%p%q%%%%%%%%%%%&&-&.&\&]&&&&&&&''A'B'K'L'~'''''''ÿ{wsokg]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a &''!("(+(,(n(o(t(u(v(w(x(y(]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a ]a  )aux3?BjWXXY]?b  2 3  , c i j   3 S q  I   " H Q n o ST-.[PQ VP{!Q?45C&06678@#-34<[bc +VVW->Iy 7[//b&Lwx&4>?J  01Vtu 0 v } ~ ?!Y!}!!!! "+"U"""/#G#j##########"$$$$$$$$ %%%C%q%%%%%%%&.&]&&&&'B'L''''''"(,(o(u(v(x(y(y(y($%E_K@Normala "A@"Default Paragraph Font@ FMicrosoft Word 6.0 Document MSWordDocWord.Document.69q