【发布时间】: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 版本好像很旧了...
标签: java mysql ms-access java-8 ucanaccess