我在尝试删除mySQL数据库中的行时遇到了问题。
我的Java中的SQL方法是
@Override
public void removeCustomerByID(int customerID) throws StorageException {
try {
connect();
String sq1 = "DELETE FROM Customer WHERE ID ='"+customerID+"'";
int deleteRow = stmt.executeUpdate(sq1);
if(deleteRow == 1) {
System.out.println("Row was deleted");
} else {
System.out.println("Row was not deleted");
}
} catch (SQLException ex)
{
throw new StorageException("Unable to get Customer", ex);
} finally
{
disconnect();
}
}
调用它的方法
@Test
public void testDeleteCustomer() throws StorageException {
Customer custom = new Customer("Allan", "Jensen", 12345677);
assertEquals(81, Main.db.getCustomerIDByNameAndPhone(custom));
Main.db.removeCustomerByID(custom.getCustomerID());
assertEquals(-1, Main.db.getCustomerIDByNameAndPhone(custom));
}
正如你所看到的,我已经设置它返回-1(因此我断言它等于-1)当没有找到客户时,但它仍然返回81. Main.db.是我访问我的数据库类并调用它的方法。
答案 0 :(得分:1)
我不会将参数直接传递给查询,我会将stmnt更改为PreparedStatement类型而不是语句。试着像这样写
//You obviously have these defined somewhere
PreparedStatement pstmnt = null;
Connection con = null;
String sq1 = "DELETE FROM Customer WHERE ID = ?";
pstmnt = con.prepareStatement(sql);
pstmnt.setString(1, customerID);
pstmnt.executeUpdate();
con.commit()//If you have not set auto commit
答案 1 :(得分:0)
所以你的主要问题是没有从数据库中删除行。如果我错了,请纠正我。
请您检查一下,当您使用mysql驱动程序创建连接时,什么是事务状态。我的意思是你设置了connection.autoCommit(true)。请设置此项,然后检查。我认为你的删除声明没有被提交。