带有 UCanAccess 的 java.util.regex.PatternSyntaxException

Posted

技术标签:

【中文标题】带有 UCanAccess 的 java.util.regex.PatternSyntaxException【英文标题】:java.util.regex.PatternSyntaxException with UCanAccess 【发布时间】:2016-05-28 22:28:52 【问题描述】:

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

Manipulating an Access database from Java without ODBC

我不熟悉数据库的创建/设计。

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

警告:表 MB02 的元数据错误:表的行数在 元数据为 556,但已找到并加载了 557 条记录 UCanAccess。一切都会好起来的,但最好修复你的 数据库。

我有这种方法试图用 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));
    


我不断收到此错误:

线程“主”java.util.regex.PatternSyntaxException 中的异常: 悬空元字符“?”靠近索引 19 MB 01 BEZAHLT ??? ^ 在 java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(未知来源)在 java.util.regex.Pattern.compile(未知来源)在 java.util.regex.Pattern.(未知来源)在 java.util.regex.Pattern.compile(未知来源)在 java.lang.String.replaceAll(未知来源)在 net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTableNames0(SQLConverter.java:547) 在 net.ucanaccess.converters.SQLConverter.replaceWhiteSpacedTables(SQLConverter.java:526) 在 net.ucanaccess.converters.SQLConverter.convertSQL(SQLConverter.java:372) 在 net.ucanaccess.converters.SQLConverter.convertSQL(SQLConverter.java:472) 在 net.ucanaccess.jdbc.UcanaccessStatement.convertSQL(UcanaccessStatement.java:57) 在 net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:206) 在 DBCrawler.searchDatabase(DBCrawler.java:27)

第 27 行是引发错误的地方是:

ResultSet resultSet = stmt.executeQuery(query);

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

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

【问题讨论】:

问题似乎来自数据库本身。检查是否存在可能以某种方式被误认为通配符的字符。 您使用的是同一个 ucanaccess 版本的控制台吗?注意... 另外你使用的 ucanaccess 版本好像很旧了... 【参考方案1】:

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

【讨论】:

以上是关于带有 UCanAccess 的 java.util.regex.PatternSyntaxException的主要内容,如果未能解决你的问题,请参考以下文章

UCanAccess 无法读取带有“... FROM TableName IN 'FileSpec'”的查询

带有数字通配符的 UCanAccess Select 语句给出了意外的令牌:需要 REGEXP_MATCHES

第二个 Ucanaccess 事务并不总是被推送到 MDB

如何将UCanAccess连接到使用数据库密码加密的Access数据库?

如何将 UCanAccess 连接到使用数据库密码加密的 Access 数据库?

Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?