JAVA中使用JDBC调用MS SQL存储过程

背景:

SQL SERVER2005 JAVA JDK1.4

WEBLOGIC测试环境

当进行一些复杂点的查询时,不愿意使用在java代码中拼复杂的语句,看起来很繁琐。用存储过程是一个不错的解决途径,可以使得代码简洁很多。

SQL PROCEDURE:

JAVA Code

/**

* 进行查询

* @return List

*/

public List getVoteStat(String siteId) {

Session session = null;

List lstResult = new ArrayList();

try {

session = this.getSession();

Connection conn = session.connection();

String sql = "{ call SP_MESSAGE_VOTE_STAT(?) }";

PreparedStatement psmt = conn.prepareCall(sql);

psmt.setString(1, siteId);

//执行视图V_Message_stat

ResultSet rs = psmt.executeQuery();

while (rs.next()) {

Properties prop = new Properties();

//设置变量 带回到前台

prop.setProperty("MESSAGE_CATEGORY", rs.getString("MESSAGE_CATEGORY"));

prop.setProperty("CATEGORY_ID", rs.getString("CATEGORY_ID"));

prop.setProperty("VOTE_NO", rs.getString("vote_no"));

prop.setProperty("VOTE_YES", rs.getString("vote_yes"));

prop.setProperty("SATIFY_ZERO_PERCENT", rs.getString("satify_zero_percent"));

prop.setProperty("SATIFY_ONE_PERCENT", rs.getString("satify_one_percent"));

prop.setProperty("SATIFY_TWO_PERCENT", rs.getString("satify_two_percent"));

prop.setProperty("SATIFY_ZERO", rs.getString("satify_zero"));

prop.setProperty("SATIFY_ONE", rs.getString("satify_one"));

prop.setProperty("SATIFY_TWO", rs.getString("satify_two"));

// System.out.println(rs.getString(0));

lstResult.add(prop);

}

} catch (Exception ex) {

ex.printStackTrace();

} finally {

try {

session.close();

} catch (HibernateException ex) {

ex.printStackTrace();

}

session = null;

}

return lstResult;

}

ALTER PROCEDURE [ezoffice].[SP_MESSAGE_VOTE_STAT]

(

--参数

@v_site_id varchar(30)

)

AS

declare @e_sql nvarchar(2000);

--拼凑SQL语句进行查询

set @e_sql ='SELECT (select top 1 cg.category_title from cms_messagecategory cg

where cg.category_id=TEMP.CATEGORY_ID) as MESSAGE_CATEGORY,CATEGORY_ID, SUM(vote_no) AS vote_no, SUM(vote_yes) AS vote_yes,

CASE SUM(vote_yes) WHEN 0 THEN 0 ELSE CAST(CAST(SUM(manyi) AS decimal(9, 2))/ SUM(vote_yes) AS decimal(9, 2))*100 END AS satify_zero_percent,

CASE SUM(vote_yes) WHEN 0 THEN 0 ELSE CAST(CAST(SUM(yibanmanyi) AS decimal(9, 2))/ SUM(vote_yes) AS decimal(9, 2))*100 END AS satify_one_percent,

CASE SUM(vote_yes) WHEN 0 THEN 0 ELSE CAST(CAST(SUM(bumanyi) AS decimal(9, 2))/ SUM(vote_yes) AS decimal(9, 2))*100 END AS satify_two_percent,

SUM(manyi) AS satify_zero, SUM(yibanmanyi) AS satify_one, SUM(bumanyi) AS satify_two

FROM';

set @e_sql=@e_sql+'(SELECT CASE ISNULL(msg.VOTE_STATUS, ''0'') WHEN ''0'' THEN 1 ELSE 0 END AS vote_no, CASE ISNULL(msg.VOTE_STATUS, ''0'')

WHEN ''1'' THEN 1 ELSE 0 END AS vote_yes, ISNULL(VOTE_RESULT, ''-1'') AS VOTE_RESULT, SITE_ID, CATEGORY_ID,

CASE isnull(msg.vote_result, ''-1'') WHEN ''0'' THEN 1 ELSE 0 END AS manyi,

CASE isnull(msg.vote_result, ''-1'') WHEN ''1'' THEN 1 ELSE 0 END AS yibanmanyi,

CASE isnull(msg.vote_result, ''-1'') WHEN ''2'' THEN 1 ELSE 0 END AS bumanyi

FROM ezoffice.CMS_MESSAGE AS msg

WHERE 1=1';

if @v_site_id is not null begin SET @e_sql=@e_sql+' and msg.site_id='+ @v_site_id; end

set @e_sql=@e_sql+' ) AS TEMP ';

set @e_sql=@e_sql+' GROUP BY CATEGORY_ID ';

execute (@e_sql);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值