【问题标题】:Derby DB: Table/View doesn't exist ERROR 42X05Derby DB:表/视图不存在错误 42X05
【发布时间】:2018-05-02 10:52:14
【问题描述】:
  1. 我安装了一个 Derby DB 并打开了一个名为“MyDbTest”的连接。
  2. 我通过 SQL 命令为“MyDbTest”连接创建了一个名为 BOOK 的表:

    创建表簿(ID INT,DESCRIPTION VARCHAR(20),UNITCOST VARCHAR(20),ISBN VARCHAR(20),NBOFPAGES INT);

  3. 我使用以下命令运行了 Derby 服务器:“startNetworkServer.bat”

  4. 我运行了以下代码(使用 Open JPA):

公共类主{

  public static void main(String[] args) throws SQLException, ClassNotFoundException {

        System.out.println("\n\n>>> Executing : " + Main.class.toString() + " <<<\n");    
        persistBook(new Book(new Long(5000), "H2G2", "Best IT Scifi Book", new Float(12.5), "1234-5678-5678",
                new Integer(247)));    
        Book book = findBook(new Long(5000));    
       System.out.println("# " + book);
  }

  /**
   * Gets a database connection
   */
  static {
    try {
      Class.forName("org.apache.derby.jdbc.ClientDriver");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

  private static Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:derby://localhost:1527/MyDbTest;create=true", "app", "app");
  }

  /**
   * Persists the book to the database
   */
  private static void persistBook(Book book) throws SQLException {

    String query = "INSERT INTO BOOK (ID, TITLE, DESCRIPTION, UNITCOST, ISBN, NBOFPAGE) VALUES (?, ?, ?, ?, ?, ?)";

    try (PreparedStatement stmt = getConnection().prepareStatement(query)) {

            stmt.setLong(1, book.getId().longValue());
      stmt.setString(2, book.getTitle());
      stmt.setString(3, book.getDescription());
            stmt.setFloat(4, book.getUnitCost().longValue());
      stmt.setString(5, book.getIsbn());
            stmt.setInt(6, book.getNbOfPage().intValue());

      stmt.executeUpdate();
    }
  }
}

我得到一个错误:

线程“主”java.sql.SQLSyntaxErrorException 中的异常: 表/视图“书”不存在。
原因:错误 42X05:表/视图“书”不存在。

我还阅读了这篇文章中提出的解决方案:Is it necessary to create tables each time you connect the derby database?。 不幸的是,他们都没有帮助我。

  1. 我将“jdbc:derby://localhost:1527/MyDbTest;create=true”更改为“jdbc:derby://localhost:1527/MyDbTest;create=false”
  2. 我不在 Derby 中使用“内存中”配置。
  3. 我不认为我以其他用户的身份连接到数据库(我不确定。如何检查?)。

【问题讨论】:

  • 您创建表的过程尚不清楚。好难说也许您的程序没有连接到同一个数据库?可能是不同的用户和/或架构?
  • 我想过。我在 ij shell 中输入:“显示连接”并得到:CONNECTION0* - jdbc:derby:MyDbTest * = 当前连接
  • 另外,代码中没有 JPA。这只是 JDBC。最重要的是,代码不会关闭数据库连接。这应该是固定的。
  • Derby 中“表不存在”的 3 个常见原因:stackoverflow.com/questions/22996818/…

标签: jdbc derby


【解决方案1】:

我遇到这个错误是因为我在 SELECT 语句中使用了数据库名称而不是表的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2017-08-16
    • 2013-07-04
    • 2011-08-17
    相关资源
    最近更新 更多