[英]Dynamically Insert Variables into DB Table using PreparedStatement
[英]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);
您没有发送任何变量。 您有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
。
更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.