所以我在将值插入到我在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'不是目标表中的列。
那么我做错了什么因为我完全不知道?
答案 0 :(得分:1)
当我尝试将变量输入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 Injection attacks。所以最好的办法是使用PreparedStatement
。
更多信息: