2016-05-28 17 views
1

ich mit Java 8 wie in dieser Antwort auf eine Access-Datenbank zu verbinden versuchen:java.util.regex.PatternSyntaxException mit UCanAccess

Manipulating an Access database from Java without ODBC

Ich bin nicht vertraut mit der Erstellung/Design der DB.

Die Verbindung scheint zu arbeiten, weil ich ein paar Fehlermeldungen wie diese:

WARNUNG: Fehler in den Metadaten der Tabelle MB02: Zeilenanzahl der Tabelle in die Metadaten 556, sondern 557 Datensätze wurden gefunden und geladen von UCanAccess. Alles wird gut funktionieren, aber es ist besser, Ihre Datenbank zu reparieren.

Und ich habe diese Methode etwas aus dem DB mit einer SQL-SELECT-Anweisung zu ziehen versuchen:

public void searchDatabase() 
     throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException { 

    Connection con = DriverManager 
      .getConnection("jdbc:ucanaccess:///C:/Users/Blabla.mdb"); 
    Statement stmt = con.createStatement(); 

    String query = "SELECT * FROM MB01"; 

    ResultSet resultSet = stmt.executeQuery(query); 

    while(resultSet.next()){ 
     System.out.println(resultSet.getString(1)); 
    } 

} 

Ich erhalte diese Fehlermeldung:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling Meta-Zeichen '?' Nähe Index 19 MB 01 BEZAHLT ??? ^ bei java.util.regex.Pattern.error (unbekannte Quelle) bei java.util.regex.Pattern.sequence (unbekannte Quelle) um java.util.regex.Pattern.expr (unbekannte Quelle) um java.util .regex.Pattern.compile (Unbekannte Quelle) um java.util.regex.Pattern. (Unbekannte Quelle) um java.util.regex.Pattern.compile (Unbekannte Quelle) um java.lang.String.replaceAll (Unknown) Quelle) bei net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTableNames0 (SQLConverter.java:547) bei net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTables (SQLConverter.java:526) bei net.ucanaccess.converters.SQLConverter. KonvertierenSQL (SQLConverter.java:372) bei net.ucanaccess.converters.SQLConverter.convertSQL (SQLConverter.java:472) bei net.ucanaccess.jdbc.UcanaccessStatement.convertSQL (UcanaccessStatement.java:57) bei net.ucanaccess.jdbc.UcanaccessStatement.executeQuery (UcanaccessStatement .java: 206) bei DBCrawler.searchDatabase (DBCrawler.java:27)

Linie 27 ist, wo der Fehler ausgelöst wird, ist:

ResultSet resultSet = stmt.executeQuery(query); 

die Sache ist, kann ich die Abfrage String leer lassen oder setze irgendwelche Unsinn-Werte in i t und ich bekomme immer noch den Fehler.

Wo fange ich an, nach dem Problem zu suchen, oder wie kann ich das beheben?

+3

Problem scheint von der Datenbank selbst zu kommen. Überprüfen Sie, ob es ein Zeichen gibt, das irgendwie mit einem Platzhalter verwechselt werden könnte. –

+1

Verwenden Sie dieselbe ucanaccess-Version der Konsole? Passen Sie auf ... – jamadei

+1

Auch die Ucanaccess-Version, die Sie verwenden, scheint sehr alt zu sein ... – jamadei

Antwort

2

Ich erstellte eine Access-Datenbank mit einer Tabelle mit dem Namen 19 MB 01 BEZAHLT ??? und konnte Ihr Problem mit UCanAccess 3.0.5 reproduzieren. Das Problem wird sein wurde in eine zukünftige Version von UCanAccess 3.0.6 behoben.

+0

Danke für die Mühe, es funktioniert jetzt. –