我正在尝试使用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));
}
}
我一直收到这个错误:
线程“main”中的异常java.util.regex.PatternSyntaxException: 晃来晃去的角色'?'近指数19 MB 01 BEZAHLT ??? ^ at java.util.regex.Pattern.error(Unknown Source)at java.util.regex.Pattern.sequence(Unknown Source)at at java.util.regex.Pattern.expr(未知来源)at java.util.regex.Pattern.compile(未知来源)at java.util.regex.Pattern。(未知来源)at java.util.regex.Pattern.compile(未知来源)at java.lang.String.replaceAll(未知来源)at 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);
问题是我可以将查询字符串留空或在其中放入任何无意义的值,但我仍然会收到错误。
我从哪里开始搜索问题或如何解决此问题?
答案 0 :(得分:2)
我使用名为19 MB 01 BEZAHLT ???
的表创建了一个Access数据库,并且能够使用UCanAccess 3.0.5重现您的问题。问题将修复在未来版本的 UCanAccess 3.0.6。