Apache Derby - java.sql.SQLException: Failed to start database
首先,这是我第一次使用 Apache Derby。我正在使用 netbeans,愿意使用嵌入式 apache derby,并按照以下教程配置和安装数据库。然后,我使用项目属性将 derby.jar 文件附加到我的项目中。
http://netbeans.org/kb/docs/ide/java-db.html#starting
所附图片将在 netbeans 中显示我的数据库状态
我的数据库名称是"联系人"。表名是"FRIENDS"。
以下是我的测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | **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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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(); } } |
但是,当我尝试将数据插入数据库时??,它给了我以下错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | 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.<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 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) |
这是为什么?请帮忙!
除了第一个主要问题,我想再问两个问题。
请帮帮我。谢谢
您的数据已连接断开右键单击 -> 断开连接现在尝试它,
它肯定会起作用的。
您的程序包含一些误解和错误分配!
-
从您的图像中您可以看到您的 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 中工作,具有已打开的表和默认模式。
-
准备声明
仅在 Netbeans con.prepareStatement("insert into FRIENDS values(?,?,?)");
更好的是 con.prepareStatement("insert into APP.FRIENDS values(?,?,?)");
现在看看这个!
1 2 3 | ps.setInt(1, id); ps.setString(1, firstName); ps.setString(2, lastName); |
- 首先,您使用 setInt() 设置 id。
- 第二现在您使用字符串 setString() 设置 id ( firstName !!!!!)
- 最后,您在 ps 中使用 lastName 和 lastName 覆盖 firstName。是空的。
这会给你下一个错误
发生错误时最好不要继续运行程序。错误列表会变长。很难读。在您的情况下,第一个错误在 createConnection 中并在 !!
- 错误创建连接
- 错误 con.prepareStatement("...
- 错误 ps.executeUpdate()
- 错误关闭连接()
用 boolean 和 if 测试它!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } |
如果连接失败,无需继续运行。
1 2 3 4 5 6 7 8 9 10 | 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); [...] |
希望对你有所帮助。
您的数据库已经连接,您必须断开连接。右键单击->断开连接。
现在再试一次,它肯定会起作用。