Access Fehlermeldung

Serethos

Erfahrenes Mitglied
Hallo.

Ich würde gern bei einer Access Tabelle die Doppelten Einträge mit einem X Makieren. Das Problem ist sobalt ich eine Tabelle nehme die mehr wie 5000 Einträger hat, schmiert mein Programm ab und ich bekomme die Fehlermeldung "Das objekt ist ungültig, oder es ist nicht mehr festgelegt" oder aber auch "Zusätzliche Tabellen können nicht geöffnet werden".

Zum besseren Verständis mein Quellcode und ich benutze Access 2000 ich hoffe ihr könnt mir weiter helfen ich freu mich auf jede Antwort.

MFG

Code:
  package test;
  import java.sql.BatchUpdateException;
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.text.DateFormat;
  import java.util.Date;
  
  /**
   * @author Chris
   * 
   */
 public class Access2 {
  
  
  public static void main(String[] args) throws BatchUpdateException{
    int i,anzahl;
    i=0;
    Connection con = null;
      String name,plz,ort,info;
      try {
      //laden des JDBC Treibers
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String dbpath = "E:/db1.mdb";
      con = DriverManager
        .getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ="
            + dbpath);
        System.out.println(DateFormat.getTimeInstance().format(new Date()));
        PreparedStatement pstmt;
              pstmt= con
            .prepareStatement("Select Dopplung, Betriebsname,PLZ,ort,Str,vorwahl,telefon from tabelle2 ");
              ResultSet rs,rs2 = null;
              rs= pstmt.executeQuery();
              //Auslesen der Excel Datei und in ArrayList hinzufügen
            while(rs.next()){
                name = rs.getString(2);
                plz = rs.getString(3);
                ort = rs.getString(4);
                pstmt = con.prepareStatement("Select Count(*) from tabelle2 where Betriebsname like ? and plz = ? and ort like ?");
                pstmt.setString(1,  "%"+name+"%");
                pstmt.setString(2, plz);
                pstmt.setString(3, "%"+ort+"%");
                rs2=pstmt.executeQuery();
                while(rs2.next()){
                    info = rs2.getString(1);
                    anzahl =Integer.parseInt(info); 
                    if(anzahl>1){
                        System.out.println("Update "+name+"--"+plz);
                        pstmt = con.prepareStatement("Update tabelle2 Set Dopplung='x' where Betriebsname like ? and plz = ? and ort like ?;");
                        pstmt.setString(1,  "%"+name+"%");
                        pstmt.setString(2, plz);
                        pstmt.setString(3, "%"+ort+"%");
                        pstmt.addBatch();
                        i++;
                     }
                    pstmt.executeBatch();
                }
                
            }
        
            
            System.out.println("Anzahl Dopplungen: "+i);
            pstmt.close();
            con.close();
            System.out.println(DateFormat.getTimeInstance().format(new Date()));
        } catch (SQLException e) {
            System.out.println("Anzahl Dopplungen: "+i);
            System.out.println("Fehler "+e.getMessage());
            System.out.println("Fehler1 "+e.getErrorCode());
            System.out.println("Fehler2 "+e.getSQLState());
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
      }
      
 
  }
 
Hallo!

ich denke das Problem ist, dass du die vielen ResultSets (welche als offene Cursor in der Datenbank erscheinen) nicht schliesst... mach einfach nach jedem "inneren" Select auch mal das rs2 zu ;-)
Das andere ResultSet solltest du natürlich auch bei zeiten schließen.

Gruß Tom
 
Zurück