使用Java将声明的变量插入到db表中

时间:2014-05-11 07:31:31

标签: java sql database netbeans insert

所以我在将值插入到我在netbeans中创建的表中时遇到了一些问题。我将向您展示有效的代码,并在表格中创建一个新工作人员,然后在我尝试更改时显示出现了什么问题。

这是来自名为dbConnect.java

的类的方法
public void insertTableRow() {
        try {
            Connection con = DriverManager.getConnection(host, uName, uPass);
            Statement stmt = con.createStatement();
            String SQL = "INSERT INTO Workers VALUES (10, 'John', 'Smith', 'Engineer')";
            stmt.executeUpdate(SQL);
        } catch (SQLException err) {
            System.out.println(err.getMessage());
        }
    }

在这里,我在主要课程中称呼它。

dbConnect test = new dbConnect();
test.insertTableRow();

然后我得到John Smith,所以我知道我有正确的代码。但是当我尝试将变量输入VALUES时,它们都会崩溃。即

public void insertTableRow(int id, String firstName, String lastName, String jobTitle) {
    try {
        int num = id;
        String fName = firstName;
        String lName = lastName;
        String jTitle = jobTitle;
        Connection con = DriverManager.getConnection(host, uName, uPass);
        Statement stmt = con.createStatement();
        String SQL = "INSERT INTO Workers VALUES (num, fName, lName, jTitle)";
        stmt.executeUpdate(SQL);
    } catch (SQLException err) {
        System.out.println(err.getMessage());
    }
}

结合 -

dbConnect test = new dbConnect();
test.insertTableRow(10, "John", "Smith", "Doctor");
System.out.println(test.getTableContents());

我得到的错误是: - 列' NUM'要么不在FROM列表中的任何表中,要么出现在连接规范中,并且不在连接规范的范围内,或者出现在HAVING子句中,并且不在GROUP BY列表中。如果这是一个CREATE或ALTER TABLE语句,那么' NUM'不是目标表中的列。

那么我做错了什么因为我完全不知道?

1 个答案:

答案 0 :(得分:1)

  

当我尝试将变量输入VALUES时,它们全部崩溃了

Statement stmt = con.createStatement();
String SQL = "INSERT INTO Workers VALUES (num, fName, lName, jTitle)";
stmt.executeUpdate(SQL);

发送任何变量。您有numfName和其他变量,但您在SQL语句中将它们作为纯文本发送。您需要将变量的值传递给SQL语句。

执行此操作的最佳方法是使用PreparedStatement

String SQL = "INSERT INTO Workers VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(SQL);
p.setInt(1, num);
p.setString(2, fName);
p.setString(3, lName);
p.setString(4, jTitle);
pstmt.executeUpdate();
pstmt.close();

您也可以使用简单的方法在SQL语句中连接每个变量的值,但它不安全并允许SQL Injection attacks。所以最好的办法是使用PreparedStatement

更多信息: