`

jdbctempleate 执行postgres 数据库存储过程返回结果集

阅读更多
创建表:

create  table  myuser
(
id numeric(5,0)  not null,
name varchar(20)  not null,
sex  varchar(8) not null
)
insert into myuser values(1 , '李亚希'  , '男' );


创建存储过程
CREATE LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION  getUsers()
RETURNS refcursor AS 
$$
DECLARE recordcur refcursor;

BEGIN
OPEN recordcur FOR
SELECT id, name ,sex FROM  myuser;
RETURN recordcur;
END;
$$LANGUAGE plpgsql;

这个文件我为了测试方便 放在 src 目录下
spring 配置文件
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName"> 
      <value>org.postgresql.Driver</value> 
    </property> 
    <property name="url"> 
      <value>jdbc:postgresql://localhost:5432/postgres</value> 
    </property> 
    <property name="username"> 
      <value>postgres</value> 
    </property> 
    <property name="password"> 
      <value>postgres</value> 
    </property> 
  </bean> 
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource"> 
      <ref local="dataSource"/> 
    </property> 
  </bean> 

java 代码:
package test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"dao.xml");
		JdbcTemplate jdbcTemplate = (JdbcTemplate) context
				.getBean("jdbcTemplate");
		jdbcTemplate.execute(new CallableStatementCreator() {
			public CallableStatement createCallableStatement(Connection con)
					throws SQLException {
				String storedProc = "{?=call getUsers()}";// 调用的sql
				con.setAutoCommit(false); //这句很重要 , 没有报错
				CallableStatement cs = con.prepareCall(storedProc);
				cs.registerOutParameter(1, Types.OTHER);
				return cs;
			}
		}, new CallableStatementCallback<Object>() {
			public Object doInCallableStatement(CallableStatement cs)
					throws SQLException, DataAccessException {
				List<Map<String, String>> resultsMap = new ArrayList<Map<String, String>>();
				cs.execute();
				ResultSet rs = (ResultSet) cs.getObject(1);// 获取游标一行的值
				while (rs.next()) {// 转换每行的返回值到Map中
					Map<String, String> rowMap = new HashMap<String, String>();
					rowMap.put("id", rs.getString("id"));
					rowMap.put("name", rs.getString("name"));
					rowMap.put("sex", rs.getString("sex"));
					System.out.println(rowMap.get("id") + "========="
							+ rowMap.get("name") + "==========="
							+ rowMap.get("sex"));
				}
				rs.close();
				return resultsMap;
			}
		});
	}
}



执行结果:
1=========李亚希===========男
分享到:
评论

相关推荐

    Postgres数据库基于持久内存的优化探索.pptx

    2. 表空间优化:Postgres数据库的表空间可以使用PM来存储数据,从而提高数据库的读写性能。PM的高速读写特性可以满足高性能数据库应用的需求。 3. 缓存优化:Postgres数据库的缓存机制可以使用PM来存储数据,从而...

    实时采集postgres数据库日志.zip

    在Postgres日志中,数据集可能包括各种数据库操作的详细信息,如查询语句、执行时间、错误信息等。 【压缩包子文件的文件名称列表】"postgres-cdc-master"表明这个压缩包包含了一个与Postgres CDC相关的主项目或者...

    postgres数据库odbc数据源

    Postgres数据库ODBC数据源是将PostgreSQL数据库与应用程序通过开放数据库连接(ODBC)标准进行集成的关键组件。ODBC是一种允许应用程序访问不同数据库的接口,使得开发者无需关心底层数据库的具体实现,只需遵循ODBC...

    postgres数据库linux版本

    postgres数据库linux版本

    postgres数据库用户手册

    4. 关系操作:`JOIN`用于连接不同表,`UNION`和`INTERSECT`合并结果集。 四、索引与性能优化 Postgres支持多种类型的索引,如B树、GiST、SP-GiST、GIN和BRIN。合理创建索引可以显著提高查询速度。`EXPLAIN`命令用于...

    一个基于C#实现的Postgres数据库向导式创建的程序代码

    【标题】中的“一个基于C#实现的Postgres数据库向导式创建的程序代码”指出,这个项目是一个使用C#编程语言编写的软件工具,它的功能是帮助用户以向导的方式创建PostgreSQL(通常简称为Postgres)数据库。Postgres是...

    postgres数据库数据探查

    本资源使用python进行编写,解压后在pycharm中进行使用,该探查数据库适用于postgres数据库,运行结束后以.xlsx格式进行保存,探查的内容有:数据库名称、数据表名称、数据表注释、排序、字段名称、字段注释、字段...

    postgres数据库中文手册

    在编程规范方面,手册会详细讲解如何使用PL/pgSQL,这是Postgres内置的面向过程的SQL语言,用于编写存储过程和触发器。此外,Postgres还支持多种外部语言,如Python、Perl和Java,使得数据库可以直接执行这些语言的...

    postgres 存储过程函数

    在PostgreSQL中,存储过程被称为“函数”,因为它们可以接收参数并返回结果。这与某些数据库系统中的传统概念有所不同,但在功能上是类似的。 在描述中提到的3层循环,这通常意味着存储过程或函数包含嵌套的循环...

    Postgres数据库SQL注入手册1

    Postgres数据库SQL注入手册1

    Postgres数据库操作命令大全.txt

    针对Postgres服务器端常用操作命令汇总 由于本人经常操作Postgres数据库养成笔记习惯 所以整理了一下针对数据库操作的各种命令

    C#如何连接postgres数据库.rar

    通过`NpgsqlCommand`(或`OleDbCommand`)对象创建SQL语句,设置命令参数(如果需要),然后调用`ExecuteNonQuery()`(执行不返回结果的命令)、`ExecuteScalar()`(返回单个值)或`ExecuteReader()`(返回数据集)...

    postgres数据库客户端

    【postgres数据库客户端】是一款强大的数据库管理工具,专用于与PostgreSQL数据库进行交互。PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),以其高度稳定性和丰富的功能而受到全球开发者的广泛青睐。这...

    jmeter连接postgres数据库的样例

    jmeter连接postgres数据库的样例

    linux-一个小100lineshell脚本用来管理Postgres数据库

    在这个场景中,我们有一个专门用于管理Postgres数据库的小型shell脚本,它大约包含100行代码。Postgres,全名PostgreSQL,是一款开源的关系型数据库管理系统(RDBMS),它以其稳定性、安全性以及强大的功能而闻名。 ...

    PostgresChina2018刘成伟oracle到Postgres数据库迁移工具.pdf

    1. 数据库迁移定义:迁移是指将数据从一个数据库管理系统(例如Oracle)转移到另一个系统(如Postgres)的过程。这个过程包括数据结构、数据本身以及相应的业务逻辑和应用程序代码的转移。 2. 迁移工具的特点: - ...

    MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书V1.1

    MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书V1.1 本文档旨在提供一个综合的数据库等保测评作业指导书,涵盖MYSQL、ORACLE、SQLSERVER、Postgres、Redis等多种数据库管理系统。该指导书旨在...

    多数据源元数据存储表(postgres数据库可用)

    《在Sping Cloud(Spring Boot)中基于AbstractRoutingDataSource 实现多数据源动态切换》多数据源元数据存储表,在postgres数据库可直接运行,如果是别的数据库请自行修改sql语句

    postgres 代码生成器

    它接收来自UI层的请求,调用DAL执行数据库操作,并返回结果。BLL可以防止UI直接访问数据库,提供更安全、灵活的业务逻辑处理。 3. **表示层(UI)/前端接口**:顶层负责用户交互,可以是Web界面、桌面应用或移动...

    PostgreSQL数据库备份脚本

    **PostgreSQL数据库备份脚本详解** 在IT领域,数据库的安全性是至关重要的,定期备份是保障数据安全的重要手段。PostgreSQL作为一款强大的开源关系型数据库系统,提供了多种方式进行数据库的备份与恢复。本文将深入...

Global site tag (gtag.js) - Google Analytics