Apache Derby – java.sql.SQLException:无法启动数据库

首先,这是我第一次使用Apache Derby。 我正在使用netbeans,愿意使用嵌入式apache derby,我按照以下教程配置和安装数据库。 然后,我使用项目属性将derby.jar文件附加到我的项目中。

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

附加的图像将在netbeans中显示我的数据库状态 在此处输入图像描述

我的数据库名称是“contact”。 表名是“FRIENDS”。

以下是我的测试代码

**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 sun.misc.Launcher$AppClassLoader@1050169, 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.(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection30.(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection40.(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 sun.misc.Launcher$AppClassLoader@1050169, 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手动启动数据库连接。 反正有没有自动启动数据库连接? 使用代码?

请帮帮我。 谢谢

您的程序包含一些误解和错误的任务!

  • 从您的图像中,您可以看到您的DATABASE = contactDB未联系。
    “jdbc:derby:C:/Users/yohan/.netbeans-derby/contact” 错了
    “jdbc:derby:C:/Users/yohan/.netbeans-derby/contactDB”现在只有数据库是正确的。
    错误: Derby的另一个实例可能已经启动了数据库C:\ Users \ yohan.netbeans-derby \ contact。

  • 对于Con.String,最好不要使用PATH
    将工作 “jdbc:derby:// localhost:1527 / C:/Users/yohan/.netbeans-derby/contactDB”,“yohan”,“xyz”
    更好的是 “jdbc:derby:// localhost:1527 / contactDB”,“yohan”,“xyz”

最好指定表的完整路径。 否则它仅在Netbeans中工作,具有已打开的表和默认架构。

  • prepareStatement
    在Netbeans con.prepareStatement 内部 (“插入FRIENDS值(?,?,?)”);
    更好的是con.prepareStatement(“插入APP.FRIENDS值(?,?,?)”);

现在看看这个!

  ps.setInt(1, id); ps.setString(1, firstName); ps.setString(2, lastName); 
  • 首先使用setInt()设置id
  • 秒现在你用字符串 setString()设置id (firstName !!!!!)
  • 第三个结尾,你用lastName覆盖firstName,用ps覆盖lastName。 是空的。

这将为您提供下一个错误

发生错误时 ,最好不要进一步运行程序。 错误列表会长大。 这很难读。 在你的情况下,第一个错误是在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); [...] 

我希望这对你有所帮助。

您的数据已经连接断开右键单击 – >断开现在尝试,

它会确定的。