java sql报错不能catch,Apache Derby - java.sql.SQLException:无法启动数据库

First, this is my first time with Apache Derby. I am using netbeans, willing to use embedded apache derby, and I followed the following tutorial for configuring and installing the database. Then, I attached the derby.jar file to my project, using project properties.

The attached image will show my database status in netbeans

ym3pf.png

My database name is "contact". Table name is "FRIENDS".

Following is my test code

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

}

}

But, when I am trying to insert data into the database, it is giving me the following error

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)

Why is this? Please help!

Apart from that first main question, I would like to ask another 2 questions.

I have to give the explicit location of the database as the connection here. But, when I give this to a client, how can I do that?

I have to start the database connection manually using netbeans. Is there anyway to start the database connection automatically? Using code?

Please help me. Thanks

解决方案

Your program contains some misunderstandings and wrong assignments !

From your image you can see your DATABASE = contactDB not contact.

"jdbc:derby:C:/Users/yohan/.netbeans-derby/contact" is wrong

"jdbc:derby:C:/Users/yohan/.netbeans-derby/contactDB" now only the DB is correct.

Error: Another instance of Derby may have already booted the database C:\Users\yohan.netbeans-derby\contact.

For the Con.String it's better not to use the PATH

will work "jdbc:derby://localhost:1527/C:/Users/yohan/.netbeans-derby/contactDB","yohan","xyz"

better is "jdbc:derby://localhost:1527/contactDB","yohan","xyz"

It is better to specify the full Path to the table. Otherwise it is working only in Netbeans, with an already open table and a default schema.

prepareStatement

only inside Netbeans con.prepareStatement("insert into FRIENDS values(?,?,?)");

better is con.prepareStatement("insert into APP.FRIENDS values(?,?,?)");

Now look at this !

ps.setInt(1, id);

ps.setString(1, firstName);

ps.setString(2, lastName);

First you set the id with setInt().

Second Now you set the id with a string setString() ( firstName !!!!!)

Third at the end you override firstName with lastName and the lastName in the ps. is empty.

This will give you the next Error

It is better , when an error occurs, not to run the program further. The error list will grow up. It's hard to read. in your case the first Error is in createConnection and runs on !!

Error createConnection

Error con.prepareStatement("...

Error ps.executeUpdate()

Error closeConnection()

Test it with boolean and if !

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 need to run further if the connection fails.

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

[...]

I hope this helps you a bit.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值