declare @sql varchar(8000) set @sql = 'select convert(char(7),cor_creat_date,120) as 日期' select @sql = @sql + ',sum(case user_se_name when '''+user_se_name+'''then 1 else 0 end) ['+user_se_name+']'from (select distinct user_se_name from cus_cor_cus join lim_user on cor_user_code=user_code) as a select @sql = @sql+' from cus_cor_cus join lim_user on cor_user_code=user_code group by convert(char(7),cor_creat_date,120)' exec(@sql)
运行结果
日期 张三 李四
2009-02 10 12
2010-01 2 5
我想用这个结果集上面的sql怎么改成存储过程?在SSH框架中怎么调用?
运行结果
日期 张三 李四
2009-02 10 12
2010-01 2 5
我想用这个结果集上面的sql怎么改成存储过程?在SSH框架中怎么调用?
<hibernate-mapping>
<class catalog="数据库名" name="com.Entity">
<id name="id" type="java.lang.String">
<column length="18" name="str1"/>
<generator class="assigned"/>
</id>
<property name="name" type="java.lang.String">
<column length="300" name="str2"/>
</property>
</class>
<sql-query callable="true" name="这个名字和上面调用的要一样.">
<return alias="entity" class="com.Entity">这个实体,就是一个Javabean里有下面的属性.str1和上一段要对应,上面几个属性,这几就有几个.而com.Eitity里就有几个.
<return-property column="str1" name="str1"/>....................
</return>
{call 数据库过程名(?)}
</sql-query>
调用 List rs=session.getNamedQuery('myProcdure').setString().list();
返回的是一个 com.Entity对象.然后就知道怎么取了吧.....
这样我觉得不太方便,属性是固定的.Java不是有调用过程的?那就直接调用啊.
Connection conn=HibernateSessionFactory.getSession().connection();这个获得数据库连接,接下来就和JDBC里的Connection一样了.
CallableStatement p_proc = null;try { Connection p_conn = XXX.getConnection();
String p_spString = "{ call text() } ";
p_proc = p_conn.prepareCall(p_spString); p_proc.execute();
} catch (SQLException sqle) {} finally {
p_proc.close();
}
这是JDBC调用存储过程的方法。
ResultSet rs = p_proc.getResultSet();
上面的好弄成存储过程吧?