【问题标题】:Java Derby Apache Table/View does not existJava Derby Apache 表/视图不存在
【发布时间】:2019-02-11 03:44:19
【问题描述】:

感谢您花时间阅读。我知道有人问过其他类似的问题。我遇到的问题是我已经检查了相关问题中的所有问题,但仍然没有解决方案。我只是想选择一个列来查看它是否正常工作,但如果我尝试选择所有列也没关系。

这是我的代码....

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

public class DBConnection {

    private static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
    private static String JDBC_URL;

    Connection con;
    public  DBConnection() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class.forName(DRIVER).newInstance();

        con = DriverManager.getConnection(connectionUrl());
        if(con != null)
        System.out.println("Connection Established");

        Statement st = con.createStatement(); 
        ResultSet rs = st.executeQuery("select * from MOVIES");
        while(rs.next()) { String movieName = rs.getString(1);
            System.out.println(movieName); }

          rs.close();
        con.close();
    }

    private static final String connectionUrl() {
        JDBC_URL = "jdbc:derby:MoviePlayer_JavaFlix;create=true;USER = JavaFlix; password = 123";
        return JDBC_URL;
    }
}

我已经检查了我的数据库属性中的 url 路径,它是相同的。与数据库的连接已建立。我什至在 SQL Scrapbook 中运行了查询并且对此没有任何问题。我的用户名和密码是一样的。

这是控制台输出...

Connection Established
Exception in thread "main" java.sql.SQLSyntaxErrorException: Table/View 'MOVIES' does not exist.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(Unknown Source)
    at data.source.db.DBConnection.<init>(DBConnection.java:23)
    at data.source.db.Main.main(Main.java:8)
Caused by: ERROR 42X05: Table/View 'MOVIES' does not exist.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.sql.compile.FromBaseTable.bindTableDescriptor(Unknown Source)
    at org.apache.derby.impl.sql.compile.FromBaseTable.bindNonVTITables(Unknown Source)
    at org.apache.derby.impl.sql.compile.FromList.bindTables(Unknown Source)
    at org.apache.derby.impl.sql.compile.SelectNode.bindNonVTITables(Unknown Source)
    at org.apache.derby.impl.sql.compile.DMLStatementNode.bindTables(Unknown Source)
    at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown Source)
    at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
    ... 4 more

这是我的数据库位置...

这是我的文件夹路径... C:\Users\Banan\eclipse-workspace\MoviePlayer_JavaFlix

我想我可能发现了一些可能导致问题的问题...

当我运行st.executeUpdate("CREATE TABLE movies (ID INT PRIMARY KEY, movie_name VARCHAR(50))")

创建了一个表...

但是,我无法选择、插入或对此进行任何操作。

【问题讨论】:

  • 删除create=true 属性并再次尝试运行。我想知道您是否指向错误的位置并且 apache 正在创建一个新的 MoviePlayer_JavaFlix 空白数据库,其中没有可供选择的 MOVIES 表?
  • 如果是这种情况,您应该包含数据库的完整路径,或者确保您从包含数据库的同一文件夹中执行您的 java 应用程序。例如:JDBC_URL = "jdbc:derby:c:/myprojects/whateverpath/MoviePlayer_JavaFlix;USER = JavaFlix; password = 123";
  • 感谢您的回复。我已经删除了 create=true 并且仍然有同样的问题。当我查看 JDBC 连接属性并尝试使用完整路径时,我的数据库位置在我的应用程序中。
  • 您是否尝试将连接代码设置为:JDBC_URL = "jdbc:derby:C:/Users/Banan/eclipse-workspace/MoviePlayer_JavaFlix/Databases;USER = JavaFlix; password = 123";。注意路径中的分隔符是正斜杠/ 而不是反斜杠``
  • 是的,我改变了分隔符。我什至在数据浏览器选项卡中断开了我的数据库。我检查了其他文件夹中没有重复项。运行调试以检查连接,它仍然指向预期的文件夹。很好地检查了这些表是否确实存在并运行查询以再次检查。

标签: java mysql derby


【解决方案1】:

您以JavaFlix 用户身份连接,因此这也是您从中选择的默认架构。您尝试访问的表位于 APP 架构中。您需要在表名前加上架构,例如

SELECT * FROM APP.MOVIES

或者,创建一个同义词,例如

CREATE SYNONYM MOVIES FOR APP.MOVIES

之后,您应该能够从您的架构中执行 SELECT * FROM MOVIES

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 2018-05-02
    • 2013-07-04
    • 2016-08-11
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多