有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql通过Java的GUI将数据添加到数据库表中。

我在IBM DB2中创建了一个名为“name”的简单表,其中有一列“FullName”,数据类型为VARCHAR(20)。我还创建了一个带有JTextfield和JButton的GUI,通过GUI将数据添加到表中。单击按钮时,文本字段中的文本将插入到表名中。但是当我点击按钮时,出现了一个错误。 下面是java代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class FirstClass extends JFrame implements ActionListener
{
    private Connection connection;
    private JTextField fieldTF;
    private JButton addB;

    public FirstClass()  throws SQLException , ClassNotFoundException
    {
        setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        fieldTF = new JTextField(20);
        addB = new JButton("Add");

        Container cont = this.getContentPane();
        cont.setLayout(new FlowLayout());
        cont.add(fieldTF);
        cont.add(addB);

        setConnection();

        addB.addActionListener(this);

        pack();
        validate();
        setVisible(true);
    }

    public void setConnection() throws SQLException , ClassNotFoundException
    {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
        connection = DriverManager.getConnection("jdbc:db2://localhost:50000/COLINN","Colinn","ezioauditore");
        System.out.print("Connected Succesfully");
    }

    public void write(String name)  throws SQLException , ClassNotFoundException
    {
        PreparedStatement statement = null;
        String query = null;
        query = "INSERT INTO NAMES VALUES (?)";

        statement.setString(1,name);
        statement.executeUpdate();

    }

    public void actionPerformed(ActionEvent e) 
    {
            try
            {
                write(fieldTF.getText());           
            }catch(Exception ex)
            {
                ex.printStackTrace();
            }   
    }

    public static void main(String args[])  throws SQLException , ClassNotFoundException
    {
        new FirstClass();
    }

}

以下是错误:

java.lang.NullPointerException
    at FirstYearProject.FirstClass.write(FirstClass.java:49)
    at FirstYearProject.FirstClass.actionPerformed(FirstClass.java:58)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

我已经从DB2导入了外部JAR以建立与Java的连接。我认为查询有问题,或者执行时有问题


共 (1) 个答案

  1. # 1 楼答案

    这里有一个问题:

        PreparedStatement statement = null; // **** set to null here
        String query = null;
        query = "INSERT INTO NAMES VALUES (?)";
    
        statement.setString(1,name); // **** use it here!
    

    在使用前statement在哪里变为非空

    您需要输入头等舱的第49行和第58行。根据异常stacktrace消息FirstClass.java:49的java类

    此外,您还需要学习如何调试NPE(NullPointerException)的一般概念。您应该仔细阅读异常的stacktrace,找到出现故障的代码行,即抛出异常的代码行,然后仔细检查该行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地碰到这些

    因此,这里:

    java.lang.NullPointerException
        at FirstYearProject.FirstClass.write(FirstClass.java:49)
        at FirstYearProject.FirstClass.actionPerformed(FirstClass.java:58)
    

    stacktrace告诉您要仔细检查第49行和第58行


    注意,在尝试使用PreparedStatement对象之前,需要先创建它。首先创建一个连接,然后使用该连接通过连接的preparedStatement(...)方法创建PreparedStatement。这在Java JDBC Tutorials中都有很好的描述。特别注意PreparedStatement subsection