DB2和Java。通过GUI向数据库添加数据。

DB2和Java。通过GUI向数据库添加数据。,java,database,user-interface,db2,Java,Database,User Interface,Db2,首先,我在程序中创建了一个搜索函数,在向数据库中添加数据时实现了相同的逻辑,但搜索函数工作,而添加函数没有(SQLException)。我从DB2创建了一个名为Names的表,其中只有一列FullName。是否仍需要创建新查询以将数据添加到表中?还是不?我想通过GUI将数据添加到数据库中 以下是我的Java代码: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; public

首先,我在程序中创建了一个搜索函数,在向数据库中添加数据时实现了相同的逻辑,但搜索函数工作,而添加函数没有(SQLException)。我从DB2创建了一个名为Names的表,其中只有一列FullName。是否仍需要创建新查询以将数据添加到表中?还是不?我想通过GUI将数据添加到数据库中

以下是我的Java代码:

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

public class ConnectAndSearchDB extends JFrame implements ActionListener
{
    private JTextField fieldSearch,fieldAdd;
    private JButton searchB,addB;
    private Connection connection;
    private String name;
    private ResultSet rs,rs1;

    public ConnectAndSearchDB() throws SQLException,ClassNotFoundException
    {
        setLocationRelativeTo(null);
        setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        setLayout(new GridLayout(2,2));

        fieldSearch = new JTextField(20);
        searchB = new JButton("Search");
        fieldAdd = new JTextField(20);
        addB = new JButton("Add");

        add(searchB);
        add(fieldSearch);
        add(addB);
        add(fieldAdd);

        searchB.addActionListener(this);
        addB.addActionListener(this);

        establishConnection();

        pack();

        setResizable(false);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object act = e.getSource();

        if(act.equals(searchB))
        {
            name = fieldSearch.getText();
            searchData();
        }else if(act.equals(addB))
        {
            try {
                addData();
            } catch (ClassNotFoundException e1)
            {
                e1.printStackTrace();
                System.out.println("ClassNotFound");
            } catch (SQLException e1)
            {   
                e1.printStackTrace();
                System.out.println("SQLError");
            }
        }   
    }

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


    private void searchData()
    {
        try
        {
            PreparedStatement s = null;
            String query;
            query = "SELECT * from NAMES";

            s=connection.prepareStatement(query);
            rs = s.executeQuery();

            boolean matchfound = false;

            while(rs.next())
            {
                if(rs.getString(1).equals(name))
                {
                    matchfound = true;
                    System.out.println("The name "+name+" is found in the Database");
                    break;
                }
            }

            if(matchfound == false)
            {
                System.out.println("Match Not Found");
            }   
        }
        catch(SQLException e)
        {
            e.printStackTrace();

        }
    }

    public void addData() throws ClassNotFoundException,SQLException
    {
        PreparedStatement ps = null;
        String query;
        query = "INSERT INTO NAMES VALUES('"+fieldAdd.getText()+"')";

        ps = connection.prepareStatement(query);
        rs1 = ps.executeQuery();

        System.out.println("Written Successfully");
    }

    public static void main (String args[]) throws SQLException,ClassNotFoundException
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run()
            {
                try 
                {
                    new ConnectAndSearchDB();

                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}
以下是名称表:

这本身不是一个答案,而是一系列关于总体方法某些问题的扩展评论

第1课-资源管理 如果你打开它,你应该关闭它

String query = "SELECT * from NAMES";
try (PreparedStatement stmt = connection.prepareStatement(query)) {
    try (ResultSet rs = s.executeQuery()) {
        boolean matchfound = false;

        while(rs.next())
        {
            if(rs.getString(1).equals(name))
            {
                matchfound = true;
                System.out.println("The name "+name+" is found in the Database");
                break;
            }
        }

    if(matchfound == false)
    {
        System.out.println("Match Not Found");
    }   
}
catch(SQLException e)
{
    e.printStackTrace();
}
有关更多详细信息,请参阅

我也会重新考虑使用一个
连接
,而
连接
池对于这个问题来说可能有点过分,您可以根据需要打开和关闭
连接
,但请记住,这样做会产生开销

第2课-不要做数据库可以做得更好的事情 第3课-利用你的
预先声明
。。。 而不是

query = "INSERT INTO NAMES VALUES('"+fieldAdd.getText()+"')";
使用

query = "INSERT INTO NAMES VALUES(?)";
//...
ps.setString(1, fieldAdd.getText());
请参见

不是答案本身,而是一系列关于总体方法某些问题的扩展评论

第1课-资源管理 如果你打开它,你应该关闭它

String query = "SELECT * from NAMES";
try (PreparedStatement stmt = connection.prepareStatement(query)) {
    try (ResultSet rs = s.executeQuery()) {
        boolean matchfound = false;

        while(rs.next())
        {
            if(rs.getString(1).equals(name))
            {
                matchfound = true;
                System.out.println("The name "+name+" is found in the Database");
                break;
            }
        }

    if(matchfound == false)
    {
        System.out.println("Match Not Found");
    }   
}
catch(SQLException e)
{
    e.printStackTrace();
}
有关更多详细信息,请参阅

我也会重新考虑使用一个
连接
,而
连接
池对于这个问题来说可能有点过分,您可以根据需要打开和关闭
连接
,但请记住,这样做会产生开销

第2课-不要做数据库可以做得更好的事情 第3课-利用你的
预先声明
。。。 而不是

query = "INSERT INTO NAMES VALUES('"+fieldAdd.getText()+"')";
使用

query = "INSERT INTO NAMES VALUES(?)";
//...
ps.setString(1, fieldAdd.getText());

参见我高度怀疑使用
rs1=ps.executeQuery()
要插入/更新数据库,您应该使用
int count=ps.executeUpdate()


有关更多详细信息,请参阅

我高度怀疑使用
rs1=ps.executeQuery()
要插入/更新数据库,您应该使用
int count=ps.executeUpdate()

有关更多详细信息,请参见“添加函数没有(SQLException)。”-恭喜,这是一个
异常!。不严重,您应该发布完整的异常和相关的堆栈跟踪“而添加函数没有(SQLException)。”-祝贺您,这是一个
异常
!。不严重,您应该发布完整的异常和相关的堆栈跟踪