【问题标题】:"Schema name-of-schema does not exist" with Java DerbyJava Derby 中的“Schema name-of-schema 不存在”
【发布时间】:2017-10-29 09:14:47
【问题描述】:

我目前正在用 Java 制作一个需要访问 Derby 数据库的程序。但是,当我尝试运行它时,我收到错误“Schema RCVT 不存在”。 而且,当我编写代码时,程序结束了。 这是我的代码:

public ResultSetTableModel(String mController,
                           String URL,
                           String USERNAME,
                           String PASSWORD,
                           String mQuery) throws SQLException, ClassNotFoundException {
    Class.forName(mController);
    mConnection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    mStatement = mConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);
    mConnected = true;
    setConsult(mQuery);
}

这里是我发送给这个方法的参数:

private static final String CONTROLLER = "org.apache.derby.jdbc.EmbeddedDriver";
private static final String URL = "jdbc:derby:GOT";
private static final String USERNAME = "rcvt";
private static final String PASSWORD = "rcvt";
private static final String PREDETERMINED_CONSULT = "SELECT * FROM Person";

这是我在项目内部从 ij> 执行的 SQL 脚本:

DROP TABLE Person;
CREATE TABLE Person (
    id int PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY ,
    age int NOT NULL,
    name VARCHAR (15) NOT NULL,
    house VARCHAR (15) NOT NULL,
    allegiance VARCHAR (15) NOT NULL,
    alias VARCHAR (30) NOT NULL,
    continent VARCHAR (10) NOT NULL,
    region VARCHAR (25) NOT NULL,
    title VARCHAR (50) NOT NULL,
    active BOOLEAN NOT NULL
);

INSERT INTO Person (age, name, house, allegiance, alias, continent, region, title, active) VALUES (43, 'Cersei', 'Lannister', 'Lannister', 'The Lioness', 'Westeros', 'The Crownlands', 'Queen Of The Andals And The First Men', TRUE);

我一直在寻找这个错误,但我无法在任何地方找到解决方案。

这是我得到的例外:

"C:\Program Files\Java\jdk1.8.0_131\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\lib\idea_rt.jar=50596:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;C:\Users\Vidriales Trujillo R\IdeaProjects\AccesoDB\out\production\AccesoDB;C:\Program Files\Java\jdk1.8.0_131\db\lib\derby.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derby.war;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbynet.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyrun.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbytools.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyclient.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_cs.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_es.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_fr.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_hu.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_it.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_pl.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_ru.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_de_DE.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_ja_JP.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_ko_KR.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_pt_BR.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_zh_CN.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyLocale_zh_TW.jar;C:\Program Files\Java\jdk1.8.0_131\db\lib\derbyoptionaltools.jar" Runner
java.sql.SQLSyntaxErrorException: Schema 'RCVT' 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 ResultSetTableModel.setConsult(ResultSetTableModel.java:88)
    at ResultSetTableModel.<init>(ResultSetTableModel.java:28)
    at ConsultPersons.<init>(ConsultPersons.java:41)
    at GUI.<init>(GUI.java:9)
    at Runner$1.run(Runner.java:10)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: ERROR 42Y07: Schema 'RCVT' 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.catalog.DataDictionaryImpl.getSchemaDescriptor(Unknown Source)
    at org.apache.derby.iapi.sql.StatementUtil.getSchemaDescriptor(Unknown Source)
    at org.apache.derby.impl.sql.compile.QueryTreeNode.getSchemaDescriptor(Unknown Source)
    at org.apache.derby.impl.sql.compile.QueryTreeNode.getSchemaDescriptor(Unknown Source)
    at org.apache.derby.impl.sql.compile.TableName.bind(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)
    ... 21 more
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at ConsultPersons.<init>(ConsultPersons.java:63)
    at GUI.<init>(GUI.java:9)
    at Runner$1.run(Runner.java:10)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

当它到达这一行时:

mTableModel = new ResultSetTableModel(CONTROLLER, URL, USERNAME, PASSWORD, PREDETERMINED_CONSULT);

调用此方法:

public void setConsult(String mConsult) throws SQLException,
            IllegalStateException {

        if (!mConnected) {
            throw new IllegalStateException("Theres no DB connection");
        }
        mAllResults = mStatement.executeQuery(mConsult);
        mMetaData = mAllResults.getMetaData();
        mAllResults.last();
        mNumberOfRows = mAllResults.getRow();
        fireTableStructureChanged();
    }

【问题讨论】:

  • 包含您获得的 exact 异常及其堆栈跟踪,并指定您在获得该异常时运行的 exact 代码行消息。
  • @BryanPendleton 刚刚包括
  • 对我来说,你为什么会得到那个例外并不明显。在 setConsult() 方法中倾倒“mConsult”的值可能值得:它真的只是“SELECT * FROM Person”吗?由于您以用户“rcvt”身份登录,因此您应该自动将“rcvt”模式作为当前模式。也许当您打开“ij”会话时,您没有以用户 'rcvt' 身份登录;相反,您以用户“app”身份登录?见stackoverflow.com/questions/15735068/…
  • 也许这个答案会对你有所帮助。 stackoverflow.com/a/53954651/6295238>

标签: java derby javadb


【解决方案1】:

看起来问题出在您的 SQL 脚本中。来自官方FAQ

因此,如果您的应用程序在其中创建任何对象之前尝试访问当前架构,您将看到架构不存在错误。可能是您尝试在创建之前执行 DROP TABLE,...

这是你的情况。正如您所提到的,您正在从执行脚本的 IDE 创建架构,所以第一次它不会工作,因为表 Person 不存在以及相应的架构。

要摆脱这一点,请在脚本中显式创建架构,或者至少在第一次运行评论删除表命令时创建架构。

希望对你有帮助!

【讨论】:

  • 我一直在使用 Apache Hive 和 Derby,hive-site.xml 中有一个配置。
猜你喜欢
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2017-10-06
  • 2018-09-27
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多