Einträge in Excel suchen

Serethos

Erfahrenes Mitglied
Hallo,

Ich hab eine kleine Klasse geschrieben die über den JDBC/ODBC Treiber auf eine Excel Datei zugreift. Mein Problem ist eine Fehlermeldung von einem SQL-Statement wo ich nicht weiter weiß.

Also meine Frage: hab ich was an den Statemant falsch geschrieben; oder kann man nicht alle SQL-Statements benutzen?


Hier ist meine Klasse
Code:
public static void main(String[] args){
  try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String dbpath = "E:/eigene Dateien/test/test.xls";
    Connection con = null;
    con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
        + dbpath);
    Statement stmt = con.createStatement();
    ResultSet mehr = stmt.executeQuery("Select Name from test " +
                "where Betriebsname like '%Ingo%';");
    while(mehr.next()){
        System.out.println(mehr.getString(1));
    }
    con.close();
  } catch (SQLException e) {
    System.out.println("Fehler "+e.getSQLState());
    System.out.println("Fehler2 "+e.getErrorCode());
   } catch (ClassNotFoundException e1) {
    e1.printStackTrace();
  }
}
Ausgabe:
Fehler s1000
Fehler -1028



Hat sich erledigt.

Fehler lag in der Namensbezeichnung der Excel-Tabelle. Die Namensbezeichnung wird bei einem Neustart gelöscht.

Tip: Sich auch noch e.getMessage bei der Exeption ausgeben lassen.
 
Zuletzt bearbeitet:
Nach dem ich diesen Fehler ausgebessert habe ist alles nur noch schlimmer geworden.

Mein kleine Klasse ist jetzt etwas gewachsen und hat dadurch auch neue Fehler bekommen, die ich leider nicht feststellen kann. Ich hoffe einer von euch kann mir weiter helfen.

Code:
public class Excel{
  public static void main(String[] args){
      int i=0;
      Connection con = null;
      try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String dbpath = "E:/eigene Dateien/test/test.xls";
        con = DriverManager
            .getConnection("jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
                    + dbpath);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("Select Dopplung, Name,plz,str from test");
        ResultSet mehr = null;
        while(rs.next()){
            System.out.println(rs.getString(1)+"--"+rs.getString(2)+"--"+rs.getString(3)+"--"+rs.getString(4));
            mehr = stmt.executeQuery("Select Dopplung,Name,plz,str from test " +
            "where Betriebsname like '%"+rs.getString(2)+"%';");
            while(mehr.next()){
                System.out.println(mehr.getString(1)+"--"+mehr.getString(2)+"--"+mehr.getString(3)+"--"+mehr.getString(4));
                i++;
            }
        }
        rs.close();
        mehr.close();
    } catch (SQLException e) {
        System.out.println("Fehler "+e.getMessage());
        System.out.println("Fehler1 "+e.getErrorCode());
        System.out.println("Fehler2 "+e.getSQLState());
    } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
    }
    try {
        con.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }          
   }
  
  }
Mein Ausgabe

null--Hugo--11111--Muster 2
Fehler No data found
Fehler1 0
Fehler2 null

Hugo ist mein 1. Datensatz in der Excel-Tabelle
 
Hab den Fehler nach mehrmaliges lesen der API gefunden.

A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.

Ich freue mich trozdem auf tips wie diese Problem noch gelöst werden kann.

1. Tip

Man benutzt eine ArrayList in der man die Namen der Tabelle reinschreibt.
Select Name fromt test;
arrayList.add(x.getString())
Und diese dann durch get(i) wieder ausliest und sich daraus sein Statement Bastelt
Select Name from Test where Name like '%"+arraylist.get()+"%';
 
Zurück