2012-09-29 121 views
5

首先,這是我第一次使用Apache Derby。我正在使用NetBeans,願意使用嵌入式Apache Derby,並且我遵循以下教程來配置和安裝數據庫。然後,我使用項目屬性將derby.jar文件附加到我的項目中。Apache Derby - java.sql.SQLException:無法啓動數據庫

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

所附的圖像會顯示在NetBeans enter image description here

我的數據庫名稱是 「接觸」 我的數據庫狀態。表名是「朋友」。

以下是我的測試代碼

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

但是,當我試圖將數據插入到數據庫中,這是給我下面的錯誤

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) 

這是爲什麼?請幫忙!

除了第一個主要問題之外,我還想問另外兩個問題。

  1. 我必須在這裏給出數據庫的顯式位置作爲連接。但是,當我把這個給客戶時,我該怎麼做?
  2. 我必須使用netbeans手動啓動數據庫連接。是否有自動啓動數據庫連接?使用代碼?

請幫幫我。謝謝

+3

這似乎是相關的:*「Derby的另一個實例可能已經啓動數據庫C:\ Users \ yohan \ .netbeans-derby \ contact。」* – assylias

+0

是的。但是沒有!或者,至少,我沒有自己做!代碼中是否有錯誤? –

回答

6

你的程序包含一些誤解和錯誤的任務!

  • 從圖片你可以看到你的DATABASE = contactDB沒有聯繫。
    「的jdbc:德比:C:/Users/yohan/.netbeans-derby/contact」 是錯誤
    「的jdbc:德比:C:/Users/yohan/.netbeans-derby/contactDB」 現在只有DB是正確的。
    錯誤:另一個Derby實例可能已經引導了數據庫C:\ Users \ yohan.netbeans-derby \ contact。

  • 對於Con.String,最好不要使用PATH
    將工作 「的jdbc:德比://本地主機:1527/C:/Users/yohan/.netbeans-derby/contactDB」,」 YOHAN」, 「XYZ」
    更好地爲 「的jdbc:德比://本地主機:1527/contactDB」, 「YOHAN」, 「XYZ」

這是更好地指定完整路徑表。否則,它只能在Netbeans中工作,已經有一個已經打開的表和一個默認模式。

  • prepareStatement
    內部的Netbeans con.prepareStatement( 「插入到FRIENDS值(,,)????」); (「將插入APP.FRIENDS值(?,?,?)」);

現在看看這個!

ps.setInt(1, id); 
    ps.setString(1, firstName); 
    ps.setString(2, lastName); 
  • 首先你設置ID與SETINT()。
  • 其次現在可以設置ID字符串了setString()(名字!!!!!)
  • 三在你重寫名字以包含lastName和姓氏在PS結束。是空的。

出現錯誤,不要再運行程序這會給你下一個錯誤

這是更好。錯誤列表將會增長。這很難閱讀。在你的情況下,第一個錯誤是在createConnection並運行!

  • 錯誤的createConnection
  • 錯誤con.prepareStatement(」 ...
  • 錯誤ps.executeUpdate()
  • 錯誤closeConnection()

布爾測試它如果

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

如果連接失敗,則不需要進一步運行。

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

我希望這可以幫助你一點。

+0

非常感謝回覆。對此,我真的非常感激。我編輯它,連接失敗!但是,contactDB是URL的名稱,而不是數據庫。數據庫名稱是「聯繫人」。我按照教程 –

+0

看了你的圖像'--contactDB - APP - FRIENDS' –

+0

連接失敗,出現「java.sql.SQLException:找不到適合jdbc的驅動程序:derby:// localhost:1527/C :/用戶/ YOHAN /。netbeans-derby/contactDB「 –

5

您datasae已經連接斷開右鍵 - >斷開現在就試試,

它會奏效肯定。

+0

這對我有效。我運行的Web應用程序連接到數據庫,並且無法通過IDE進行連接,但是一旦我停止了應用程序,我就可以從IDE連接。 – petre

+0

也爲我解決了使用intellij – payloc