Apache Derby - java.sql。SQLException:未能启动数据库。

时间:2020-12-24 22:51:26

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.

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

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

http://netbeans.org/kb/docs/ide/java-db.html开始

The attached image will show my database status in netbeans Apache Derby - java.sql。SQLException:未能启动数据库。

附件中的图像将显示我在netbeans中的数据库状态。

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

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

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

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

Why is this? Please help!

这是为什么呢?请帮助!

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

除了第一个主要问题,我还想问另外两个问题。

  1. 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?
  2. 我必须将数据库的显式位置作为连接。但是,当我把这个交给客户时,我该怎么做呢?
  3. I have to start the database connection manually using netbeans. Is there anyway to start the database connection automatically? Using code?
  4. 我必须使用netbeans手动启动数据库连接。是否可以自动启动数据库连接?使用代码?

Please help me. Thanks

请帮助我。谢谢

2 个解决方案

#1


6  

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.

    从您的映像可以看到您的数据库= contactDB没有联系。"jdbc: C:/用户/yohan/.netbeans-derby/contact"是错误的jdbc:derby:C:/Users/yohan/.netbeans-derby/contactDB"现在只有DB是正确的。错误:另一个实例的Derby数据库可能已经启动C:\Users\ yohan.netbeans-derby \接触。

  • 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"

    对于Con.String,最好不要使用路径将会工作“jdbc:derby://localhost:1527/C:/用户/yohan/.netbeans-derby/contactDB”、“yohan”、“xyz”更好的是“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.

最好指定表的完整路径。否则,它只在Netbeans中工作,并且有一个已经打开的表和一个默认的模式。

  • prepareStatement
    only inside Netbeans con.prepareStatement("insert into FRIENDS values(?,?,?)");
    better is con.prepareStatement("insert into APP.FRIENDS values(?,?,?)");
  • 只在Netbeans内部进行准备(“插入到朋友的值(?,? ?)”);最好是con.prepareStatement(“插入到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().
  • 首先使用setInt()设置id。
  • Second Now you set the id with a string setString() ( firstName !!!!!)
  • 现在,您可以使用字符串setString()来设置id () (firstName !!!!!)
  • Third at the end you override firstName with lastName and the lastName in the ps. is empty.
  • 第三,在最后你用lastName覆盖firstName,而在ps中的lastName是空的。

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 !!

当出现错误时,最好不要进一步运行程序。错误列表将会增长。很难读。在您的情况下,第一个错误是在createConnection中运行!!

  • Error createConnection
  • 错误createConnection
  • Error con.prepareStatement("...
  • 错误con.prepareStatement(“…
  • Error ps.executeUpdate()
  • 错误ps.executeUpdate()
  • Error closeConnection()
  • 错误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.

我希望这对你有帮助。

#2


5  

your datasae is already connected disconnect right click -> disconnect now try it ,

你的数据已经连接断开右击->断开现在试试,

it will work sure.

它将确定工作。

#1


6  

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.

    从您的映像可以看到您的数据库= contactDB没有联系。"jdbc: C:/用户/yohan/.netbeans-derby/contact"是错误的jdbc:derby:C:/Users/yohan/.netbeans-derby/contactDB"现在只有DB是正确的。错误:另一个实例的Derby数据库可能已经启动C:\Users\ yohan.netbeans-derby \接触。

  • 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"

    对于Con.String,最好不要使用路径将会工作“jdbc:derby://localhost:1527/C:/用户/yohan/.netbeans-derby/contactDB”、“yohan”、“xyz”更好的是“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.

最好指定表的完整路径。否则,它只在Netbeans中工作,并且有一个已经打开的表和一个默认的模式。

  • prepareStatement
    only inside Netbeans con.prepareStatement("insert into FRIENDS values(?,?,?)");
    better is con.prepareStatement("insert into APP.FRIENDS values(?,?,?)");
  • 只在Netbeans内部进行准备(“插入到朋友的值(?,? ?)”);最好是con.prepareStatement(“插入到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().
  • 首先使用setInt()设置id。
  • Second Now you set the id with a string setString() ( firstName !!!!!)
  • 现在,您可以使用字符串setString()来设置id () (firstName !!!!!)
  • Third at the end you override firstName with lastName and the lastName in the ps. is empty.
  • 第三,在最后你用lastName覆盖firstName,而在ps中的lastName是空的。

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 !!

当出现错误时,最好不要进一步运行程序。错误列表将会增长。很难读。在您的情况下,第一个错误是在createConnection中运行!!

  • Error createConnection
  • 错误createConnection
  • Error con.prepareStatement("...
  • 错误con.prepareStatement(“…
  • Error ps.executeUpdate()
  • 错误ps.executeUpdate()
  • Error closeConnection()
  • 错误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.

我希望这对你有帮助。

#2


5  

your datasae is already connected disconnect right click -> disconnect now try it ,

你的数据已经连接断开右击->断开现在试试,

it will work sure.

它将确定工作。