mySQL删除行

时间:2013-12-06 13:35:11

标签: java mysql sql

我在尝试删除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.是我访问我的数据库类并调用它的方法。

2 个答案:

答案 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)。请设置此项,然后检查。我认为你的删除声明没有被提交。