我正在尝试传递一个 SQL 命令,其中必须从数据库中删除一行。 我正在使用 setString(index, value) 并调用主类中的方法。但是当我将参数传递给主类中的方法时,数据库中没有任何反应。有没有一个表单可以传递“jobnumber=”的值?在 main 方法中,它会从数据库中删除该行吗? Ps:jobnumber被声明为序列号,并且是数据库中的主键。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteUserDao {
Connection conDB2 = Connect.connectDB();
public void deleteDb(String y) {
String sqlDelete = ("DELETE FROM bookings WHERE jobnumber=?");
try {
PreparedStatement deleter = conDB2.prepareStatement(sqlDelete);
deleter.setString(1, y);
System.out.println("Item deleted from Bookings.");
} catch (SQLException e) {
System.out.println("Coud not delete item. " + e.getMessage());
e.printStackTrace();
}
}
}
import ***.jdbc.DeleteUserDao;
public class DeleteTest {
public static void main(String[] args) {
DeleteUserDao del = new DeleteUserDao();
del.deleteDb("4");
}
}
最佳答案
如果我理解你的问题,那么你就错过了 executeUpdate()
对于声明
,
PreparedStatement deleter = conDB2.prepareStatement(sqlDelete);
deleter.setString(1, y);
deleter.executeUpdate(); // <-- like so
来自链接的 Javadoc,
Executes the SQL statement in this PreparedStatement object, which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.
编辑
如下面的评论所述,您可能应该使用 int
类型,并且需要关闭 PreparedStatement
-
public void deleteDb(int y) {
String sqlDelete = ("DELETE FROM bookings WHERE jobnumber=?");
PreparedStatement deleter = null;
try {
deleter = conDB2.prepareStatement(sqlDelete);
deleter.setInt(1, y);
System.out.println("Item deleted from Bookings.");
} catch (SQLException e) {
System.out.println("Coud not delete item. " + e.getMessage());
e.printStackTrace();
} finally {
if (deleter != null) {
try {
deleter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
然后调用它,传递一个 int
-
del.deleteDb(4);
关于java - 如何从Java传递sql命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245773/