以前没用PreparedStatement同时执行sql多条语句,偶然尝试,竟然成功.贴之. public YearWeek findYearWeek(String datetime){ String sql =null; if(StringUtils.isBlank(datetime)) sql = " declare @time smalldatetime;"+ " select @time=(select max(sys_time) from TABLE_NAME);"+ " SET DATEFIRST 1;"+ " select DATEPART(yy, @time) AS year, DATEPART(week, @time) AS week"; else sql = " SET DATEFIRST 1;" + " select DATEPART(yy, '"+datetime+"') AS year, DATEPART(week, '"+datetime+"') AS week"; final String finalsql = sql; List<YearWeek> yws = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection conn = session.connection(); PreparedStatement ps = prepareStatement(conn, finalsql); LogUtils.out(finalsql); List<YearWeek> list = new ArrayList<YearWeek>(); YearWeek yw = null; ResultSet rs = ps.executeQuery(); if(rs.next()){ yw = new YearWeek(); yw.setWeek(rs.getInt("week")); yw.setYear(rs.getString("year")); list.add(yw); } ps.close(); session.flush(); session.close(); return list; } }); if(yws!=null&&yws.size()>0) return yws.get(0); return null; } public PreparedStatement prepareStatement(Connection conn, String sql, Object... objs) { PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); for (int i = 1; i <= objs.length; i++) { ps.setObject(i, objs[i - 1]); } } catch (Exception e) { e.printStackTrace(); } return ps; }