Java UCanAccess无法从“FileSpec”中的TableName中读取“…的查询”

Java UCanAccess无法从“FileSpec”中的TableName中读取“…的查询”,java,ms-access,jdbc,views,ucanaccess,Java,Ms Access,Jdbc,Views,Ucanaccess,我需要使用UCanAccess从MS Access视图读取数据。我在C:\databases中有两个数据库 DBa包含以下表格:TableOfDBa。 DBb包含QueryLink表{TableOfDBa视图}。 QueryLink表是: 代码是: package es.fips; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sq

我需要使用UCanAccess从MS Access视图读取数据。我在C:\databases中有两个数据库

DBa包含以下表格:TableOfDBa。 DBb包含QueryLink表{TableOfDBa视图}。 QueryLink表是:

代码是:

package es.fips;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ReadData {
    private static String pathDB = "//C:/DataBases/DBb.mdb";

    public static void main(String[] args) {
        Connection conn = getConnectionOn();
        String nameView = "QueryLinKTable";

        if(conn != null){
            System.out.println("Connected Data Base =D");

            if(thereAreViews(conn)){                
                // This can not read the query from view
                printView(conn, nameView);
            }

            printView(conn, nameView);
        }
    }

    public static Connection getConnectionOn() {
        Connection myConnection = null;
        try {
            myConnection = DriverManager.getConnection("jdbc:ucanaccess:" + pathDB);
            return myConnection;

        } catch (SQLException e) {
            System.out.println("Error connecting");
            return null;
        }
    }

    public static boolean thereAreViews(Connection oneConn) {
        try {
            DatabaseMetaData metaDB = oneConn.getMetaData();
            String[] types = { "VIEW" };
            int numViews = 0;

            ResultSet rs = metaDB.getTables(null, null, null, types);
            while (rs.next()) {
                System.out.println("View " + (numViews + 1) + ": " + rs.getString(3));
                numViews++;
            }

            if (numViews > 0) {
                return true;
            } else {
                System.out.println("There are no views");
                return false;
            }

        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    public static void printView(Connection oneConn, String nameView) {
        try {
            Statement st = oneConn.createStatement();
            String query = "SELECT * FROM " + nameView;
            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                System.out.println("Read! =D");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
错误是:

Connected Data Base =D
There are no views
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211)
    at es.fips.ReadData.printView(ReadData.java:69)
    at es.fips.ReadData.main(ReadData.java:25)
Caused by: java.sql.SQLSyntaxErrorException: usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:208)
    ... 2 more
Caused by: org.hsqldb.HsqlException: usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.ParserDQL.readTableName(Unknown Source)
    at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
    at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
    at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
    at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more

如果您知道目前从3.0.6版开始的任何解决方案,我将不胜感激,因为UCanAccess不支持该语法

从“C:\Path\To\DbFile.mdb”中的TableName中选择* 如果尝试使用UCanAccess console.bat或console.sh打开DBb.mdb,您将看到

首次尝试加载QueryLinKTable时出错 转换的视图为:创建视图QUERYLINKTABLE作为选择* 来自'C:\Users\Public\test\DBa.mdb'中的TableOfDBa 错误消息为:意外标记:在:行中:2 在本例中,您需要在DBb.mdb中创建一个名为[TableOfDBa]的实际链接表,该表指向DBa.mdb中的表,然后将DBb.mdb中的视图保存查询更改为

从TableOfDBa中选择*
目前,从3.0.6版开始,UCanAccess不支持该语法

从“C:\Path\To\DbFile.mdb”中的TableName中选择* 如果尝试使用UCanAccess console.bat或console.sh打开DBb.mdb,您将看到

首次尝试加载QueryLinKTable时出错 转换的视图为:创建视图QUERYLINKTABLE作为选择* 来自'C:\Users\Public\test\DBa.mdb'中的TableOfDBa 错误消息为:意外标记:在:行中:2 在本例中,您需要在DBb.mdb中创建一个名为[TableOfDBa]的实际链接表,该表指向DBa.mdb中的表,然后将DBb.mdb中的视图保存查询更改为

从TableOfDBa中选择*
Connected Data Base =D
There are no views
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211)
    at es.fips.ReadData.printView(ReadData.java:69)
    at es.fips.ReadData.main(ReadData.java:25)
Caused by: java.sql.SQLSyntaxErrorException: usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:208)
    ... 2 more
Caused by: org.hsqldb.HsqlException: usuario no tiene privilegios suficientes o objeto no encontrado: QUERYLINKTABLE
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.ParserDQL.readTableName(Unknown Source)
    at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
    at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
    at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
    at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more