带有 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连接到使用数据库密码加密的Access数据库?
如何将 UCanAccess 连接到使用数据库密码加密的 Access 数据库?
Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?