2012-09-29 35 views
5

Innanzitutto, questa è la mia prima volta con Apache Derby. Sto usando netbeans, disposto ad usare derby apache incorporato, e ho seguito il seguente tutorial per la configurazione e l'installazione del database. Quindi, ho allegato il file derby.jar al mio progetto, usando le proprietà del progetto.Apache Derby - java.sql.SQLException: impossibile avviare il database

http://netbeans.org/kb/docs/ide/java-db.html#starting

L'immagine allegata mostra il mio stato del database in NetBeans enter image description here

mio nome del database è "contatto". Il nome della tabella è "FRIENDS".

seguito è il mio codice di prova

**DatabaseConnector.java** 

import java.sql.*; 

public class DataBaseConnector 
{ 
    private Connection con; 

    public DataBaseConnector() 
    { 

    } 

    private void createConnection() 
    { 
     try 
     { 
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
      con = DriverManager.getConnection("jdbc:derby:C:/Users/yohan/.netbeans-derby/contact","yohan","xyz"); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    private void closeConnection() 
    { 
     try 
     { 
      con.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 


    public void insertData(int id, String firstName, String lastName) 
    { 
     createConnection(); 
     try 
     { 
      PreparedStatement ps = con.prepareStatement("insert into FRIENDS values(?,?,?)"); 
      ps.setInt(1, id); 
      ps.setString(1, firstName); 
      ps.setString(2, lastName); 

      int result = ps.executeUpdate(); 

      if(result>0) 
      { 
       System.out.println("Data Inserted"); 
      } 
      else 
      { 
       System.out.println("Something happened"); 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      closeConnection(); 
     } 
    } 


} 

DatabaseUI.java

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 

public class DatabaseUI extends JFrame 
{ 
    private JLabel firstName, id, lastName; 
    private JTextField idTxt, firstNameTxt, lastNameTxt; 
    private JButton ok; 

    public DatabaseUI() 
    { 
    firstName = new JLabel("First Name: "); 
    lastName = new JLabel("Last Name: "); 
    id = new JLabel("ID: "); 

    firstNameTxt = new JTextField(10); 
    lastNameTxt = new JTextField(10); 
    idTxt = new JTextField(10); 

    ok = new JButton("OK"); 
    ok.addActionListener(new OKAction()); 

    JPanel centerPanel = new JPanel(); 
    centerPanel.setLayout(new GridLayout(4,2)); 
    centerPanel.add(id); 
    centerPanel.add(idTxt); 
    centerPanel.add(firstName); 
    centerPanel.add(firstNameTxt); 
    centerPanel.add(lastName); 
    centerPanel.add(lastNameTxt); 
    centerPanel.add(new JPanel()); 
    centerPanel.add(ok); 

    getContentPane().add(centerPanel,"Center"); 


    this.pack(); 
    this.setVisible(true); 


    } 

    private class OKAction implements ActionListener 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      DataBaseConnector db = new DataBaseConnector(); 

      int id = Integer.parseInt(idTxt.getText()); 

      db.insertData(id, firstNameTxt.getText().trim(), lastNameTxt.getText().trim()); 
     } 
    } 

    public static void main(String[]args) 
    { 
     new DatabaseUI(); 
    } 
} 

Ma, quando sto cercando di inserire i dati nel database, che mi sta dando il seguente errore

run: 
java.sql.SQLException: Failed to start database 'C:/Users/yohan/.netbeans-derby/contact' with class loader [email protected], see the next exception for details. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source) 
    at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) 
    at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) 
    at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) 
    at java.sql.DriverManager.getConnection(DriverManager.java:579) 
    at java.sql.DriverManager.getConnection(DriverManager.java:221) 
    at DataBaseConnector.createConnection(DataBaseConnector.java:17) 
    at DataBaseConnector.insertData(DataBaseConnector.java:40) 
    at DatabaseUI$OKAction.actionPerformed(DatabaseUI.java:53) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6504) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Caused by: java.sql.SQLException: Failed to start database 'C:/Users/yohan/.netbeans-derby/contact' with class loader [email protected], see the next exception for details. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    ... 51 more 
Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database C:\Users\yohan\.netbeans-derby\contact. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) 
    ... 48 more 
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database C:\Users\yohan\.netbeans-derby\contact. 
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source) 
    at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source) 
    ... 48 more 
java.lang.NullPointerException 
    at DataBaseConnector.insertData(DataBaseConnector.java:43) 
    at DatabaseUI$OKAction.actionPerformed(DatabaseUI.java:53) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6504) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
java.lang.NullPointerException 
    at DataBaseConnector.closeConnection(DataBaseConnector.java:29) 
    at DataBaseConnector.insertData(DataBaseConnector.java:65) 
    at DatabaseUI$OKAction.actionPerformed(DatabaseUI.java:53) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6504) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
BUILD SUCCESSFUL (total time: 12 seconds) 

Perché è questo? Per favore aiuto!

A parte questa prima domanda principale, vorrei fare altre 2 domande.

  1. Devo fornire l'ubicazione esplicita del database come connessione qui. Ma quando lo do a un cliente, come posso farlo?
  2. Devo avviare manualmente la connessione al database utilizzando netbeans. È comunque necessario avviare automaticamente la connessione al database? Usando il codice?

Per favore aiutatemi. Grazie

+3

Questo sembra pertinente: * "Un'altra istanza di Derby potrebbe aver già avviato il database C: \ Users \ yohan \ .netbeans-derby \ contact." * – assylias

+0

sì..Ma non c'è! O, almeno, non l'ho fatto da solo! C'è qualche errore nel codice? –

risposta

6

Il tuo programma contiene alcune incomprensioni e incarichi errati!

  • Dalla vostra immagine è possibile vedere il DATABASE = contactDB venga a contatto.
    "jdbc: derby: C: /Users/yohan/.netbeans-derby/contact" è sbagliato
    "jdbc: derby: C: /Users/yohan/.netbeans-derby/contactDB" ora solo il DB è corretta.
    Errore: Un'altra istanza di Derby potrebbe aver già avviato il database C: \ Users \ yohan.netbeans-derby \ contact.

  • Per la Con.String è meglio non utilizzare il percorso
    funzionerà "jdbc: derby: // localhost: 1527/C: /Users/yohan/.netbeans-derby/contactDB"," Yohan", "xyz"
    meglio è "jdbc: derby: // localhost: 1527/contactDB", "Yohan", "xyz"

E 'meglio specificare il percorso completo del tavolo. Altrimenti funziona solo in Netbeans, con una tabella già aperta e uno schema predefinito.

  • prepareStatement
    solo all'interno Netbeans con.prepareStatement ("inserire in amici valori (,,)???");
    meglio è con.prepareStatement ("inserire in APP.FRIENDS valori (?,?,?)");

Ora guarda!

ps.setInt(1, id); 
    ps.setString(1, firstName); 
    ps.setString(2, lastName); 
  • Per prima cosa impostare la id con setInt().
  • Seconda Ora è impostare la id con una stringa di setString() (firstName !!!!!)
  • terzo alla fine si sostituisce firstName con lastName e Cognome nella ps. è vuoto.

Questo vi darà la prossima errore

E 'meglio, quando si verifica un errore , non correre ulteriormente il programma. L'elenco degli errori crescerà. È difficile da leggere. nel tuo caso il primo errore è in createConnection e funziona su !!

  • CreateConnection errore
  • errore con.prepareStatement (" ...
  • errore ps.executeUpdate()
  • errore CloseConnection()

test con booleano e se!

private boolean createConnection() 
{ 
    try 
    { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     con = DriverManager.getConnection("jdbc:derby://localhost:1527/contactDB","yohan","xyz"); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Error getConnection"); 
     return false; 
    } 
return true; 
} 

Non è necessario eseguire ulteriormente se la connessione non riesce.

public void insertData(int id, String firstName, String lastName) 
    { 
     if (createConnection()) { 
     try 
     { 
      PreparedStatement ps = con.prepareStatement("INSERT INTO APP.FRIENDS values(?,?,?)"); 
      ps.setInt(1, id); 
      ps.setString(2, firstName); 
      ps.setString(3, lastName); 
[...] 

Spero che questo ti aiuti un po '.

+0

Grazie mille per la risposta. Lo apprezzo molto. L'ho modificato e la connessione fallisce! Tuttavia, contactDB è il nome dell'URL, non il database. Il nome del database è "contatto". L'ho fatto seguendo il tutorial –

+0

Guarda l'immagine '--contactDB - APP - FRIENDS' –

+0

La connessione fallisce con" java.sql.SQLException: nessun driver adatto trovato per jdbc: derby: // localhost: 1527/C :/Users/Yohan /.netbeans-derby/contactDB " –

5

tuo datasae è già collegato disconnessione tasto destro del mouse -> disconnessione ora provare,

che funzionerà sicuro.

+0

Questo ha funzionato per me. Avevo l'applicazione Web in esecuzione che era connessa al DB e non potevo connettermi tramite l'IDE, ma una volta interrotta l'applicazione potevo connettermi dall'IDE – petre

+0

ha anche risolto per me l'utilizzo di intellij – payloc

Problemi correlati