繁体   English   中英

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

[英]Insert declared variables into db Table using Java

因此,在将值插入到在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();

然后我得到一个约翰·史密斯出现,所以我知道我有正确的代码。 但是,当我尝试将变量输入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); 

没有发送任何变量。 您有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注入攻击 因此,最好的选择是使用PreparedStatement

更多信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM