java.util.regex.PatternSyntaxException 与 UCanAccess

java.util.regex.PatternSyntaxException with UCanAccess

我正在尝试使用 Java 8 连接到 Access 数据库,就像在这个答案中一样:

Manipulating an Access database from Java without ODBC

我对数据库的creation/design不熟悉

连接似乎正常,因为我收到了一些这样的错误消息:

WARNING:Error in the metadata of the table MB02: table's row count in the metadata is 556 but 557 records have been found and loaded by UCanAccess. All will work fine, but it's better to repair your database.

我有这个方法试图用 SQL SELECT 语句从数据库中提取一些东西:

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));
    }

}

我不断收到此错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 19 MB 01 BEZAHLT ??? ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceAll(Unknown Source) at net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTableNames0(SQLConverter.java:547) at net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTables(SQLConverter.java:526) at net.ucanaccess.converters.SQLConverter.convertSQL(SQLConverter.java:372) at net.ucanaccess.converters.SQLConverter.convertSQL(SQLConverter.java:472) at net.ucanaccess.jdbc.UcanaccessStatement.convertSQL(UcanaccessStatement.java:57) at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:206) at DBCrawler.searchDatabase(DBCrawler.java:27)

第 27 行是抛出错误的地方:

ResultSet resultSet = stmt.executeQuery(query);

问题是我可以将查询字符串留空或在其中放入任何无意义的值,但我仍然会收到错误。

我从哪里开始寻找问题或如何解决这个问题?

我使用名为 19 MB 01 BEZAHLT ??? 的 table 创建了一个 Access 数据库,并且能够使用 UCanAccess 3.0.5 重现您的问题。 的问题已在 UCanAccess 3.0.6 的未来版本中修复。