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

ucanaccess:带有空格的意外令牌

陆烨烁
2023-03-14
SQLException: UCAExc:::3.0.0 unexpected token: AIRCRAFT

此查询引发异常:

SELECT [Check Task Aircraft Listing].CTAL_Item_Number
,[Check Task Aircraft Listing].CTAL_Check
,[Check Task Aircraft Listing].CTAL_Delete
,[Check Task Aircraft Listing].CTAL_Effective
,[Check Task Aircraft Listing].CTAL_CheckSelect
,[Check Table].[Aircraft]
FROM [Check Table]
INNER JOIN [Check Task Aircraft Listing] ON [Check Table].CHECK = [Check Task Aircraft Listing].CTAL_Check
WHERE (
        (([Check Task Aircraft Listing].CTAL_Effective) = True)
        AND (([Check Table].[Aircraft]) = 'XXXX')
        )

我尝试用_:

SELECT [Check_Task_Aircraft_Listing].CTAL_Item_Number
    ,[Check_Task_Aircraft_Listing].CTAL_Check
    ,[Check_Task_Aircraft_Listing].CTAL_Delete
    ,[Check_Task_Aircraft_Listing].CTAL_Effective
    ,[Check_Task_Aircraft_Listing].CTAL_CheckSelect
    ,[Check_Table].[Aircraft]
FROM [Check_Table]
INNER JOIN [Check_Task_Aircraft_Listing] ON [Check_Table].CHECK = [Check_Task_Aircraft_Listing].CTAL_Check
WHERE (
        (([Check_Task_Aircraft_Listing].CTAL_Effective) = True)
        AND (([Check_Table].[Aircraft]) = 'XXXX')
        )

Ucanaccess抛出了一个新的错误:

 SQLException: UCAExc:::3.0.0 user lacks privilege or object not found: CHECK_TASK_AIRCRAFT_LISTING
    null
String url = "jdbc:ucanaccess://D:/ADEL/ADEL Local/ADEL_DATA.accdb";
            try
            {
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

            }
            catch (java.lang.ClassNotFoundException e)
            {
                System.err.print("ClassNotFoundException: ");
                System.err.println(e.getMessage());
                ErrorFile.writeError(Thread.currentThread().getStackTrace()[2].getLineNumber(), e);
            }

            try
            {
                c = java.sql.DriverManager.getConnection(url);
            }
            catch (SQLException e)
            {
                System.err.println("SQLException: " + e.getMessage());
                ErrorFile.writeError(Thread.currentThread().getStackTrace()[2].getLineNumber(), e);
            }

请参见执行查询的以下代码:

Connection c = ConnectDB.doConnect();
String selectString = "SELECT [Check Task Aircraft Listing].CTAL_Item_Number ,[Check Task Aircraft Listing].CTAL_Check ,[Check Task Aircraft Listing].CTAL_Delete ,[Check Task Aircraft Listing].CTAL_Effective ,[Check Task Aircraft Listing].CTAL_CheckSelect ,[CHECK TABLE].[Aircraft] FROM [CHECK TABLE] INNER JOIN [Check Task Aircraft Listing] ON [CHECK TABLE].CHECK = [Check Task Aircraft Listing].CTAL_Check WHERE ( (([Check Task Aircraft Listing].CTAL_Effective) = True) AND (([CHECK TABLE].[Aircraft]) = 'XXXX') ) ";
try
        {
            stmt = c.createStatement();
            
            ResultSet data = stmt.executeQuery(selectString);
            while (data.next())
            {...use data...}
}

第一个查询成功执行,但第二个查询失败。

共有1个答案

裴展
2023-03-14

事实上,您的诊断是错误的(第二次尝试也没有意义,因为错误的表名导致的错误并不能证明什么)。

此外,空格的数量也是完全不相关的。另一个有效的例子可能是:

从[我的表bla bla bla]中选择[我的列bla bla bla]。

package xxx;

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

public class UcaT {

    /**
     * @param args
     * @throws SQLException 
     */
    public static void main(String[] args) throws SQLException {
        Connection c= DriverManager.getConnection("jdbc:ucanaccess://c:\\db\\new_database_without_tables.accdb");


        String selectString = "SELECT [Check Task Aircraft Listing].CTAL_Item_Number ,[Check Task Aircraft Listing].CTAL_Check ,[Check Task Aircraft Listing].CTAL_Delete ,[Check Task Aircraft Listing].CTAL_Effective ,[Check Task Aircraft Listing].CTAL_CheckSelect ,[CHECK TABLE].[Aircraft] FROM [CHECK TABLE] INNER JOIN [Check Task Aircraft Listing] ON [CHECK TABLE].CHECK = [Check Task Aircraft Listing].CTAL_Check WHERE ( (([Check Task Aircraft Listing].CTAL_Effective) = True) AND (([CHECK TABLE].[Aircraft]) = 'XXXX') ) ";
        try
                {
                    Statement stmt = c.createStatement();
                    stmt.execute("create table [Check Table] (id counter PRIMARY KEY,[CHECK] text,Aircraft text)");
                    stmt.execute("create table [Check Task Aircraft Listing] (id counter PRIMARY KEY,CTAL_Item_Number text,CTAL_Check text, CTAL_Delete text, CTAL_Effective yesno, CTAL_CheckSelect text)");
                    ResultSet data = stmt.executeQuery(selectString);
                    System.out.println("ok");

                }
        catch(Exception e){
            e.printStackTrace();
        }

    }



}
 类似资料:
  • 我需要制作一个Jar来格式化Access数据库中的电话号码,并为此使用了UcanAccess,所有查询都可以正常工作,直到我需要用格式化的电话号码更新数据库列。 正如其他文章中所建议的那样,我尝试使用括号,格式化的电话号码被自己存储在ArrayList中,然后我尝试用update语句添加。如果有什么不清楚的,我会努力提供进一步的信息。 我将非常感谢任何想法

  • 问题内容: 是什么导致第三行出现此错误? 打开控制台以查看错误 问题答案: 是一个对象。(从对象文字创建) 用于将包含JSON表示法的 字符串 转换为Javascript对象。 您的代码将对象转换为字符串(通过调用),以尝试将其解析为JSON文本。 默认返回,这是无效的JSON;因此错误。

  • 本文向大家介绍意外的令牌相关面试题,主要包含被问及意外的令牌时的应答技巧和注意事项,需要的朋友参考一下 您的JavaScript表示使用JSONP模式发出Ajax请求(这涉及将元素插入文档中而不是使用XMLHttpRequest)。 您得到的响应是一个XML文档,而不是遵循JSONP模式的JavaScript程序,它类似于: 因为浏览器试图将XML作为JavaScript执行(不是),您会收到错误

  • 因此,我尝试更改保存在Access中的查询,如下所示: 问题1: 在Access中,这很好地拉出了一个查询,从我所看到的来看,Access中没有任何问题。 UCAEXC::4.0.2意外标记:REGEXP_MATCHES必需: 我不确定从这里到哪里去。我的问题是为什么它不接受##这是UCanAccess的问题吗?java问题?权限问题?有变通办法吗?

  • 我在使用Struts2和Hibernate时遇到了以下错误: 我有这个方法: folling代码定义类之间的关系: Contrat类: Paiement类: PeriodePay等级: 此查询在phpMyAdmin中工作良好;你能告诉我出了什么问题吗 编辑1: 我在试着别搞错了: 我在控制台中得到结果: 但是使用jsp我在数据表中得不到结果,也许我必须修复迭代器

  • 问题内容: 使用BeautifulSoul和Python,我希望所有与给定类属性匹配的项都包含这样的多个名称: 我尝试了几种匹配该类的方法。正则表达式,通配符,但我总是得到一个空列表。 有什么方法可以使用正则表达式,通配符或如何匹配此类? 问题答案: 您可以使用CSS选择器来匹配许多类: