我正在尝试从数据库中减去输入到文本字段中的数字,但不知道该怎么做
I am trying to subtract the number entered into the textfield from the database but not sure how to do it
我有一个库存系统,您可以在其中向系统添加项目、增加不同项目的数量、减少系统中不同项目的数量以及从系统中完全删除项目。
我想做的是,当用户在第一个文本框中输入项目名称并在第二个文本框中输入数字时,当他们按下删除时,他们在第二个文本框中输入的数字将从 numberinstock 中删除数据库中的变量。
这是我的删除按钮代码:
private void RemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {
String url = "jdbc:derby://localhost:1527/Customers";
String username = "username";
String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
if (conn != null) {
System.out.println("Connected");
String sql = "UPDATE STOCK\n"
+ "SET NUMBERINSTOCK = NUMBERINSTOCK -"+RemoveTextField1.getText()+" \n"
+ "WHERE UPPER(name)=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, RemoveTextField1.getText());
statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());
int rowsUpdated = statement.executeUpdate();
if (rowsUpdated > 0)
{
JOptionPane.showMessageDialog(null,"That item has been updated successfully");
}
else
{
JOptionPane.showMessageDialog(null,"That item is either not in the database or you have entered the wrong information");
}
}
}catch (SQLException ex)
{
JOptionPane.showMessageDialog(null,ex.getMessage());
}
ResultSet rs = null;
PreparedStatement ps = null;
try{
Connection conn = DriverManager.getConnection(url, username, password);
ps = conn.prepareStatement("select * from Stock");
rs = ps.executeQuery();
SearchTable.setModel(DbUtils.resultSetToTableModel(rs));
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
这段代码的作用是连接到数据库,然后有一个更新语句,一旦按下删除按钮就会更新数据库,我有这样当用户输入项目名称时它会删除一个来自该数据库中的那个项目,但我后来意识到有人可能想要一次删除多个项目。
这就是我卡住的地方,我不确定如何让用户在第二个文本框中输入的数字在按下删除按钮后从数据库中删除
你的代码有很多很多问题。
首先,您将如何编写 PreparedStatement:
String sql = "UPDATE STOCK\n"
+ "SET NUMBERINSTOCK = NUMBERINSTOCK - ? \n"
+ "WHERE UPPER(name) = ?";
PreparedStatement statement = conn.prepareStatement(sql);
int count = Integer.valueOf(RemoveTextField1.getText());
statement.setInt(1, count);
statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());
我没有对 RemoveTextField1 进行任何错误检查,我假设它包含项目计数。您需要检查字段中是否输入了整数。
其次,Java中的变量名以小写字母开头。方法名称以小写字母开头。 Class 名称以大写字母开头。 JTextField 名称应为 removeItemCountTextField。这是一个更具描述性的名称,可以更轻松地阅读代码和调试。
第三,将你的代码和你的关注点分开。你应该有只处理 GUI 的 GUI 代码,包含来自数据库和 GUI 的信息的模型代码,以及除了将数据从模型传输到数据库以及从数据库传输到模型之外什么都不做的数据库代码。您在代码中有多少不同的地方连接和断开数据库?答案应该是一个.
我有一个库存系统,您可以在其中向系统添加项目、增加不同项目的数量、减少系统中不同项目的数量以及从系统中完全删除项目。
我想做的是,当用户在第一个文本框中输入项目名称并在第二个文本框中输入数字时,当他们按下删除时,他们在第二个文本框中输入的数字将从 numberinstock 中删除数据库中的变量。
这是我的删除按钮代码:
private void RemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {
String url = "jdbc:derby://localhost:1527/Customers";
String username = "username";
String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
if (conn != null) {
System.out.println("Connected");
String sql = "UPDATE STOCK\n"
+ "SET NUMBERINSTOCK = NUMBERINSTOCK -"+RemoveTextField1.getText()+" \n"
+ "WHERE UPPER(name)=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, RemoveTextField1.getText());
statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());
int rowsUpdated = statement.executeUpdate();
if (rowsUpdated > 0)
{
JOptionPane.showMessageDialog(null,"That item has been updated successfully");
}
else
{
JOptionPane.showMessageDialog(null,"That item is either not in the database or you have entered the wrong information");
}
}
}catch (SQLException ex)
{
JOptionPane.showMessageDialog(null,ex.getMessage());
}
ResultSet rs = null;
PreparedStatement ps = null;
try{
Connection conn = DriverManager.getConnection(url, username, password);
ps = conn.prepareStatement("select * from Stock");
rs = ps.executeQuery();
SearchTable.setModel(DbUtils.resultSetToTableModel(rs));
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
这段代码的作用是连接到数据库,然后有一个更新语句,一旦按下删除按钮就会更新数据库,我有这样当用户输入项目名称时它会删除一个来自该数据库中的那个项目,但我后来意识到有人可能想要一次删除多个项目。 这就是我卡住的地方,我不确定如何让用户在第二个文本框中输入的数字在按下删除按钮后从数据库中删除
你的代码有很多很多问题。
首先,您将如何编写 PreparedStatement:
String sql = "UPDATE STOCK\n"
+ "SET NUMBERINSTOCK = NUMBERINSTOCK - ? \n"
+ "WHERE UPPER(name) = ?";
PreparedStatement statement = conn.prepareStatement(sql);
int count = Integer.valueOf(RemoveTextField1.getText());
statement.setInt(1, count);
statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());
我没有对 RemoveTextField1 进行任何错误检查,我假设它包含项目计数。您需要检查字段中是否输入了整数。
其次,Java中的变量名以小写字母开头。方法名称以小写字母开头。 Class 名称以大写字母开头。 JTextField 名称应为 removeItemCountTextField。这是一个更具描述性的名称,可以更轻松地阅读代码和调试。
第三,将你的代码和你的关注点分开。你应该有只处理 GUI 的 GUI 代码,包含来自数据库和 GUI 的信息的模型代码,以及除了将数据从模型传输到数据库以及从数据库传输到模型之外什么都不做的数据库代码。您在代码中有多少不同的地方连接和断开数据库?答案应该是一个.