Wie führe ich dieses JDBC Programm aus?

Laserstrahl

Admiral Special
Mitglied seit
06.10.2003
Beiträge
1.610
Renomée
11
Sry für die Frage, ich bin noch ein Amateur beim Programmieren...den eclipse editor verwende ich auch seit kurzem.

ich hab da ein interessantes JDBC Programm mit GUI gefunden, das datensätze löschen, anlegen, aktualisieren usw. kann:
http://vsite.de/kursverwaltung.html

KurseTabelle.java und InitialisiereTabellen.java sind die sourcecodes. Sogar eine Erklärung liegt als pdf vor.
Leider bekomm ich beim Kompilieren unter Eclipse folgende Fehlermeldung:

Code:
java.sql.SQLException: E/A-Exception: The Network Adapter could not establish the connection
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at init.InitialisiereTabellen.<init>(InitialisiereTabellen.java:13)
	at init.InitialisiereTabellen.main(InitialisiereTabellen.java:8)

Ich habe die beiden *.java dateien als src/packages in eclipse importiert.
Die Oracle Treiberbibliothek (jar) in eclipse eingebunden.
Diesen Treiber hab ich aber von der Oracle Page runtergeladen.
Ich wußte nicht was ich mit dem thin Treiber vom oberen Link anstellen musste *noahnung*

Ich bitte um Eure Hilfe.
 
Hast du denn eine laufende Oracle-Datenbank?
Und für diese die nötigen Verbindungsparameter nochmal überprüft?
 
Ich hab auch festgestellt dass ich dieses riesige Oracle DB Programm benötige.
Folgendes hab ich ausprobiert, mit HSQLDB als eigenständige Applikation zum Laufen zu kriegen:
http://javamagazin.de/itr/online_artikel/psecom,id,312,nodeid,11.html


Klappt aber einfach nicht :-/

Code:
package init;
import java.sql.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.logging.*;
import java.io.*;

import hlp.Helper;



public class InitialisiereTabellen {
	static Logger log = Logger.getLogger("de.myname.UseHSQLDB");
  //private static Log log = LogFactory.getLog("init.InitialisiereTabellen");
  public static void main(String[] args) throws Exception {
	  Helper.configureLog4j();
		log.info("Starting Application");
	  new InitialisiereTabellen();
  }
  public InitialisiereTabellen() {
    try {
      /*Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection c = DriverManager.getConnection(
                       "jdbc:oracle:thin:@orcl.vsite.de:1521:Kurse",
                       "system", "manager");*/
    	log.log(Level.INFO, "Starting to load JDBCDriver... ");
    	Class.forName("org.hsqldb.jdbcDriver");
        Connection c = DriverManager.getConnection(
        		"jdbc:hsqldb:data/pruefungen",
                         "sa", "");
        log.log(Level.INFO, "Starting to load JDBCDriver... ");

 



        Connection con =

           DriverManager.getConnection( // tmp must exist. Right slash.

              "jdbc:hsqldb:D:/data/pruefungen","sa","");

        log.log(Level.INFO, "Connection established!");



    	
    	
    	Statement s = c.createStatement();
//=== Dozenten =====================
      System.out.println("Tabelle Dozenten ...");
      String sql = "DROP TABLE Dozenten";
      try { s.execute(sql); } catch (Exception ex) {}
      sql = "CREATE TABLE Dozenten " +
                     "(dcode NUMBER(11), " +
                      "vorname VARCHAR2(25), " +
                      "nachname VARCHAR2(25))" ;
      try { s.execute(sql); } catch (Exception ex) {}
      String a[][] = new String[][] {{"2", "Leutner", "Brigitte"},
                                     {"3", "Gernhardt", "Wolfgang"},
                                     {"4", "Weizenbaum", "Josephine"},
                                     {"5", "Duffing", "Julienne"},
                                     {"9", "Mergel", "Börries"},
                                     {"10", "Ludwig", "Luigi"},
                                     {"27", "Mayer-Böricke", "Julius"}};
      PreparedStatement ps = c.prepareStatement(
            "INSERT INTO Dozenten (dcode,nachname,vorname) " +
            "VALUES (?,?,?)");
      for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) 
          ps.setString(j + 1, a[i][j]);
        ps.execute();
      }
//=== Personen =====================
      System.out.println("Tabelle Personen ...");
      sql = "DROP TABLE Personen";
      try { s.execute(sql); } catch (Exception ex) {}
      sql = "CREATE TABLE Personen " +
                     "(pcode NUMBER(11), " +
                      "vorname VARCHAR2(25), " +
                      "nachname VARCHAR2(25))" ;
      try { s.execute(sql); } catch (Exception ex) {}
      a = new String[][] {{"23", "Müller", "Hanne"},
                          {"24", "Schmidt", "Lothar"},
                          {"34", "Hintze", "Franz"},
                          {"88", "Khan", "Dschingis"},
                          {"91", "Kaiser", "Leo"},
                          {"101", "Kunze", "Sieglinde"}};
      ps = c.prepareStatement(
            "INSERT INTO Personen (pcode,nachname,vorname) " +
            "VALUES (?,?,?)");
      for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) 
          ps.setString(j + 1, a[i][j]);
        ps.execute();
      }
//=== Kurse =====================
      System.out.println("Tabelle Kurse ...");
      sql = "DROP TABLE Kurse";
      try { s.execute(sql); } catch (Exception ex) {}
      sql = "CREATE TABLE Kurse " +
                     "(kcode NUMBER(11), " +
                     " dcode NUMBER(11), " +
                      "typ VARCHAR2(1), " +
                      "bezeichnung VARCHAR2(100), " +
                      "zeit NUMBER(15,1), " +
                      "datum DATE)" ;
      try { s.execute(sql); } catch (Exception ex) {}
      Object o[][] = new Object[][] {{"1", "P", "10", "Objektorientierte Programmierung mit Java", new Date(98,4,27), "10"},
                          {"2", "S", "3", "JavaScript", new Date(98,6,29), "5"},
                          {"3", "P", "2", "JDBC", new Date(98,6,30), "7,5"},
                          {"4", "S", "3", "HTML", new Date(98,7,13), "5"},
                          {"5", "S", "5", "GUI-Programmierung mit Java", new Date(98,6,9), "7,5"},
                          {"6", "V", "6", "Servlets", new Date(98,6,10), "7,5"}};
      ps = c.prepareStatement(
            "INSERT INTO Kurse (kcode,typ,dcode,bezeichnung,datum,zeit) " +
            "VALUES (?,?,?,?,?,?)");
      for (int i = 0; i < o.length; i++) {
        for (int j = 0; j < o[i].length; j++) {
          ps.setObject(j + 1, o[i][j]);
        }
        ps.execute();
      }
//=== Teilnehmer =====================
      System.out.println("Tabelle Teilnehmer ...");
      sql = "DROP TABLE Teilnehmer";
      try { s.execute(sql); } catch (Exception ex) {}
      sql = "CREATE TABLE Teilnehmer " +
            "(pcode NUMBER(11), " +
            " kcode NUMBER(11) )";
      try { s.execute(sql); } catch (Exception ex) {}
      a = new String[][] {{"23", "10"},
                          {"34", "10"},
                          {"24", "10"},
                          {"91",  "3"},
                          {"24",  "2"},
                          {"101", "2"},
                          {"101", "3"},
                          {"91",  "2"}};
      ps = c.prepareStatement(
            "INSERT INTO Teilnehmer (pcode,kcode) " +
            "VALUES (?,?)");
      for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) 
          ps.setString(j + 1, a[i][j]);
        ps.execute();
      }
    }
    catch (Exception ex) {ex.printStackTrace();}
  }
}                          // Ende class InitialisiereTabellen


Code:
package tab;

import init.InitialisiereTabellen;
import java.awt.*;          import javax.swing.*;
import java.awt.event.*;    import javax.swing.table.*;
import java.sql.*;          import javax.swing.event.*;
// UI Delegate (View und Controller)  
class KurseTabelle extends JFrame {

  KurseTabelleModel m = new KurseTabelleModel();
  
  JTable table = new JTable(m);
  public KurseTabelle() {        
    super("MVC Tabelle (GUI Kurse)");
    Panel oben = new Panel(new GridLayout(1, 5));
    Button reset = new Button("Reset");
    Button neuZeile = new Button("neu");
    Button delZeile = new Button("löschen");
    Button speicher = new Button("speichern");
    Button refresh  = new Button("refresh");
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add("North", oben);
    oben.add(reset);
    oben.add(neuZeile);
    oben.add(delZeile);
    oben.add(speicher);
    oben.add(refresh);
    getContentPane().add("Center", new JScrollPane(table));
    table.setColumnSelectionAllowed(false);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    for (int i = 0; i < m.cols; i++)
      table.getColumn(m.colnames[i]).setPreferredWidth(m.colwidths[i]);
    m.con.init();
    refresh();
    combobox(m.dozenten, m.colnames[1]);
    combobox(m.typen, m.colnames[2]);
    neuZeile.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        neueZeile(); }});
    reset.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        new InitialisiereTabellen();
        refresh(); }});
    delZeile.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        löscheZeile(table.getSelectedRow()); }});
    refresh.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        refresh(); }});
    speicher.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        speichereZeile(table.getSelectedRow()) ; }});
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) { System.exit(0); }});
    setSize(500, 400);
    setVisible(true);
  }
    private void combobox(Object[] items, String spalte) {
      JComboBox box = new JComboBox();
      for (int i = 0; i < items.length; i++)
        box.addItem(items[i]);
      table.getColumn(spalte).setCellEditor(
                              new DefaultCellEditor(box));
    }
  void neueZeile(Object[] o) {
    m.addRow(o);
    table.setRowSelectionInterval(m.getRowCount()-1, m.getRowCount()-1);
  }
  void neueZeile() {
    Object[] temp = new Object[m.cols];
    for (int i = 0; i < m.cols; i++)
      temp[i] = "";
    neueZeile(temp);
  }
  void löscheZeile(int row) {
    if (row < 0 || row >= m.getRowCount())
      return;
    if (JOptionPane.showOptionDialog(this, "Wirklich kcode=" + 
             m.getValueAt(row, 0) + " löschen?",
             "KurseTabelle", JOptionPane.DEFAULT_OPTION,
             JOptionPane.WARNING_MESSAGE, null,
             new Object[]{"Ja", "Nein"}, "Nein") != 0) return;
    m.con.delete(m.getValueAt(row, 0));
    m.removeRow(row);
    table.setRowSelectionInterval(m.getRowCount()-1, m.getRowCount()-1);
  }
  void speichereZeile(int row) {
    if ("".equals(m.getValueAt(row, 0)))
      m.con.insert(m, row);
    else
      m.con.update(m, row);
    refresh();
  }
  void refresh() {
    Object[] temp = new Object[m.cols];
    m.con.select();
    m.setNumRows(0);
    while ((temp = m.con.nächste()) != null)
      neueZeile(temp);
    combobox(m.dozenten, m.colnames[1]);
  }
  public static void main(String[] args) {
    new KurseTabelle();
  }
}

// Programm 8-3b  (gleiche Datei wie Teil a)
// Model
class KurseTabelleModel extends DefaultTableModel {
  KurseTabelleModelConnector con;
  String[] colnames = new String[] {"kcode","dcode","Typ",
                                    "Kursbezeichnung","Zeit","Nachname","Vorname"};
  String[] columns = new String[]  {"kcode","Kurse.dcode","typ",
                                    "bezeichnung","zeit","nachname","vorname"};
  boolean[] editable = {false, true, true, true, true, false, false};
  int[] colwidths = {50, 50, 50, 200, 50, 70, 70};
  static final int cols = 7;
  Object[] dozenten;
  Object[] typen = new Object[] {"P", "S", "Ü", "V"};

  public KurseTabelleModel() {
    super(0, cols);
    con = new KurseTabelleModelConnector(this);
    setColumnIdentifiers(colnames);
  }
  public boolean isCellEditable(int row, int col) {
    if (!editable[col]) return false;
    else return super.isCellEditable(row, col);
  }
}                               // Ende Class KurseTabelleModel
// Datenbank-Connector
class KurseTabelleModelConnector {
  static String treiber = "org.hsqldb.jdbcDriver";
  static String jdbcurl = "jdbc:hsqldb:data/pruefungen";
  static String uid = "system", pwd = "manager";
  static Connection c;
  String sqlsel; Statement sel;
  String sqlupd; PreparedStatement upd;
  String sqldel; PreparedStatement del;
  String sqlins; CallableStatement ins;
  String sqldoz; Statement doz;
  ResultSet rsel, rdoz;
  KurseTabelleModel m;
  static {                          // statischer Initialisierer
    try {
      Class.forName(treiber);
      c = DriverManager.getConnection(jdbcurl, uid, pwd);
    }
    
    catch (Exception ex) { ex.printStackTrace(); System.exit(0); }
  } 
  public KurseTabelleModelConnector(KurseTabelleModel m) { this.m = m; }
  void select() {
    System.out.println("SQL " + sqlsel);
    try {
      rsel = sel.executeQuery(sqlsel);
      rdoz = doz.executeQuery(sqldoz);
      m.dozenten = null;
      while (rdoz.next()) {
        int x = m.dozenten == null ? 0 : m.dozenten.length;
        Object[] temp = new Object[x + 1];
        for (int i = 0; i < x; i++) {
          temp[i] = m.dozenten[i]; }
        temp[x] = rdoz.getString(1);
        m.dozenten = temp;
      }
    }
    catch (Exception ex) { ex.printStackTrace();}
  }
  Object[] nächste() {
    Object[] temp = new Object[m.cols];
    try {
      if (!rsel.next()) return null;
      for (int i = 0; i < m.cols; i++)
        temp[i] = rsel.getString(i + 1);
      return temp;
    }
    catch (Exception ex) { ex.printStackTrace();}
    return null;
  }
  void update(KurseTabelleModel m, int row) {
    try {
      System.out.println("SQL " + sqlupd);
      upd.setString(5, (String) m.getValueAt(row, 0));
      upd.setString(1, (String) m.getValueAt(row, 1));
      upd.setString(2, (String) m.getValueAt(row, 2));
      upd.setString(3, (String) m.getValueAt(row, 3));
      upd.setString(4,((String) m.getValueAt(row, 4)).replace('.', ','));
      upd.execute();
    }
    catch (Exception ex) { System.out.println("UPDATE"); ex.printStackTrace();}
  }
  void insert(KurseTabelleModel m, int row) {
    try {
      System.out.println("SQL " + sqlins);
      ins.registerOutParameter(1, Types.INTEGER);
      ins.setString(2, (String) m.getValueAt(row, 1));
      ins.setString(3, (String) m.getValueAt(row, 2));
      ins.setString(4, (String) m.getValueAt(row, 3));
      ins.setString(5, (String) m.getValueAt(row, 4));
      ins.execute();
    }
    catch (Exception ex) { ex.printStackTrace();}
  }
  void delete(Object kcode) {
    try {
      System.out.println("SQL " + sqldel);
      del.setInt(1, Integer.parseInt((String)kcode));
      del.execute();
    }
    catch (Exception ex) { ex.printStackTrace();}
  }
  void init() {
    try {
   // SELECT 
      sel = c.createStatement();
      sqlsel = "SELECT ";
      for (int i = 0; i < m.cols; i++)
        sqlsel += (i == 0 ? "" : ",") + m.columns[i];
      sqlsel += " FROM Kurse, Dozenten " +
                " WHERE Kurse.dcode = Dozenten.dcode (+)" +
                " ORDER BY kcode";
      doz = c.createStatement();
      sqldoz = "SELECT dcode,nachname,vorname FROM Dozenten";
   // UPDATE
      sqlupd = "UPDATE Kurse " + 
               "SET dcode=?, typ=?, bezeichnung=?, zeit=? " +
               "WHERE kcode=?";
      upd = c.prepareStatement(sqlupd);
   // INSERT
      String proz =
          "CREATE OR REPLACE FUNCTION InsertKurse \n" +
          "(dc IN INTEGER, typ IN STRING, " +
          " tit IN STRING, zeit IN INTEGER) \n" +
          " RETURN INTEGER IS \n t NUMBER; \n" +
          " BEGIN\n SELECT max(kcode) INTO t FROM Kurse;\n" +
          " IF t IS NULL THEN t := 0; END IF;" +
          " INSERT INTO Kurse(kcode, dcode, typ," +
          " bezeichnung, zeit)\n" +
          " VALUES(t+1,dc,typ,tit,zeit); \n" +
          " RETURN t+1; \n END;";
      c.createStatement().execute(proz);
      sqlins = "{? = call InsertKurse(?, ?, ?, ?)}";
      ins = c.prepareCall(sqlins);
   // DELETE
      sqldel = "DELETE FROM Kurse WHERE kcode=?";
      del = c.prepareStatement(sqldel);
    }
    catch (Exception ex) {
      ex.printStackTrace(); System.exit(0);
    }
  }
}                      // Ende Class KurseTabelleModelConnector


Vielleicht hab ich das Konzept des HSQLDB nicht richtig verstanden? Ich dachte mit dem HSQLDB läßt sich das ganze auch ohne Server betreiben oder liege ich da falsch?


Eigentlich will ich das Programm nur zum Laufen bringen sonst nichts, nicht einmal das schaff ich das....
 
Zuletzt bearbeitet:
Edit: hab die Kommentare übersehen.

Du hast trotzdem 2 Connections - con und c - brauchst du nicht.

mach mal ein einfaches Beispiel mit einem Query und schau dir dazu mal die Fehlermeldungen an
 
Zuletzt bearbeitet:
Zurück
Oben Unten