用jdbcTemplate.用execute方法 public void execute(final String sql) throws DataAccessException {
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL statement [" + sql + "]");
} class ExecuteStatementCallback implements StatementCallback, SqlProvider {
public Object doInStatement(Statement stmt) throws SQLException {
stmt.execute(sql);
return null;
}
public String getSql() {
return sql;
}
}
execute(new ExecuteStatementCallback());
}

解决方案 »

  1.   

    谢谢你的方法,但是我是用SSH,struts+hibernate+spring的,并且用的是MyEclipse自动生成的dao,所以通过这个dao有没有方法可以执行原生SQL呢?
    假如用2楼说的方法,那么就要为我的JDBC操作单独声明JDBCTemplate类,这样使用就很麻烦,我只是想在HQL不好用的情况下使用SQL代替而已。
      

  2.   

    用..HibernateTemplate
    示例代码: protected List<Object[]> getListBySQL(final String sql,
    final Object[] params, final Integer firstResult,
    final Integer maxResult) {
    return (List<Object[]>) getHibernateTemplate().execute(
    new HibernateCallback() {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Query q = session.createSQLQuery(sql);
    if (firstResult != null) {
    q.setFirstResult(firstResult);
    }
    if (maxResult != null) {
    q.setMaxResults(maxResult);
    }
    if (params != null) {
    for (int i = 0; i < params.length; i++) {
    q.setParameter(i, params[i]);
    }
    }
    return q.list();
    } });
    }
      

  3.   

    3楼的方法我试过,但有错误:
    严重: Servlet.service() for servlet action threw exception
    org.hibernate.QueryException: addEntity() or addScalar() must be called on a sql query before executing the query. [SELECT t.country,t.city,t.ticketnum FROM vote.ticket t order by t.ticketnum desc]我的代码是:
    tdao是myeclipse自动生成的。
    SQL语句是:"SELECT t.country,t.city,t.ticketnum FROM vote.ticket t order by t.ticketnum desc";
    MySQL数据库:数据库是vote  表是ticket。
    这个简单的SQL用hql语句就可以,但换成sql就有这个错误List listCountry = (List) tdao.getHibernateTemplate().execute(
    new HibernateCallback() {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    String urlCountry = "SELECT t.country,t.city,t.ticketnum FROM vote.ticket t order by t.ticketnum desc";
    Query q = session.createSQLQuery(urlCountry);
    q.setMaxResults(10).setFirstResult(0);
    List l = q.list();
    return l;
    }
    });
      

  4.   

    由一个方法,直接通过session,获得Connection,不过session.connection(),不过这是一个过时的方法,而且性能很差!如果你选
    选择它,可以实现功能!
      

  5.   

     原生态sql:SqlQuery sq=this.getSession().createSqlQuery(sql);
    sq.addEntity(类.class);