2017-05-29 54 views
1

我正在製作一個需要訪問Derby數據庫的Java程序。但是,當我嘗試運行它時,出現錯誤「Schema RCVT不存在」。 而且,當我編碼它時,程序結束。 Here's我的代碼:使用Java Derby的「架構架構名稱不存在」

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"; 

這是SQL腳本,我從IJ>執行項目中:

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(); 
    } 
+0

包含您獲得的** exact **異常及其堆棧跟蹤,並指定您在獲取該消息時運行的**精確**代碼行。 –

+0

@BryanPendleton只包括 –

+0

這對我來說並不明顯,爲什麼你會得到這種例外。可能值得在setConsult()方法中拋棄'mConsult'的值:它真的只是「SELECT * FROM Person」嗎?由於您以用戶'rcvt'身份登錄,因此應該自動將'rcvt'模式作爲當前模式。也許當你打開你的「ij」會話時,你沒有以用戶'rcvt'登錄;而是以用戶'app'的身份登錄?請參閱https://stackoverflow.com/questions/15735068/omit-schema-in-the-derby-query –

回答

1

看起來問題出在你的SQL腳本。來自官方FAQ

因此,如果您的應用程序在創建任何對象之前嘗試訪問當前模式,您將看到模式不存在錯誤。可能性是你嘗試在創建之前執行DROP TABLE,...

這是你的情況。正如您所提到的,您正在從執行腳本的IDE創建模式,因此第一次無法運行,因爲表Person不存在以及相應的模式。

要解除這個問題,請在腳本中明確創建架構,或者至少對第一次運行comment drop drop命令。

希望它有幫助!