==> Database.java <== import java.sql.*; import java.util.*; class Database { Connection con; resultSet results; ResultSetMetaData rsmd; DatabaseMetaData dma; String catalog; String types[]; String database_url; public Database(String driver) { types = new String[1]; types[0] = "TABLES"; //initialize type array try{Class.forName(driver);} //load the Bridge driver catch (Exception e) {System.out.println(e.getMessage());} } //----------------------------------- public void close() { try{ con.close();} catch (Exception e) {System.out.println("close error");} } //----------------------------------- public void Open(String url, String cat) { catalog = cat; database_url = url; try {con = DriverManager.getConnection(url); dma =con.getMetaData(); //get the meta data } catch (Exception e) {System.out.println(e.getMessage());} } //----------------------------------- public void reOpen() { try {con = DriverManager.getConnection(database_url); dma =con.getMetaData(); //get the meta data } catch (Exception e) {System.out.println(e.getMessage());} } //----------------------------------- public String[] getTableNames() { String[] tbnames = null; Vector tname = new Vector(); //add the table names to a Vector //since we don't know how many there are try { results = new resultSet(dma.getTables(catalog, null, "%", types)); } catch (Exception e) {System.out.println(e);} while (results.hasMoreElements()) tname.addElement(results.getColumnValue("TABLE_NAME")); //copy the table names into a String array tbnames = new String[tname.size()]; for (int i=0; i< tname.size(); i++) tbnames[i] = (String)tname.elementAt(i); return tbnames; } //----------------------------------- public String[] getTableMetaData() { // return the table type information results = null; try{ results = new resultSet(dma.getTables(catalog, null, "%", types)); } catch (Exception e) {System.out.println(e.getMessage());} return results.getMetaData(); } //----------------------------------- public String[] getColumnMetaData(String tablename) { //return the data on a column results = null; try { results = new resultSet(dma.getColumns(catalog, null, tablename, null)); } catch (Exception e) {System.out.println(e.getMessage());} return results.getMetaData(); } //----------------------------------- public String[] getColumnNames(String table) { //return an array of Column names String[] tbnames = null; Vector tname = new Vector(); try { results = new resultSet(dma.getColumns(catalog, null, table, null)); while (results.hasMoreElements() ) tname.addElement(results.getColumnValue("COLUMN_NAME")); } catch (Exception e) {System.out.println(e);} tbnames = new String[tname.size()]; for (int i=0; i< tname.size(); i++) tbnames[i] = (String)tname.elementAt(i); return tbnames; } //----------------------------------- public String getColumnValue(String table, String columnName) { //return the value of a given column String res = null; try { if (table.length()>0) results = Execute("Select "+columnName+" from "+table+" order by "+columnName); if (results.hasMoreElements()) res = results.getColumnValue(columnName); } catch (Exception e) {System.out.println("Column value error" +columnName+ e.getMessage());} return res; } //----------------------------------- public String getNextValue(String columnName) { // return the next value in that column //using the remembered resultSet String res = ""; try { if (results.hasMoreElements()) res = results.getColumnValue(columnName); } catch (Exception e) {System.out.println("next value error"+columnName+ e.getMessage());} return res; } //----------------------------------- public resultSet Execute(String sql) { //execute an SQL query on this database results = null; try { Statement stmt = con.createStatement(); results = new resultSet(stmt.executeQuery(sql)); } catch (Exception e) {System.out.println("execute error: "+e.getMessage());} return results; } } ==> dbFrame.java <== import java.net.URL; import java.sql.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class dbFrame extends Frame implements ActionListener, ItemListener { Database db; List Tables, Columns, Data; TextArea query; Button Search, Quit; public dbFrame() { super("Database demonstration"); setGUI(); db = new Database("sun.jdbc.odbc.JdbcOdbcDriver"); db.Open("jdbc:odbc:Grocery prices", null); String tnames[] = db.getTableNames(); loadList(Tables, tnames); String queryText ="SELECT DISTINCTROW FoodName, StoreName, Price "+ "FROM (Food INNER JOIN FoodPrice ON Food.FoodKey = FoodPrice.FoodKey) " + "INNER JOIN Stores ON FoodPrice.StoreKey = Stores.StoreKey "+ "WHERE (((Food.FoodName)=\'Oranges\')) ORDER BY FoodPrice.Price;"; query.setText(queryText); } //------------------------------------ private void setGUI() { setBackground(Color.lightGray); setLayout(new BorderLayout()); Panel pn = new Panel(); add("North", pn); pn.setLayout(new GridLayout(1,3)); pn.add(new Label("Tables")); pn.add(new Label("Columns")); pn.add(new Label("Data")); Panel pc = new Panel(); add("Center", pc); pc.setLayout(new GridLayout(1,3)); pc.add(Tables = new List(15)); pc.add(Columns = new List(15)); pc.add(Data = new List(15)); Tables.addItemListener(this); Columns.addItemListener(this); Panel ps = new Panel(); add("South", ps); ps.add(query = new TextArea("", 3,40)); addPanel(ps, Search = new Button("Run Query")); addPanel(ps, Quit = new Button("Quit")); Search.addActionListener(this); Quit.addActionListener(this); setBounds(100, 100, 500, 300); setVisible(true); } //------------------------------------ private void addPanel(Panel ps, Component c) { Panel p = new Panel(); ps.add(p); p.add(c); } //------------------------------------ private void loadList(List list, String[] s) { list.removeAll(); for (int i=0; i< s.length; i++) list.add(s[i]); } //------------------------------------ public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if (obj == Quit) System.exit(0); if (obj == Search) clickedSearch(); } //------------------------------------ public void itemStateChanged(ItemEvent e) { Object obj = e.getSource(); if (obj == Tables) showColumns(); if (obj == Columns) showData(); } //------------------------------------ private void showColumns() { String cnames[] = db.getColumnNames(Tables.getSelectedItem()); loadList(Columns, cnames); } //------------------------------------ private void showData() { String colname = Columns.getSelectedItem(); String colval = db.getColumnValue(Tables.getSelectedItem(), colname); Data.setVisible(false); Data.removeAll(); Data.setVisible(true); colval = db.getNextValue(Columns.getSelectedItem()); while (colval.length()>0) { Data.add(colval); colval = db.getNextValue(Columns.getSelectedItem()); } } //------------------------------------ private void clickedSearch() { resultSet rs = db.Execute(query.getText()); String cnames[] = rs.getMetaData(); Columns.removeAll(); queryDialog q = new queryDialog(this, rs); q.show(); } //------------------------------------ static public void main(String argv[]) { new dbFrame(); } } ==> queryDialog.java <== import java.net.URL; import java.sql.*; import java.util.*; import java.awt.*; import java.awt.event.*; class queryDialog extends Dialog implements ActionListener { resultSet results; Button OK; textPanel pc; Vector tables; public queryDialog(Frame f, resultSet r) { super(f, "Query Result"); results = r; setLayout(new BorderLayout()); OK = new Button("OK"); Panel p = new Panel(); add("South", p); p.add(OK); OK.addActionListener(this); pc = new textPanel(); pc.setBackground(Color.white); add("Center", pc); makeTables(); setBounds(100, 100, 500, 300); setVisible(true); repaint(); } //------------------------------------- private void makeTables() { tables = new Vector(); String t[] = results.getMetaData(); tables.addElement( t); while (results.hasMoreElements()) { tables.addElement(results.nextElement()); } } //------------------------------------- public void actionPerformed(ActionEvent e) { setVisible(false); } //------------------------------------- class textPanel extends Panel { public void paint(Graphics g) { String s[]; int x=0; int y =g.getFontMetrics().getHeight(); int deltaX = (int)1.5f*(g.getFontMetrics().stringWidth("wwwwwwwwwwwwww")); for (int i=0; i< tables.size(); i++) { s = (String[])tables.elementAt(i); for (int j =0; j< s.length; j++) { String st= s[j]; g.drawString(st, x, y); x += deltaX; } x = 0; y += g.getFontMetrics().getHeight(); if (i == 0) y += g.getFontMetrics().getHeight(); } } } } ==> resultSet.java <== import java.sql.*; class resultSet { //this class is a higher level abstraction //of the JDBC ResultSet object ResultSet rs; ResultSetMetaData rsmd; int numCols; public resultSet(ResultSet rset) { rs = rset; try { //get the meta data and column count at once rsmd = rs.getMetaData(); numCols = rsmd.getColumnCount(); } catch (Exception e) {System.out.println("resultset error"+e.getMessage());} } //----------------------------------- public String[] getMetaData() { //returns an array of all the column names //or other meta data String md[] = new String[numCols]; try { for (int i=1; i<= numCols; i++) md[i-1] = rsmd.getColumnName(i); } catch (Exception e) {System.out.println("meta data error"+e.getMessage());} return md; } //----------------------------------- public boolean hasMoreElements() { try{ return rs.next(); } catch(Exception e){ System.out.println("next error "+e.getMessage()); return false;} } //----------------------------------- public String[] nextElement() { //copies contents of row into string array String[] row = new String[numCols]; try { for (int i = 1; i <= numCols; i++) row[i-1] = rs.getString(i); } catch (Exception e) {System.out.println("next element error"+e.getMessage());} return row; } //------------------------------------- public String getColumnValue(String columnName) { String res = ""; try { res = rs.getString(columnName); } catch (Exception e) {System.out.println("Column value error:"+columnName+e.getMessage());} return res; } //------------------------------------- public String getColumnValue(int i) { String res = ""; try { res = rs.getString(i); } catch (Exception e) {System.out.println("Column value error: " + i + " " + e.getMessage());} return res; } //---------------------------------------------- public void finalize() { try{rs.close();} catch (Exception e) {System.out.println(e.getMessage());} } }