我想从mysql表中删除当前日期的数据。
这是我编写的代码,并在“ERROR”行显示异常:
从应用了where条件的表中删除数据的步骤是什么?
Date date=new Date();
SimpleDateFormat myFormat=new SimpleDateFormat("dd-MM-yyyy");
String todayDate=myFormat.format(date);
String query="delete * from today_list where today_date="+"'"+todayDate+"'";
Transaction t1=session.beginTransaction();
session.createQuery(query).executeUpate();//ERROR
t1.commit();
答案 0 :(得分:4)
不要将实际参数值连接到查询字符串中。请改用setParameter
。
Query query = session.createQuery("delete from todayList where todayDate = :date ");
query.setParameter("date", date);
query.executeUpate();
这很容易理解,但下次也请发布错误消息。
编辑还请注意查询字符串中的表名。它不是数据库中的实际表名,而是Hibernate实体名。
答案 1 :(得分:3)
根据SQL语法,您不应在*
后写delete
,即将语句更改为
delete from ...
虽然在处理包括Hibernate在内的任何ORM时都不是正确的方法。这种方式绕过缓存(如果你有缓存)。更好的方法是使用会话API方法删除实体。
答案 2 :(得分:0)
它们是两件可以抛出异常的东西:
1 - 您应该在没有“*”的情况下写“删除”
2 - 尝试找出你需要的数据格式,如果你输错了格式,也可以抛出。
答案 3 :(得分:0)
首先,您的代码中存在拼写错误。它必须成为session.createQuery(query).executeUpdate();
而不是;
session.createQuery(query)..executeUpate();
使用此会话事务,您可以删除数据库中的数据:
Configuration cfg = new Configuration();
cfg.configure("Hibernate.cfg.xml");
SessionFactory ss = cfg.buildSessionFactory();
Session s = ss.openSession();
Transaction tx = s.beginTransaction();
Query query = s.createQuery("delete from Employee where Id:Id");
query.setParameter("Id", valueToDelete);
query.executeUpdate();
tx.commit();
s.close();
这对我来说非常有用!! :)