2012-09-29 23 views
5

Primero, esta es mi primera vez con Apache Derby. Estoy usando netbeans, estoy dispuesto a utilizar Apache derby incorporado, y seguí el siguiente tutorial para configurar e instalar la base de datos. Luego, adjunté el archivo derby.jar a mi proyecto, usando las propiedades del proyecto.Apache Derby - java.sql.SQLException: Error al iniciar la base de datos

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

La imagen adjunta se mostrará el estado de mi base de datos en netbeans enter image description here

Mi nombre base de datos es "contacto". El nombre de la tabla es "AMIGOS".

que sigue es mi código de prueba

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

Pero, cuando estoy tratando de insertar datos en la base de datos, es que me da el siguiente error

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) 

¿Por qué es esto? ¡Por favor ayuda!

Aparte de la primera pregunta principal, me gustaría hacer otras 2 preguntas.

  1. Tengo que dar aquí la ubicación explícita de la base de datos como la conexión. Pero, cuando le doy esto a un cliente, ¿cómo puedo hacer eso?
  2. Tengo que iniciar la conexión de la base de datos manualmente usando netbeans. ¿Hay alguna forma de iniciar la conexión de la base de datos automáticamente? ¿Usando código?

Por favor, ayúdame. Gracias

+3

Esto parece relevante: * "Otra instancia de Derby ya puede haber arrancado la base de datos C: \ Users \ yohan \ .netbeans-derby \ contact." * – assylias

+0

sí ... ¡Pero no lo hay! O, al menos, ¡yo no lo hice solo! ¿Hay algún error en el código? –

Respuesta

6

¡Su programa contiene algunos malentendidos y asignaciones incorrectas!

  • De la imagen se puede ver la base de datos = contactDB se pone en contacto.
    "jdbc: derby: C: /Users/yohan/.netbeans-derby/contact" es mal
    "jdbc: derby: C: /Users/yohan/.netbeans-derby/contactDB" ahora sólo el DB es correcto.
    Error: Otra instancia de Derby ya puede haber arrancado la base de datos C: \ Users \ yohan.netbeans-derby \ contact.

  • Para el Con.String es mejor no utilizar la ruta
    funcionará "jdbc: derby: // localhost: 1527/C: /Users/yohan/.netbeans-derby/contactDB"," Yohan", "XYZ"
    mejor es "jdbc: derby: // localhost: 1527/contactDB", "Yohan", "XYZ"

es mejor especificar la ruta completa de la mesa. De lo contrario, solo funciona en Netbeans, con una tabla ya abierta y un esquema predeterminado.

  • prepareStatement
    solamente dentro Netbeans con.prepareStatement ("insertar en amigos valores (,,)???");
    mejor es con.prepareStatement ("insertar en los valores de APP.FRIENDS (?,?,?)");

¡Ahora mira esto!

ps.setInt(1, id); 
    ps.setString(1, firstName); 
    ps.setString(2, lastName); 
  • Primero se ajusta el Identificación con setInt().
  • Segunda Ahora se establece el Identificación con una cadena de setString() (nombre !!!!!)
  • En tercer lugar, al final se reemplaza con primerNombre lastName y el apellido en el ps. esta vacio.

Esto le dará el siguiente error

Es mejor, cuando se produce un error , para no correr el programa más. La lista de errores crecerá. Es difícil de leer en su caso, el primer error está en createConnection y se ejecuta en !!

  • CreateConnection error
  • error con.prepareStatement (" ...
  • ps.executeUpdate error()
  • error closeConnection()

prueba con booleano y si!

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

No es necesario seguir corriendo si la conexión falla.

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); 
[...] 

Espero que esto te ayude un poco.

+0

Muchas gracias por la respuesta. Realmente lo aprecio. Lo edité y la conexión falla. Sin embargo, contactDB es el nombre de la URL, no de la base de datos. El nombre de la base de datos es "contacto". Lo hice siguiendo el tutorial –

+0

Mire su imagen '--contactDB - APP - FRIENDS' –

+0

La conexión falla con" java.sql.SQLException: No se encontró un controlador adecuado para jdbc: derby: // localhost: 1527/C :/Usuarios/yohan /.netbeans-derby/contactDB " –

5

su datasae ya está conectado desconexión click derecho -> desconexión ahora probarlo,

que funcionará seguro.

+0

Eso funcionó para mí. Tenía la aplicación web en ejecución que estaba conectada a la base de datos, y no pude conectarme a través del IDE también. Pero una vez que detuve la aplicación, pude conectarme desde IDE. – petre

+0

también resolvió para mí el uso de intellij – payloc

Cuestiones relacionadas