使用Java将声明的变量插入数据库表



所以我在netbeans中创建的表中插入值时遇到了一个小问题。我将向您展示工作的代码,并在表中创建一个新的worker,然后向您展示当我试图更改它时出现的问题。

这个方法来自于一个叫做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();

然后我看到约翰·史密斯出现了,所以我知道我有正确的代码。但是当我尝试将变量输入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'不是目标表中的列。

所以我做错了什么,因为我完全不知道?

当我尝试在VALUES中输入变量时它就崩溃了

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

你的没有发送任何变量。你有num, fName和其他变量,但你发送它们作为纯文本在你的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注入攻击。因此,最好的选择是使用PreparedStatement

更多信息:

  • Statement与PreparedStatement的区别

相关内容

  • 没有找到相关文章

最新更新