我正在使用Hibernate访问我的数据库。我想根据标准删除一组字段。我的数据库是PostgreSQL,我的Java代码是:
public void deleteAttr(String parameter){
Configuration cfg = new Configuration();
cfg.configure(resource.getString("hibernate_config_file"));
SessionFactory sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
tx.begin();
String sql = "delete from attribute where timestamp > to_date('"+parameter+"','YYYY-MM-DD')"
session.createSQLQuery(sql);
tx.commit();
}
该方法运行,但不会从数据库中删除数据。我还检查了PgAdmin中的sql语句,但是它有效,但不是代码。为什么?有人帮助我吗?
提前致谢!
答案 0 :(得分:2)
这是因为你正在创建一个查询,但是你没有执行它:
String sql = "delete from attribute where timestamp > to_date('"+parameter+"','YYYY-MM-DD')"
Query query = session.createSQLQuery(sql);
query.executeUpdate();
你应该使用绑定的命名参数而不是字符串连接来传递查询中的参数:它通常更有效,它更强大,但最重要的是,它不会打开SQL注入攻击的大门。