2017-05-29 4 views
1

Je suis en train de créer un programme avec Java qui doit accéder à une base de données Derby. Cependant, lorsque j'essaie de l'exécuter, j'obtiens l'erreur "Schema RCVT n'existe pas". Et, comme je l'ai codé, le programme se termine. Here's mon code:"Le nom de schéma du schéma n'existe pas" avec 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); 
} 

Voici les paramètres que j'envoie à cette méthode:

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

Et c'est le script SQL j'exécute à partir ij> à l'intérieur du projet:

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

J'ai cherché un moment pour cette erreur et je ne trouve pas la solution n'importe où.

C'est l'exception que je reçois:

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

Quand il atteint cette ligne:

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

qui appelle cette méthode:

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

Incluez l'exception ** exact ** que vous avez obtenue, avec sa trace de pile, et spécifiez la ligne de code ** exact ** que vous avez exécutée lorsque vous avez reçu ce message. –

+0

@BrianPendleton juste inclus –

+0

Ce n'est pas évident pour moi pourquoi vous obtenez cette exception. Il pourrait être utile de vider la valeur de 'mConsult' dans la méthode setConsult(): est-ce vraiment "SELECT * FROM Person"? Puisque vous vous connectez en tant qu'utilisateur 'rcvt', vous devriez avoir le schéma 'rcvt' comme schéma actuel automatiquement. Peut-être que lorsque vous avez ouvert votre session "ij", vous ne vous êtes pas connecté en tant qu'utilisateur 'rcvt'; Au lieu de cela, vous vous êtes connecté en tant qu'utilisateur 'app'? Voir https://stackoverflow.com/questions/15735068/omit-schema-in-the-derby-query –

Répondre

1

On dirait que le problème est dans votre Script SQL. De officielle FAQ:

Vous verrez le schéma n'existe erreur si votre application tente d'accéder au schéma actuel avant que les objets ont été créés en elle. Les possibilités sont vous essayez d'effectuer un DROP TABLE avant de le créer, ...

Ceci est votre cas. Comme vous l'avez mentionné, vous créez un schéma à partir de l'EDI exécutant le script, donc la première fois cela ne fonctionnera pas car la table Person n'existe pas aussi bien que le schéma correspondant. Pour vous déconnecter de cela, créez explicitement le schéma dans votre script, ou au moins pour la première commande drop table du commentaire.

J'espère que ça aide!