使用Java Ucanaccess在ms Access中恢复数据和存储的查询

使用Java Ucanaccess在ms Access中恢复数据和存储的查询,java,ms-access,ucanaccess,Java,Ms Access,Ucanaccess,我有一个Access数据库。此数据库包含表和存储的查询。我的目标是使用javaucanaccess(一个JDBC连接器)来使用存储在Access文件中的数据,并使用Jaspersoft创建报告 正常表查询工作: Connection conn = ConnexionUtils.getConnection(); Statement stmt = conn.createStatement(); String query = "select * from Tab_BOU

我有一个Access数据库。此数据库包含表和存储的查询。我的目标是使用javaucanaccess(一个JDBC连接器)来使用存储在Access文件中的数据,并使用Jaspersoft创建报告

正常表查询工作:

Connection conn = ConnexionUtils.getConnection();
        Statement stmt = conn.createStatement();
        String query = "select * from Tab_BOUT";
        ResultSet rs = stmt.executeQuery(query);
        int cpt = 0;
        while ( rs.next() ) {
            int numColumns = rs.getMetaData().getColumnCount();
            for ( int i = 1 ; i <= numColumns ; i++ ) {
                if (i > 1) System.out.print(",  ");
                String columnValue = rs.getString(i);
                System.out.print(columnValue + " " + rs.getMetaData().getColumnName(i));
            }
        }
查询在Access中工作,但在Java中不工作。有人知道怎么做或者有更好的解决方案吗

编辑: 下面是一个查询示例:
Select*from Req\u VENT\u librarie\u nouvelles\u pages\u analysis

access中的真实查询:

SELECT Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_livraisons.LIV_date_livraison, Tab_STO_livraisons.LIV_type_facturation, Tab_STO_détails.[STO-ART_id], Req_BOUT_articles_tous.ART_code_EAN, Tab_STO_détails.STO_nombre, Tab_STO_livraisons.LIV_bdc, Tab_STO_livraisons.LIV_fact_51, Tab_STO_livraisons.LIV_fact_31
FROM (Tab_STO_livraisons INNER JOIN Tab_STO_détails ON (Tab_STO_livraisons.LIV_num = Tab_STO_détails.[STO-LIV_num]) AND (Tab_STO_livraisons.[LIV-TIE_num] = Tab_STO_détails.[STO-TIE_num])) INNER JOIN Req_BOUT_articles_tous ON Tab_STO_détails.[STO-ART_id] = Req_BOUT_articles_tous.ART_code
ORDER BY Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_détails.[STO-ART_id];
以及错误消息:

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc:::3.0.4用户缺少权限或找不到对象:请求\u事件\u库\u新页面\u分析 位于net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211) 查看view.QueryData.main(QueryData.java:32) 原因:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:请求\事件\库\新页面\分析 位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源) 位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源) 位于org.hsqldb.jdbc.JDBCStatement.fetchResult(未知源) 位于org.hsqldb.jdbc.JDBCStatement.executeQuery(未知源) 位于net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:208) ... 还有一个 原因:org.hsqldb.hsqldb异常:用户缺少权限或找不到对象:请求\u事件\u库\u新页面\u分析 位于org.hsqldb.error.error.error(未知来源) 位于org.hsqldb.error.error.error(未知来源) 位于org.hsqldb.SchemaManager.getTable(未知源) 位于org.hsqldb.ParserDQL.readTableName(未知源) 位于org.hsqldb.ParserDQL.readTableOrSubquery(未知源) 位于org.hsqldb.ParserDQL.XreadTableReference(未知源) 位于org.hsqldb.ParserDQL.XreadFromClause(未知源) 位于org.hsqldb.ParserDQL.XreadTableExpression(未知源) 位于org.hsqldb.ParserDQL.XreadQuerySpecification(未知源) 位于org.hsqldb.ParserDQL.XreadSimpleTable(未知源) 位于org.hsqldb.ParserDQL.XreadQueryPrimary(未知源) 位于org.hsqldb.ParserDQL.XreadQueryTerm(未知源) 位于org.hsqldb.ParserDQL.XreadQueryExpressionBody(未知源) 位于org.hsqldb.ParserDQL.XreadQueryExpression(未知源) 位于org.hsqldb.ParserDQL.compileCursorSpecification(未知源) 位于org.hsqldb.ParserCommand.compilePart(未知源) 位于org.hsqldb.ParserCommand.compileStatements(未知源) 位于org.hsqldb.Session.executeDirectStatement(未知源) 位于org.hsqldb.Session.execute(未知源) ... 4更多

我的一些视图正在查询MySQL数据库。那会是个大问题吗

对。UCanAccess可以使用Access链接表(指向另一个Access数据库中的表的链接表),但不能使用ODBC链接表(指向ODBC数据源中的表的链接表,如MySQL或SQL Server)

我的一些视图正在查询MySQL数据库。那会是个大问题吗


对。UCanAccess可以处理Access链接表(指向另一个Access数据库中的表的链接表),但不能处理ODBC链接表(指向ODBC数据源中的表的链接表,如MySQL或SQL Server)。

我的英语不是很好,我试着将“Requête Access”翻译成查询,但我认为我的“RQT_存储”实际上是您所称的“视图”,请您的问题显示您正在使用的实际SQL语句(例如,
SELECT*FROM RQT_STORED
…),以及您尝试运行时收到的错误消息(或者更好的是,完整堆栈跟踪)。UCanAccess确实打算支持(大多数)已保存选择查询,因此您的查询可能有一些特殊之处。请确保您使用的是最新版本的UCanAccess(当前版本为3.0.4)。值得一提的是,我刚刚尝试了
SELECT*FROM RQT_storaged
,使用的是从您的问题中逐字复制的查询,UCanAccess 3.0.4没有任何抱怨。@GordThompson,它实际上仍然不起作用。我编辑了我的第一篇文章!为了获取信息,我的一些视图正在查询MySQL数据库。这会是一个大问题吗?我的英语不太好t good,我尝试将“Requête Access”转换为查询,但我认为我的“RQTêu存储”实际上就是您所说的“视图”,请您的问题显示您正在使用的实际SQL语句(例如,
SELECT*FROM RQTêu存储的
…)和错误消息(或者更好,完整的堆栈跟踪)您在尝试运行时收到的。UCanAccess确实打算支持(大多数)已保存的SELECT查询,因此您的查询可能有一些特殊之处。另外,请确保您使用的是最新版本的UCanAccess(当前版本为3.0.4)。值得一提的是,我刚刚尝试了
SELECT*FROM RQT_storaged
,使用的是从您的问题中逐字复制的查询,UCanAccess 3.0.4没有任何抱怨。@GordThompson,它实际上仍然不起作用。我编辑了我的第一篇文章!有关信息,我的一些视图正在查询MySQL数据库。这会是一个大问题吗?
SELECT Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_livraisons.LIV_date_livraison, Tab_STO_livraisons.LIV_type_facturation, Tab_STO_détails.[STO-ART_id], Req_BOUT_articles_tous.ART_code_EAN, Tab_STO_détails.STO_nombre, Tab_STO_livraisons.LIV_bdc, Tab_STO_livraisons.LIV_fact_51, Tab_STO_livraisons.LIV_fact_31
FROM (Tab_STO_livraisons INNER JOIN Tab_STO_détails ON (Tab_STO_livraisons.LIV_num = Tab_STO_détails.[STO-LIV_num]) AND (Tab_STO_livraisons.[LIV-TIE_num] = Tab_STO_détails.[STO-TIE_num])) INNER JOIN Req_BOUT_articles_tous ON Tab_STO_détails.[STO-ART_id] = Req_BOUT_articles_tous.ART_code
ORDER BY Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_détails.[STO-ART_id];