Spring Boot显示获取连接及多结果集输出、表值类型

Spring Boot框架比较方便地进行数据源的管理,结合MyBatis常规的查询、存储过程都可以简单地配置实现。很多业务场景,需要进行更为复杂的处理,因此需要将框架内的连接池里的连接取出使用,使用完了再放回去。

@Controller

public class …… {

public Logger LOGGER = LoggerFactory.getLogger(this.getClass());

private DataSource dataSource;

@Autowired

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

//针对动态数据源获取实例所需要的数据源,而不是顶层的。

private DataSource getCurrentDataSource(DataSource dataSource) {

if(dataSource instanceof DynamicRoutingDataSource) {

DynamicRoutingDataSource dyncDs = (DynamicRoutingDataSource) dataSource;

return dyncDs.getDataSource("sqlserver");

}

return dataSource;

}

//释放连接

private void closeConnection(Connection conn, DataSource dataSource)

{

if(conn == null) {

return;

}

if(dataSource instanceof DruidDataSource) {

DruidDataSource dds = (DruidDataSource) dataSource;

dds.discardConnection(conn);

} else {

DataSourceUtils.releaseConnection(conn, dataSource);

}

}

本示例配置文件application.yml

spring:

datasource:

dynamic:

primary: sqlserver #设置默认的数据源或者数据源组,默认值即为master

      datasource:

sqlserver:

直接注入的是第一层的,而实际需要使用的是第二层的。

现在使用的是SQL Server,需要针对该数据库进行存储过程多个结果集的获取以及传值类型的批量操作。传值类型需要使用Microsoft JDBC Driver 6.0版本。

Connection conn=null;

DataSource ds = null;

ds = getCurrentDataSource(dataSource);

conn=DataSourceUtils.getConnection(ds).unwrap(SQLServerConnection.class);

……

closeConnection(conn, ds);

使用如果结果集,如果之前对输出参数获取,会造成结果集关闭。因此需要将所有结果集获取完后再对输出参数进行获取处理。这一点不如.net方便。

ResultSet checkRs = null;

SQLServerCallableStatement statement = null;

SQLServerDataTable ExcelDataTable=null;

ExcelDataTable=new SQLServerDataTable();

ExcelDataTable.addColumnMetadata(列名, java.sql.Types…);

……

ExcelDataTable.addRow(列1数据,列2数据……);

try {

statement = (SQLServerCallableStatement) conn.prepareCall("{call ssp_monthlyarchivement_check(?,?,?)}");

statement.setStructured(1, "dbo.ImportPeopleList", ExcelDataTable);//表值类型

statement.registerOutParameter(2, Types.BIGINT); //输出参数

statement.registerOutParameter(3, Types.NVARCHAR, 1000);//输出参数

checkRs=statement.executeQuery();

……

if(statement.getMoreResults())//获取下一结果集

{

checkRs = statement.getResultSet();

}

long ErrCode = statement.getLong(2); //最后获取输出参数

String ErrText = statement.getNString(3);

原文地址:https://www.cnblogs.com/yuxiaoxu/p/12222773.html

时间: 2024-11-05 19:44:00

Spring Boot显示获取连接及多结果集输出、表值类型的相关文章

Spring boot Freemarker 获取ContextPath的方法

Spring boot Freemarker 获取ContextPath的两种方法: 1.自定义viewResolver,Spring boot中有一个viewResolver,这个和配置文件中的师徒解析器是一样的,但是spring boot不允许xml配置文件,所以可以写一个自定义的FreeMarker视图解析器. public class MvcConfig extends WebMvcConfigurerAdapter { @Bean public FreeMarkerViewResolv

Java spring boot 2.0连接mysql异常:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

解决办法:application.yml提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当使用新的驱动com.mysql.cj.jdbc.Driver' com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver 我接着运行项目有报错 解决办法: spring: datasource: url: jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding

【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动了  springboot服务,容器启动正常,docker exec 也可以正常进入容器内部,但是docker logs 控制台并没有日志打印出来. 同样的,/var/lib/docker/containers目录下的对应容器目录中,也没有对应的 *-json.log日志文件生成. 原因: dock

spring boot(9) redis(连接,增删改查,集群,和session一起使用)

1.建立连接 1.1 pom.xml <!-- redis 相关支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.3.2.RELEASE</version> </dependency> 1.2 app

记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障

搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为用的新框架自己本身也不是很了解,刚开始一直以为是自己的框架搭建的有问题, 后来发现是mysql数据库引擎的问题 解决方案 MyISAM不支持事物,InnoDB支持事物 先检查你的mysql版本 ,mysql 4.0系列之前是不支持事务的.    SELECT VERSION(); 检查你的数据库支持

Spring Boot配置MongoDB连接池

Spring Boot中通过依赖 spring-boot-starter-data-mongodb ,来实现 spring-data-mongodb 的自动配置. 但是默认情况下,Spring Boot 中,并没有像使用MySQL或者Redis一样,提供了连接池配置的功能.因此,我们需要自行重写 MongoDbFactory ,实现MongoDB客户端连接的参数配置扩展. 需要说明的是,MongoDB的客户端本身就是一个连接池,因此,我们只需要配置客户端即可. 配置文件 为了统一Spring B

Spring框架中获取连接池常用的四种方式

1:DBCP数据源 DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta-commons/commons-pool.jar.下面是使用DBCP配置oracle数据源的配置片断: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDat

【spring】【spring mvc】【spring boot】获取spring cloud项目中所有spring mvc的请求资源

实现的方法: 1.在父级项目中 或者 每个微服务都引用的项目中添加实体类Resource 2.在父级项目中 或者 每个为服务都引用的项目中写一个工具类,作用是用来获取请求资源 3.在每一个微服务的启动类添加注解@RestController ,并且写一个请求方法调用 工具类的请求资源的方法 4.将获取到的JSON字符串 保存在文件中 5.最后,在需要存储这些信息到数据库中的对应微服务 提供一个请求方法,参数就传递这一个一个的JSON字符串,而请求方法做的事情就是解析JSON,并批量保存到对应数据

Spring boot随时获取ApplicationContex

[java] view plain copy print? @Service public class SpringManager implements ApplicationListener<ContextRefreshedEvent> { private static ApplicationContext applicationContext = null; @Override public void onApplicationEvent(ContextRefreshedEvent eve