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

时间:2016-04-26 15:18:51

标签: java ms-access ucanaccess

我有一个Access数据库。此数据库包含表和存储的查询。我的目标是使用Java Ucanaccess(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中使用其他查询的对象。因此,当我尝试调用Query时,它不起作用:

例如,

“RQT_STORED”包含:

"SELECT Tab_STO_livraisons.[LIV-TIE_num], Req_BOUT_articles_tous.ART_code_EAN 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]";

该查询适用于Access,但不适用于Java。有人知道怎么做或有更好的解决方案吗?

修改 以下是一个查询示例:Select * from Req_VENT_librairie_nouvelles_pages_analyse

访问中的真实查询:

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用户缺少未找到的权限或对象:REQ_VENT_LIBRAIRIE_NOUVELLES_PAGES_ANALYSE       at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211)       at view.QueryData.main(QueryData.java:32)   引起:java.sql.SQLSyntaxErrorException:用户缺少未找到的权限或对象:REQ_VENT_LIBRAIRIE_NOUVELLES_PAGES_ANALYSE       在org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源)       在org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源)       在org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源)       在org.hsqldb.jdbc.JDBCStatement.executeQuery(未知来源)       在net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:208)       ......还有1个   引起:org.hsqldb.HsqlException:用户缺少未找到的权限或对象:REQ_VENT_LIBRAIRIE_NOUVELLES_PAGES_ANALYSE       在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(未知来源)       at 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(未知来源)       at org.hsqldb.ParserDQL.compileCursorSpecification(未知来源)       在org.hsqldb.ParserCommand.compilePart(未知来源)       在org.hsqldb.ParserCommand.compileStatements(未知来源)       at org.hsqldb.Session.executeDirectStatement(未知来源)       在org.hsqldb.Session.execute(未知来源)       ......还有4个

1 个答案:

答案 0 :(得分:2)

  

我的一些观点是查询MySQL数据库。这会是一个大问题吗?

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