【问题标题】:I do not know why these Prepared Statements code generate Errors我不知道为什么这些 Prepared Statements 代码会生成错误
【发布时间】:2016-08-05 12:50:49
【问题描述】:

NetBeans 是我的 Java 编程编辑器。我编写了以下 JDBC Prepared Statements 代码。代码编译得很好,但是当我运行它时它会产生错误。我检查了我所有的 Java 书籍;没有使用 NetBeans 编写使用 JDBC 准备语句的应用程序的示例,我需要帮助。

代码如下:

private void editButtonActionPerformed(java.awt.event.ActionEvent evt)
{                                               
    String sql = "Update Products SET"
            + "Description = ?, "
            + "Price = ? "
            + "Where Code = ?";
    try
    {
        pstmt.setString(1, "CODE");
        pstmt.setString(2, "DESCRIPTION");
        pstmt.setDouble(3, Double.parseDouble("PRICE"));

        int rowUpdated = pstmt.executeUpdate();
        if (rowUpdated > 0)
        {
            JOptionPane.showMessageDialog(null,
                    "record updated successfully");
        }
        // Clean-up environment
        rs.close();
        pstmt.close();
        con.close();
    } catch (SQLException e)
    {
        JOptionPane.showMessageDialog(Product.this, e.getMessage());
    }
}                                          

private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt)                                             
{                                                 

}                                            

private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)                                             
{                                                 

}                                            

private void acceptButtonActionPerformed(java.awt.event.ActionEvent evt)                                             
{                                                 
    try
    {
        String sql = "Insert into PRODUCTS(CODE, DESCRIPTION, PRICE)"
                + "Values(?, ?, ?)";
        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, codeTextField.getText());
        pstmt.setString(2, descriptionTextField.getText());
        pstmt.setDouble(3, Double.parseDouble("Price"));

        int rowInserted = pstmt.executeUpdate();

        if (rowInserted > 0)
        {
            JOptionPane.showMessageDialog(
                    null, "A new user was inserted successfully!");
        }

        // Clean-up environment
        rs.close();
        pstmt.close();
        con.close();
    } catch (SQLException e)
    {
        JOptionPane.showMessageDialog(Product.this, e.getMessage());
    }

}                                            

【问题讨论】:

  • 欢迎来到 Stack Overflow!你说这个程序在运行时“产生了错误” - pelase edit你的帖子更具体。您应该准确引用实际的错误消息(最好使用复制+粘贴来避免转录错误)。

标签: java jdbc


【解决方案1】:

在“SET”后面加一个空格

String sql = "Update Products SET "
            + "Description = ?, "
            + "Price = ? "
            + "Where Code = ?";

最后是“值”之前的空格

String sql = "Insert into PRODUCTS(CODE, DESCRIPTION, PRICE)"
            + " Values(?, ?, ?)";

【讨论】:

    【解决方案2】:

    您的查询中有一些空格问题,当您设置值时,顺序应该是描述、价格和代码。像这样的:

     private void editButtonActionPerformed(java.awt.event.ActionEvent evt)
     {                                               
        String sql = "Update Products SET Description = ?, Price = ? "
           + "where Code = ?";
        try
        {
            pstmt.setString(1, "DESCRIPTION");
            pstmt.setDouble(2, Double.parseDouble("PRICE"));
            pstmt.setString(3, "CODE");
    
            int rowUpdated = pstmt.executeUpdate();
            if (rowUpdated == 1)
            {
                JOptionPane.showMessageDialog(null,
                        "record updated successfully");
            }
            // Clean-up environment
            rs.close();
            pstmt.close();
            con.close();
        } catch (SQLException e)
        {
            JOptionPane.showMessageDialog(Product.this, e.getMessage());
        }
    }
    

    【讨论】:

      最近更新 更多