import java.awt.*; import java.awt.event.*; import java.applet.*; import com.sun.java.swing.table.*; import com.sun.java.swing.event.*; import com.sun.java.swing.*; import java.util.*; import java.sql.*; import oracle.jdbc.driver.OracleDriver.*; import oracle.jdbc.driver.*; public class TableViewer extends JApplet { //UI-Components JTable table = new JTable(); //JPanel panel = new JPanel(); Box prompt = new Box(BoxLayout.X_AXIS); JLabel selectLabel = new JLabel("Select"); JLabel fromLabel = new JLabel("from"); JTextField colField = new JTextField("*",10); JTextField tableField = new JTextField(20); JLabel whereLabel = new JLabel("where:"); JTextField whereField = new JTextField(40); JDesktopPane desktop = new JDesktopPane(); // Data-Holding for TableModel Hashtable tableData = new Hashtable(); Object[][] data = null; String[] headers = null; DataTable dt; // JDBC-Variables String driverClass = "oracle.jdbc.driver.OracleDriver"; Connection conn = null; String connectStr = "jdbc:oracle:thin:@waldorf.uni-muenster.de:1521:ifgi"; String user = "laber"; String password = "blablabla"; String sqlStatement; public void init(){ //UI Initialization getContentPane().setLayout(new BorderLayout()); prompt.add(selectLabel); prompt.add(Box.createHorizontalStrut(8)); prompt.add(colField); prompt.add(Box.createHorizontalStrut(8)); prompt.add(fromLabel); prompt.add(Box.createHorizontalStrut(8)); prompt.add(tableField); prompt.add(Box.createHorizontalStrut(8)); prompt.add(whereLabel); prompt.add(Box.createHorizontalStrut(8)); prompt.add(whereField); getContentPane().add(desktop, BorderLayout.CENTER); getContentPane().add(prompt, BorderLayout.SOUTH); //Controller Initialization ActionListener ctrl = new ActionListener() { public void actionPerformed(ActionEvent e) { fetchTableData(tableField.getText()); }}; tableField.addActionListener(ctrl); whereField.addActionListener(ctrl); colField.addActionListener(ctrl); //DB Initialization try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); System.out.println (" Connecting to " + connectStr + "..."); conn = DriverManager.getConnection (connectStr, user, password); System.out.println("Done."); ((OracleConnection)conn).setDefaultRowPrefetch (50); DatabaseMetaData dma = conn.getMetaData (); System.out.println("Connected to " + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); System.out.println("Version " + dma.getDriverVersion()); } catch (Exception e) {System.err.println("Exception: "+e); e.printStackTrace();} } void fetchTableData(String tableName){ System.out.println("Fetching Data from Table: "+tableName+"!"); try { Statement s = conn.createStatement(); ResultSet r = null; String whereClause = whereField.getText(); String cols = colField.getText(); System.out.println("wherefield: <"+whereClause+">"); r = s.executeQuery("SELECT COUNT(1) FROM " + tableName + (whereClause.length() > 0 ? " WHERE " + whereClause : "" )); r.next(); int count = r.getInt(1); r.close(); r = s.executeQuery("SELECT " + cols + " FROM " + tableName + (whereClause.length() > 0 ? " WHERE " + whereClause : "" )); System.out.println("Done."); ResultSetMetaData md = r.getMetaData(); int width = md.getColumnCount(); System.out.println("Transferring Data to TableModel ..."); // headers contain name and type of column headers = new String[width]; for(int i=1; i <= width; i++) headers[i-1] = new String(md.getColumnName(i)); // headers[i-1] = new String(md.getColumnName(i)+" ("+md.getColumnTypeName(i)+")"); // fill in Data data = new Object[count][width]; for(int i=0; i < count; i++){ r.next(); for(int j=1; j <= width; j++) data[i][j-1] = r.getObject(j); } System.out.println("Displaying Data ..."); /* if(dt != null) this.getContentPane().remove(dt); else this.getContentPane().remove(tablelabel); */ dt = new DataTable(headers, data); dt.setSize(800,600); JInternalFrame fr = new JInternalFrame(" "+cols+" from "+tableName +(whereClause.length() > 0 ? " WHERE " + whereClause : "" )+ " ("+count+" Entries)", true, true, true,true); fr.getContentPane().add(dt); fr.pack(); desktop.add(fr, new Integer(1)); fr.moveToFront(); fr.setMaximum(true); this.repaint(); this.validateTree(); } catch(Exception e) {System.err.println("Exception: "+e); e.printStackTrace();} } public static void main(String[] args){ TableViewer tt = new TableViewer(); JFrame frame = new JFrame("TableViewer"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); frame.getContentPane().add(tt,BorderLayout.CENTER); frame.setSize(800,600); frame.setVisible(true); tt.init(); tt.start(); } } class DataTable extends JPanel { DataTable (final String[] headers, final Object[][] data) { // needed for automatic resizing setLayout(new GridLayout(1,1)); AbstractTableModel model = new AbstractTableModel (){ public Object getValueAt(int row, int col){ try { return data[row][col]; } catch (Exception e) { System.out.println("Row "+row+" Col: "+col); } return "ERROR"; } public int getRowCount(){ return data.length; } public int getColumnCount(){ return headers.length; } public String getColumnName(int col){ return headers[col]; } }; JTable t = new JTable(model); t.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JScrollPane s = new JScrollPane(t); this.add(s); System.out.println("Done with initialization"); } }