// Programm 2-9: BSP_ROOT/meinewebapp/WEB-INF/classes/relsql/SqlDirektOra.java
import java.sql.*; 
import java.awt.*; 
import java.awt.event.*;
public class SqlDirektOra extends Frame implements ActionListener {
  // GUI-Komponenten definieren
  Button ausführen = new Button("Ausführen!");
  TextArea ein = new TextArea("SELECT *", 3, 80);
  TextArea ausgabe = new TextArea();
  // DBMS-Variable
  Connection c;
  Statement s;
  public SqlDirektOra() {
    super("SQL Direkt Oracle");                // Fensterbezeichnung
    Panel eingabe = new Panel(new BorderLayout());
    Panel knopf = new Panel(new FlowLayout(FlowLayout.LEFT));
    knopf.add(ausführen);
    eingabe.add(knopf, "North");
    eingabe.add(ein, "Center");
    add(eingabe, "North");
    add(ausgabe, "Center");
    addWindowListener(new WindowAdapter() {     // Window Exit
      public void windowClosing(WindowEvent e) {
        System.exit(0); } });
    ausgabe.setEditable(false);         // Ausgabefenster für Eingaben sperren
    ausführen.addActionListener(this);  // Eventlistener registrieren
    setSize(500, 400);                  // Fenstergröße
    setVisible(true);                   // Fenster anzeigen
    // DBMS-Treiber registrieren, Verbindung mit Datenbank herstellen
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      c = DriverManager.getConnection("jdbc:oracle:thin:@p30:1521:jdbcbuch", "system", "manager");
      s = c.createStatement();
    }
    catch (Exception ex) {
      ausgabe.setText("Fehler:\n" + ex.getMessage());
    }
  }
  public void actionPerformed(ActionEvent e) {
    String sql = ein.getText();
    ResultSet r;
    try {
      if (s.execute(sql)) {      // true ResultSet / false Zahl
        r = s.getResultSet();
        ResultSetMetaData rm = r.getMetaData();
        int x = rm.getColumnCount();
        ausgabe.setText("");
        for (int i = 1; i <= x; i++) {
          ausgabe.append(rm.getColumnName(i));
          if (i != x) ausgabe.append(", ");
          else ausgabe.append("\n");
        }
        while(r.next()) {
          for (int i = 1; i <= x; i++) {
            ausgabe.append(r.getString(i));
            if (i != x) ausgabe.append(", ");
            else ausgabe.append("\n");
          }
        }
      }
      else
        ausgabe.setText(String.valueOf(s.getUpdateCount()));
    }
    catch (Exception ex) {
      ausgabe.setText("SQL: " + sql + "\nFehler:\n" + ex.getMessage());
    }
  }
  public static void main(String[] args) {
    new SqlDirektOra();                   // GUI-Start
  }
}