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

jdbc/access:用户缺乏权限或找不到对象

巫新知
2023-03-14

我试图用外键将一个元组从输入关系INPUTRel插入到源关系uk_rd_penst中,然后更新目标关系uk_status的元组。UK_Status和UK_RD_POSTAD具有主键-外键关系。

以下是参数:inputrel:TransId,Company,ICB_Code,RD2008 uk_rd_peston:Company,ICB_Code,RD_spend_2008 uk_status:Company:RD08

因此,我将INPUTRel中的一个元组插入到uk_rd_pest中。它成功了。但是当我试图更新UK_Status的元组时,它返回了SQLException。

我正在尝试更新RD08,但我也需要检查是否违反了外键约束(如果公司名称不存在于uk_rd_pest中)。然而,我得到了以下错误:

SQLException: UCAExc:::4.0.3 user lacks privilege or object not found: 

我不知道该怎么修好它。我的html" target="_blank">代码的部分如下所示:

String queryFK = "SELECT * FROM UK_Status WHERE Company = "
                    + company + "";
            pstmt = conn.prepareStatement(queryFK);
            pstmt.setString(1, company);
            pstmt.setDouble(2, RD2008);
            String msg1;
            try {
                pstmt.executeUpdate();

            } catch (SQLException se) {
                // Check FK Violation: company must exist
                if (t2.get(company).getCompany() == null) {
                // or this ?->
                // if
                // (!(conn.createStatement()).executeQuery(queryFK).next())
                // {
                    String ICB_CodeTest = Integer.toString(ICB_Code);
                    String RD2008Test = Double.toString(RD2008);
                    ICB_CodeTest = ICB_CodeTest.replaceAll("\\s+", "");
                    RD2008Test = RD2008Test.replaceAll("\\s+", "");
                    msg1 = "Transaction "
                            + tid
                            + " failed due to a FK constraint, for the following values of the input; ("
                            + company + ", " + ICB_Code + ", " + RD2008
                            + ")";
                    String fk2 = "INSERT INTO OUTPUTRel"
                            + "(TransId, RunMessages) " + "values (?, ?)";
                    pstmt = conn.prepareStatement(fk2);
                    pstmt.setInt(1, tid);
                    pstmt.setString(2, msg1);
                    pstmt.execute();
                    pstmt.close();
                    continue;
                }
            }
            //
            String companyName = t2.get(company).getCompany();
            Status s = t2.get(companyName);
            s.setRD2008(RD2008);

            String query = "UPDATE UK_Status SET RD08 = ? WHERE Company = ?";
            pstmt = conn.prepareStatement(query);
            pstmt.setDouble(1, s.getRD2008());
            pstmt.setString(2, company);

            int number = (int) s.getRD2008();

            if (number < ICB_Code) {
                msg = "Transaction "
                        + tid
                        + " succeeded for the following values of the input; ("
                        + company + ", " + ICB_Code + ", " + RD2008 + ")";
                pstmt.execute();
                // Finally insert execution result on the output table.
                String oo = "INSERT INTO OUTPUTRel"
                        + "(TransId, RunMessages) " + "values (?, ?)";
                pstmt = conn.prepareStatement(oo);
                pstmt.setInt(1, tid);
                pstmt.setString(2, msg);
                pstmt.execute();
                pstmt.close();
            } else {
                msg = "Transaction "
                        + tid
                        + " failed due to a dynamic constraint, for the following values of the input; ("
                        + company + ", " + ICB_Code + ", " + RD2008 + ")";
                // Finally insert execution result on the output table.
                String dynamicFail = "INSERT INTO OUTPUTRel"
                        + "(TransId, RunMessages) " + "values (?, ?)";
                pstmt = conn.prepareStatement(dynamicFail);
                pstmt.setInt(1, tid);
                pstmt.setString(2, msg);
                pstmt.execute();
                pstmt.close();
            }
        }

共有1个答案

越学文
2023-03-14
String queryFK = "SELECT * FROM UK_Status WHERE Company = "
                + company + "";
        pstmt = conn.prepareStatement(queryFK);
        pstmt.setString(1, company);
        pstmt.setDouble(2, RD2008);
        String msg1;
        try {
            pstmt.executeUpdate();

        } catch (SQLException se) {

您的语句不能用作PreparedStatement,因为您输入的是值而不是。这就是错误来自BTW,因为您没有引用该值,所以数据库查找具有公司名称的列,而不是在列`company'中查找值为company的行。

另外,您可以使用executeupdate执行语句,该语句不能与select-statement一起使用,也不会返回可以迭代的resultset。

 类似资料:
  • 我正在尝试做一些Ucanaccess实践,用Java管理一些数据库。我得到了一个我不知道如何解决的错误。 我在Access中有一个名为USERS的表: 自动编号,短文本,短文本,数字。 代码继续,但只有一些条件和查询。

  • 当我试图将数据放入数据库时,我出现了一个错误,这是我的注册函数

  • 我正在看一些旧代码,在运行一个单元测试时遇到了问题。 代码为: 但是,当试图准备语句时,它会抛出错误 用户缺少权限或找不到对象:CUSTOMERS_SEQ。下一个瓦尔。 我正在阅读错误本身,似乎找不到任何东西。奇怪的是,当我在本地运行查询选择CUSTOMERS_SEQ.NEXTVAL时,它工作正常。 任何和所有的帮助将不胜感激。

  • 问题内容: 因此,我已经在Google和堆栈中进行搜索,我发现了一堆错误相同的ppl,但是没有一种解决方案似乎可以解决我的问题。 我正在使用什么: Java 8 JavaEE7 TomEE 7.0 M3 JPA 2.0 ORM 1.0 Postgres 我认为问题在于命名查询,也许还有ManyToMany关系。 实体 User.java SystemRole.java XML配置 persiste

  • 我试图使用SQL从java代码编写一个查询,以查找两个日期列之间的年份差异。我有一个表,其中包含列和,我想计算这两列之间的年数。 我的java代码块: 每当我试图运行代码时,我都会得到错误 我想要的是获得列和之间的年数。