我已经开始学习如何用Java编写语句。我已经在Stack Overflow上看到了具有值的预处理语句,但我想知道如何编写类似我的语句的内容来成为一个准备好的语句。 这是我的代码:
public void put(MySQLDatabase mysqlDB) {
if (mysqlDB != null) {
boolean bool = mysqlDB.setMySqLData("UPDATE Person SET personName = '" +
personName +
"', personDescr = '" + personDescr + "', personAge = " + personAge + "
WHERE personId = " + personId);
}
}
public void post(MySQLDatabase mysqlDB) {
if (mysqlDB != null) {
boolean bool = mysqlDB.setMySqLData("INSERT INTO person VALUES(" + personId +
", '" +
personName + "', '" + personDescr + "', " + personAge +
")");
}
}
public void delete(MySQLDatabase mysqlDB) {
if (mysqlDB != null) {
boolean bool = mysqlDB.setMySqLData("DELETE FROM person WHERE personId=" +
personId);
}
}
我不知道是否有可能这样做,我想知道我是否可以为这些查询做一个准备好的声明。
答案 0 :(得分:3)
// Creates a new connection
Connection conn = DriverManager.getConnection(connectionUrl, user, password);
// Prepares a PreparedStatement
PreparedStatement prep = conn.prepareStatement("UPDATE Person SET personName = ?" +
", personDescr = ?, personAge = ? WHERE personId = ?");
// Populate the statement with its parameters
prep.setString(1, personName);
prep.setString(2, personDescr);
prep.setInt(3, personAge);
prep.setLong(4, personId);
// Execute the updates
int numberOfRowsUpdated = prep.executeUpdate();
这要求您使用DriverManager.getConnection
,这需要您注册MySQL驱动程序。这可能比在OOP方面使用MySQL Directly更好,在OOP中你必须依赖大多数抽象(取决于接口,而不是特定的实现)
答案 1 :(得分:0)
我将在这里留下一个示例和文档,以便您可以启动,这很简单,只需使用“?”添加占位符和正确的方法来完成从1开始的索引
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html