背景:
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);
分享到:
相关推荐
在Java编程中,调用Microsoft SQL Server(MS SQL)的存储...这就是Java调用MS SQL存储过程的基本步骤。确保遵循最佳实践,如使用连接池管理数据库连接,以及在生产环境中处理异常和错误,以提高程序的稳定性和性能。
总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。
在本主题中,我们将深入探讨JDBC在与Microsoft SQL Server 2000(MS-SQL2000)配合使用时的关键知识点。 首先,MS-SQL2000是一款由微软公司开发的关系型数据库管理系统,广泛应用于企业级数据存储和管理。JDBC驱动...
- Native API (Partly Java driver):使用本地API,部分Java实现,转换JDBC调用。 - JDBC/Net (Pure Java driver):纯Java实现,通过网络协议与数据库通信。 - Native (Pure Java driver):直接使用数据库的网络...
在IT行业中,数据库是数据存储和管理的核心,而Java编程语言通过Java Database Connectivity(JDBC)接口与各种类型的数据库进行交互。本主题将详细讲解针对`MS SQL`、`MySQL`和`Oracle`数据库的JDBC驱动,以及如何...
在使用这些JDBC驱动时,你需要在Java代码中加载相应的驱动,建立数据库连接,执行SQL语句,并处理结果集。以下是一个简单的示例: ```java import java.sql.*; public class JDBCDemo { public static void main...
- 高级特性:如事务控制、存储过程调用、大数据类型支持等。 在实际开发中,确保正确配置JDBC驱动类路径,并在Java代码中加载驱动(例如,`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")`),...
此外,它还包含了一些针对SQL Server特性的函数和处理,如存储过程的调用、XML数据类型的处理、大型对象(LOB)的操作等。 msutil.jar是辅助工具类库,提供了一些实用工具和辅助功能,比如日期时间格式转换、加密...
综上所述,Microsoft SQL Server 2000 Driver for JDBC是Java开发者与SQL Server 2000进行数据交互的重要工具,通过理解和熟练使用JDBC API,可以高效地开发跨平台的数据库应用。配合提供的帮助文档,开发者可以更...
JDBC提供了一种统一的方式来处理SQL Server 2000中的数据,无论是简单的CRUD操作还是复杂的事务处理、存储过程调用。在SQL Server 2000中,可以通过JDBC执行批处理,优化性能,或者利用连接池管理数据库连接,提升...
使用这个商业JDBC驱动,开发者可以在Java应用中执行SQL查询,管理数据库事务,处理结果集,以及进行更复杂的操作,如存储过程调用。为了使用该驱动,开发者需要在Java代码中加载驱动,创建数据库连接,然后使用...
此外,这个JAR文件还可能包含用于身份验证、事务管理、存储过程调用以及SQL Server特定数据类型的实现。 最后,`msutil.jar` 提供了一些实用工具类,这些类通常用于辅助数据库操作,比如数据转换、日期时间处理、...
在JSP页面中加载JDBC驱动是非常重要的一步,这可以通过调用`Class.forName()`方法来完成。 ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ``` ##### 2. 建立连接 通过`DriverManager....
JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种标准接口。它由Sun Microsystems(现为Oracle公司的一部分)开发,自1996年以来不断成熟,为开发者提供了丰富的类和接口,使得在...
总的来说,“全套数据库驱动JDBC_driver”这个资源提供了Java开发者连接到三种主流数据库系统——MS SQL Server、MySQL和Oracle的必要工具,使开发人员能够在跨平台的环境中高效、安全地操作数据。了解和掌握这些...
在IT行业中,数据库是存储和管理数据的核心工具,而SQL(Structured Query Language)是用于与关系型数据库交互的标准语言。当使用Java进行Web开发时,例如通过JSP(JavaServer Pages)来创建动态网页,我们需要一种...
了解这些基本概念后,开发者就能利用JDBC驱动 for Access2000来创建Java应用程序,执行数据库查询,更新数据,甚至进行事务处理和存储过程调用。同时,确保正确配置ODBC数据源,以实现稳定可靠的数据库连接。
在IT行业中,数据库是信息系统的核心组成部分,而Microsoft SQL Server作为一款广泛使用的数据库管理系统,其与Java应用程序的连接方式之一就是通过MS_SOL_SERVER_JDBC驱动实现。本文将深入探讨MS_SOL_SERVER_JDBC的...
【msserver驱动】指的是微软SQL Server数据库与应用程序之间的接口,它允许应用程序通过ODBC(Open Database Connectivity)或JDBC(Java Database Connectivity)标准来连接和操作SQL Server数据库。在IT行业中,...
- **执行SQL**:创建`java.sql.Statement`或`java.sql.PreparedStatement`实例,然后调用其`executeQuery()`或`executeUpdate()`方法执行SQL查询或修改语句。 - **结果集处理**:从`Statement`或`PreparedStatement`...