当前位置: 首页 > 知识库问答 >
问题:

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

姜志行
2023-03-14

我有一个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中有使用其他查询的对象。因此,当我试图调用查询时,它不起作用:

例如,“rqt_storeded”包含:

"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

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用户缺乏特权或未找到对象:req_vent_librairie_nouvelles_pages_analyst at net.ucanaccess.jdbc.ucanaccessStatement.executeQuery(UcanaccessStatement.java.juerydata.main(querydata.java:32)由:java.sql.sqlsyntaxerrorexception:用户缺乏特权或未找到对象:异常(未知源)位于org.hsqldb.jdbc.jdbc.jdbstatement.fetchResult(未知源)位于org.hsqldb.jdbc.jdbc.jdbc.statement.executeQuery(未知源)位于net.ucanaccess.jdbc.ucanaccessStatement.executeQuery(未知源)位于ucanaccessStatement.java:208)...1更多原因是:在org.hsqldb.parserdql.readtableName(未知源)在org.hsqldb.parserdql.readtableorsubquery(未知源)在org.hsqldb.parserdql.xreadtableReference(未知源)在org.hsqldb.parserdql.xreadfromclause(未知源)在org.hsqldb.parserdql.xreadtableExpression(未知源)在org.hsqldb.parserdql.xreadtableExpression(未知源)dql.xreadQueryTerm(未知源)位于org.hsqldb.parserdql.xreadQueryExpressionBody(未知源)位于org.hsqldb.parserdql.xreadQueryExpression(未知源)位于org.hsqldb.parserdql.compilecursorSpecification(未知源)位于org.hsqldb.parsercommand.compilePart(未知源)位于org.hsqldb.parsercommand.compileStatements(未知源)位于

共有1个答案

史飞尘
2023-03-14

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

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

 类似资料:
  • 我写了一个Android应用。导出为签名APK发送通过邮件安装到设备。-不在市场。 在运行时,它将用类似的代码将他们的数据保存到内部存储: 据我所知-如果我错了,请纠正我-它将保存到/data/data/com。我的公司。myapp/文件名 因为它是用保存的,所以我不确定市场上或我的其他应用程序是否能看到它保存它。也许如果我创建一个具有相同签名的应用程序? 手机没有根。我已经尝试了很多备份,应用程

  • 我试图使用JTextField来更新数据库的内容,我有一个框架,其中包含关于特定记录的所有信息,然后我向所有JTextFields输入正确或更改的数据,然后我尝试使用preparedStatement执行update语句,但它似乎不起作用。我试着这么做: 在查询中,我使用“”因为它是字符串组件,所以在pst时出错。setString(5,tf5.getText());也许是因为整数值从这里开始,这

  • 问题内容: 我只想获取一个表“ b”的值,如果表“ a”的值是“-”如果表“ b”的值是空的,那么即使它是“-”,也要获取表“ a”的值 Microsoft Access对以下查询说“ Missing operator”: 我认为该错误是在CASE表达式行上。 问题答案: MS Access不支持语句。用途: 我不确定Access是否支持别名,但是它可能支持 注意(尽管标签正确),问题的标题可能会

  • 当使用 JPA 2.1 Eclipselink 2.5.2 UCANAccess 4.0.4 我们有这样一个问题,即表的命名将使用引号“。这是因为底层实现并不真正知道使用什么方言,从而导致与MSAccess不兼容。这就导致了例如这样的表注释。 为了解决这个问题,我们必须在orm.xml中包含: 现在,普通查询可以工作,但在命名查询中使用JPQL将失败,因为结果SQL查询将引用所有列名:

  • 本文描述了将 Kubernetes 上通过 TiDB Operator 备份的数据恢复到 TiDB 集群的操作过程。底层通过使用 TiDB Lightning 来恢复数据。 本文使用的恢复方式基于 TiDB Operator 新版(v1.1 及以上)的 CustomResourceDefinition (CRD) 实现。基于 Helm Charts 实现的备份和恢复方式可参考基于 Helm Cha

  • 问题内容: 为SQL Server编写查询时,可以声明和使用如下变量: 在编写用于MS Access的查询时,是否有一种方法可以类似地声明和使用变量? 我需要用另一个查询的结果填充变量,然后使用该值执行插入/更新操作。该查询将从.NET应用程序运行。 问题答案: 在某种方式 但是,您不能使用,在运行查询或在VBA中设置查询时可以手动输入参数。 您可以使用System.Data.OleDb命名空间中