DB2和Java。通过GUI向数据库添加数据。
首先,我在程序中创建了一个搜索函数,在向数据库中添加数据时实现了相同的逻辑,但搜索函数工作,而添加函数没有(SQLException)。我从DB2创建了一个名为Names的表,其中只有一列FullName。是否仍需要创建新查询以将数据添加到表中?还是不?我想通过GUI将数据添加到数据库中 以下是我的Java代码: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
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)。”-祝贺您,这是一个异常
!。不严重,您应该发布完整的异常和相关的堆栈跟踪