- 浏览: 319375 次
- 性别:
- 来自: 青岛
文章分类
- 全部博客 (140)
- 技术笔记 (3)
- Dwr (1)
- 日常使用技巧 (11)
- eclipse使用技巧 (3)
- jxl使用技巧 (3)
- Struts2 (7)
- java 报表 (3)
- Webservices (2)
- Flex (15)
- vc,vc++ (11)
- Spring (6)
- j2me开发 (1)
- Java (27)
- Sql (11)
- Javascript (5)
- extjs (0)
- C# (8)
- jQuery (2)
- PHP (3)
- apache (4)
- sso单点登录 (1)
- linux (6)
- cisco vpn (1)
- android (1)
- MongoDB性能优化 (1)
- nosql (1)
- Java netbeans (1)
- js (1)
最新评论
-
jinyanhui2008:
hzq20100521 写道你好,我的需求这个有点不一样,我的 ...
spring 多数据库支持,动态切换数据库 -
hzq20100521:
你好,我的需求这个有点不一样,我的是系统启动的时候是连接的默认 ...
spring 多数据库支持,动态切换数据库 -
lbxhappy:
那如果tree.first()一开始就是最大的呢?是不是以后e ...
从bbs中看到的问题:从大量数据中取top100,整理的思路 -
programwyh:
jinyanhui2008 写道programwyh 写道我用 ...
使用jasperreports制作报表(导出pdf excel html) -
jinyanhui2008:
programwyh 写道我用java程序写的运用Jasper ...
使用jasperreports制作报表(导出pdf excel html)
我这个是将调用存储过程的方式进行统一封装,将调用存储过程的方法统一起来调用。
package com.wfy.system.dao; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; import com.wfy.util.JDOM; /** * * 存储过程通过此类调用 * * @author 金鑫 * */ public class DynamicDataProcedureExecuteDAO { private Map getSqlServerData(JdbcTemplate jdbcTemplate, final List<?> procedureList){ Map returnMap = (Map) jdbcTemplate.execute(new ConnectionCallback(){ public Map doInConnection(Connection conn) throws SQLException, DataAccessException { /** * 由于sqlserver跟oracle 的调用方式有所不同,所以需要分开调用,但是我对oracle存储过程不熟悉,所以没有写,以后会补上的。 * 我的通用方式是将传入数据进行封装,再将传出数据封装为map返回给用户 * * List.get(0) 中存放的是 存储过程的名称 * * 从list.get(1)开始存放的是相应参数,参数以map类型存放 * * map.put("name","")//传入传出的参数名字 * map.put("value","")//传入的参数值,传出为null * map.put("type","input/output/outtable");//传入 传出 输出的结果集 * map.put("dataType",type);//传入传出的数据类型。 * * 返回的时候将type类型为output的封装为map返回前台。 * * */ //生成存储过程调用字符串 String callStr = "{call "; callStr += procedureList.get(0).toString()+"("; for (int i = 1; i < procedureList.size(); i++) { if(!((Map)procedureList.get(i)).get("type").toString().equals("outtable")) callStr += "?,"; } if(procedureList.size()>1){ callStr = callStr.substring(0,callStr.length()-1); } callStr += ")}"; System.out.println("callStr:"+callStr); CallableStatement cstmt = conn.prepareCall(callStr); for (int j = 1; j < procedureList.size(); j++) { Map<String, String> map = (Map<String, String>)procedureList.get(j); if(map.get("type").equals("input")){ //说明此函数是传入函数 if(map.get("dataType").toUpperCase().equals("STRING")){ cstmt.setString(j, map.get("value")); }else if(map.get("dataType").toUpperCase().equals("INT")){ try { cstmt.setInt(j, Integer.parseInt(map.get("value").toString())); } catch (Exception e) { throw new SQLException(map.get("value") + " INT 数据类型转换错误"); } }else if(map.get("dataType").toUpperCase().equals("DECIMAL")){ try { cstmt.setDouble(j, Double.parseDouble(map.get("value").toString())); } catch (Exception e) { throw new SQLException(map.get("value") + " DECIMAL 数据类型转换错误"); } }else if(map.get("dataType").toUpperCase().equals("DATE")){ try{ DateFormat formatter1= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); cstmt.setDate(j, new java.sql.Date(formatter1.parse(map.get("value").toString()).getTime())); }catch(Exception e1){ try{ DateFormat formatter2= new SimpleDateFormat("yyyy-MM-dd"); cstmt.setDate(j, new java.sql.Date(formatter2.parse(map.get("value").toString()).getTime())); }catch(Exception e2){ throw new SQLException(map.get("value") + " DATE 数据类型转换错误"); } } } }else if(map.get("type").equals("output")){ //说明此函数是返回函数 if(map.get("dataType").toUpperCase().equals("STRING")){ cstmt.registerOutParameter(j, Types.CHAR); }else if(map.get("dataType").toUpperCase().equals("INT")){ cstmt.registerOutParameter(j, Types.INTEGER); }else if(map.get("dataType").toUpperCase().equals("DECIMAL")){ cstmt.registerOutParameter(j, Types.DECIMAL); }else if(map.get("dataType").toUpperCase().equals("DATE")){ cstmt.registerOutParameter(j, Types.DATE); } } } //返回的map Map<String, Object> returnMap = new HashMap<String, Object>(); cstmt.execute(); int k = 1; while(cstmt.getMoreResults()){ ResultSet rs = cstmt.getResultSet(); List ls = new ArrayList(); while(rs.next()){ Map vc = new HashMap(); for(int i=1;i<rs.getMetaData().getColumnCount()+1;i++){ vc.put(rs.getMetaData().getColumnName(i), rs.getObject(i)); } ls.add(vc); } for (; k < procedureList.size(); k++) { Map mp = (Map)procedureList.get(k); if(mp.get("type").equals("outtable")){ returnMap.put(mp.get("name").toString(), ls); k++; break; } } } for (int j = 1; j < procedureList.size(); j++) { Map<String, String> map = (Map<String, String>)procedureList.get(j); if(map.get("type").equals("output")){ //说明此函数是返回函数 if(map.get("dataType").toUpperCase().equals("STRING")){ returnMap.put(map.get("name").toString(), cstmt.getString(j)); }else if(map.get("dataType").toUpperCase().equals("INT")){ returnMap.put(map.get("name").toString(), cstmt.getInt(j)); }else if(map.get("dataType").toUpperCase().equals("DECIMAL")){ returnMap.put(map.get("name").toString(), cstmt.getDouble(j)); }else if(map.get("dataType").toUpperCase().equals("DATE")){ returnMap.put(map.get("name").toString(), cstmt.getDate(j)); } } } cstmt.close(); return returnMap; } }); return returnMap; } }
发表评论
-
常见NIO开源框架(MINA、xSocket)学习 (转自javaeye博客)
2012-11-09 15:07 7468http://unbounder.iteye.com/blog ... -
解决 PermGen space Tomcat内存设置
2011-05-10 15:30 2110在操作一段时间就会出现 java.lang.OutOfMemo ... -
proxool 多数据源动态切换,刚刚一网友问我,顺便写的一个demo
2010-09-27 17:39 2278package aa; import java.io.F ... -
(转)sql批量执行效率对比
2010-05-24 18:10 3158环境: MySQL 5.1 RedHat L ... -
转自CSDN以作备份,使用java获取文档的编码格式
2010-05-24 09:57 1234package com.util.mail; import ... -
从bbs中看到的问题:从大量数据中取top100,整理的思路
2010-04-01 14:13 1535TreeSet算法很强悍,以后一定要记得使用 p ... -
Eclipse导出JavaDoc中文乱码问题解决
2010-03-09 10:38 1040给 javadoc.exe 加上编码参数就OK。 ... -
搞懂java中的synchronized关键字
2009-12-18 14:38 994实际上,我关于java的基础知识的90%以上都来自Thinki ... -
JDialog 居中 方法二同样适合jFrame
2009-11-18 11:55 2834方法一调用JDialog的public void setLoc ... -
如果查询数据的时候报内存溢出咋办?
2009-10-30 10:45 1380前两天搞了个程序,需要一次性导出大量数据,在执行select的 ... -
关于java堆栈溢出的那些事
2009-08-31 09:47 2922java.lang.OutOfMemoryError: Jav ... -
手工将tomcat安装为服务及tomcat命令说明
2009-06-09 09:04 1768最近做了一个项目需要将tomcat和产品功能 ... -
Java 读取 INI 文件的示例
2009-05-19 18:15 1229package com.wfy.util; import ... -
java数据流压缩
2009-05-14 17:53 3603package com.wfy.util; import ... -
用java发送邮件
2009-05-13 13:33 1426<%@page contentType="te ... -
java窗口最小化到任务栏
2009-05-07 11:46 4165import java.awt.AWTException; ... -
Java 读/写文件文本文件的示例
2009-04-24 08:38 1095/* * 简单的读/写文本 ... -
java读写消息资源文件
2009-04-23 15:46 1679package com.lwf.util; import ... -
如果 点击子窗口父窗口也随之关闭 请看
2009-04-23 13:11 1907如果点击子窗口关闭按钮,父窗口也关闭了,可能是设置的问题 ... -
读取资源文件的N种方法- -
2009-04-23 09:37 1189如何读取资源文件:(一)Properties props = ...
相关推荐
### Java调用Oracle与SQL Server存储过程的通用方法 #### 1. **建立数据库连接** 在Java中,使用JDBC(Java Database Connectivity)来连接数据库。根据`dbType`参数动态选择正确的数据源,即Oracle或SQL Server的...
能不能写个动态的业务,只输入存储过程名称,自动...只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在IT行业中,数据库管理是至关重要的任务,尤其是在大型企业中,数据存储和处理通常涉及到Oracle和SQL Server这样的大型关系型数据库管理系统。本文将详细介绍如何在Oracle与SQL Server中批量执行SQL脚本,以提高...
在IT行业中,数据库是数据存储和管理的核心,而Java Database Connectivity (JDBC) 是Java编程语言与各种数据库交互的一种标准接口。本知识点主要讲解如何使用JDBC连接Oracle和SQL Server这两种常见的关系型数据库。...
本话题将深入讲解如何使用Java JDBC(Java Database Connectivity)API来连接Oracle、MySQL和SQL Server这三种常见关系型数据库。JDBC提供了一种标准的接口,使得Java开发者可以方便地与各种数据库系统进行通信。 ...
`调用存储过程(1).doc`和`调用存储过程.doc`可能侧重于如何在应用程序中调用存储过程,这可能包括了在SQL命令行、PL/SQL块中或者使用其他编程语言(如Java、C#)的数据库连接API来执行存储过程的方法。这些文档对于...
Oracle 10G允许Java代码与PL/SQL过程相互调用,实现了数据库内核级别的Java支持。通过存储过程、函数和触发器,Java类可以被编译并存储在数据库中,可以直接从SQL语句中调用。这种集成提供了更好的性能,因为数据...
从给定的文件信息来看,我们正在探讨一个Java程序中用于连接数据库并调用存储过程的通用类——`BaseDaoOutput`。这个类是IT领域中处理数据库操作时经常使用的一种设计模式,它通过封装数据库连接、执行SQL语句、处理...
标题中的“JAVA 开发通用的在线考试系统(jsp+struts+hibernate+oracle)”表明这是一个基于Java技术栈开发的、适用于各种考试场景的Web应用程序。它利用了四个核心的技术:JSP(JavaServer Pages)、Struts、...
《JAVA 开发通用的在线考试系统:jsp+struts+hibernate+oracle技术解析》 在信息技术高速发展的今天,教育领域也开始广泛应用在线考试系统,以提高教学效率和评测的公正性。本项目“JAVA 开发通用的在线考试系统...
- **存储过程**:用于封装一组SQL语句或PL/SQL代码块,可以在数据库中保存并多次调用。 - **函数**:类似于存储过程,但主要目的是返回一个值。 - **包**:包含多个相关的存储过程和函数,以及变量、常量和其他类型...
4. 在`GenericTableReader<T>`中,利用抽象工厂创建的数据库连接执行SQL查询或存储过程,获取数据并转换为`T`类型的集合。 5. 将`GenericTableReader<T>`服务化,使用WCF将其配置为一个服务接口,例如`IDataService`...
这是一个基于Java技术栈开发的通用在线考试系统的源代码,它采用了经典的MVC设计模式,具体技术框架包括jsp、struts、hibernate以及数据库管理工具Oracle。以下将详细阐述这个系统的设计理念、主要组成部分以及各个...
2. `classes12.jar`:包含Oracle的非JDBC特定的数据库访问类,如LOB处理、存储过程调用等。 3. `oci.jar`(如果包含):Oracle的本地库,用于JDBC OCI驱动。 示例程序通常包括演示如何初始化数据库连接、执行SQL...
【标题】"通用的在线考试系统"是一款基于Java技术栈,使用jsp、struts、hibernate框架以及Oracle数据库构建的在线考试平台。这个系统旨在为教育和培训领域提供一个功能全面、易于使用的考试管理系统。 【描述】指出...
本项目“通用的在线考试系统(jsp+struts+hibernate+oracle)_project”采用的是Java Web技术栈,具体包括JSP、Struts、Hibernate和Oracle数据库,这些技术的结合为系统的稳定性和扩展性提供了坚实基础。 首先,JSP...
PL/SQL是Oracle数据库的编程语言,用于编写存储过程和触发器。了解这些技术对于开发基于Java的数据驱动应用至关重要。 【Web开发】 Web开发中,JSP(JavaServer Pages)用于创建动态网页,Struts是MVC(Model-View-...
本系统采用经典的Java Web开发框架,即JSP(JavaServer Pages)、Struts、Hibernate以及Oracle数据库,构建了一个功能完善的通用在线考试平台。下面我们将详细探讨这些技术在系统中的应用及其重要性。 1. JSP(Java...