2012-09-29 38 views
2

首先,这是我第一次使用Apache Derby。我使用NetBeans,愿意使用嵌入的Apache Derby,我跟着配置和安装数据库Apache Derby中的数据库未找到错误

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: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: Database 'contact' not found. 
    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.newEmbedSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.handleDBNotFound(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:52) 
    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: Database 'contactDB' not found. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    ... 53 more 
java.lang.NullPointerException 
    at DataBaseConnector.insertData(DataBaseConnector.java:43) 
    at DatabaseUI$OKAction.actionPerformed(DatabaseUI.java:52) 
    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:52) 
    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) 

请帮帮我。由于

+0

和,我分开下载德比 –

回答

8

连接URL“jdbc:derby:contact”指定应该在进程的当前工作目录中找到'contact'数据库,但这可能不是它实际所在的位置。当你的Java程序运行时,当前的工作目录可能被设置在别的地方。您可以通过在程序开始时打印出当前的工作目录来确认这一点。

为了解决这个问题,您可以指定数据库的完整路径:“jdbc:derby:/ path/to/my/db/contact”。

如果让你越远,那么你就可以继续下去,但在某些时候你必须更多地考虑,你希望你的数据库永久定位和如何你想指定的程序。

+0

非常感谢您的答复。但是,我怎么能找到位置? –

+0

OK,我做到了。现在异常“无法启动数据库“ –

+0

然而,你的回答解决了我目前的问题。谢谢:)我正在为下一个问题创建一个新的线程:) –

0

请看看你的德比/ JDBC连接, 此行这里:

con = DriverManager.getConnection("jdbc:derby:contact","yohan","xyz"); 

检查,如果它看起来类似于:

"jdbc:derby://localhost:1527/contact" 

或者,正如我所看到的,你的数据库的名称是ContactDB ...请检查...

谢谢...

+0

是的,我也试过contactDB。一点好处都没有:(。无论如何,我将需要嵌入式驱动程序,该驱动程序不是嵌入使用是不是? –

+0

这应该只是罚款我肯定......但我想有什么毛病在连接字符串... 你有没有考虑,使用Apache和MySQL? – arjayosma

相关问题