jdbctemplate 相关问题

JdbcTemplate类是Spring Framework JDBC抽象的关键部分。它负责打开和关闭连接,转换异常等,同时提供执行SQL命令的简单API。

JdbcTemplate - queryForList - 对于大量数据运行缓慢

我正在使用Spring Boot + CommonsDBCP + JdbcTemplate。我需要从具有大量数据的 Hive 表中获取记录。 SQL:从客户中选择* 总记录:52K。 我正在使用列表 我正在使用 Spring Boot + CommonsDBCP + JdbcTemplate。我需要从具有大量数据的 Hive 表中获取记录。 SQL:select * from customer 总记录:52K。 我正在使用 List> result = jdbcTemplate.queryForList(SQL) 来获取记录。对于上述数量的记录来说,运行速度很慢。 这使用 RowMapperResultSetExtractor 需要 96 秒 来提取数据。如果数据量增加,查询时间就会增加。 有什么建议可以改进这个时间或使用 jdbctemplate 中的任何其他方法吗? 您可以使用 SELECT a, b, c, ... 使用 try-with-resources 执行普通 JDBC,或者使用 ResultSetMetaData 给出列标签到列号。映射列表很昂贵,因此对象列表会更好。 RowSet 类有很多。 最后但并非最不重要的一点是,简单地不收集列表,但迭代所有列表将是理想的选择。 本地内存减慢速度时的一个功能是使用 Statement#setMaxRows 或 setLargeMaxRows 来使用零件。 还有另一种选择:表转储。 无事务查询也可能有帮助。 这些都是有争议的措施;必须尝试一下。这是一个令人信服的改进,我可以在任何我从未发现过的地方重复使用。先从其他答案开始。 如果您有一个可以映射到 customers 表的类,您可以尝试编写一个自定义 RowMapper,将表中的条目映射到相关类的 List: List<Customer> customers = jdbcTemplate.query("SELECT * FROM customers", getRowMapper());//where getRowMapper` is a method that returns a relevant RowMapper 另一种选择是: List<Customer> customers = jdbcTemplate.queryForList("SELECT * FROM customers", Customer.class); 但是后一个解决方案也将使用RowMapperResultSetExtractor,我相信仍然会缓慢地处理结果。 我确实记得在 Spring JDBC javadoc 中的某个地方读过一些内容,not使用自定义RowMapper是低效的,因为执行映射的相关类需要将结果与相关类进行比较,以确保列与相关的匹配。属性,这需要时间。 一个。可能只用必需的列替换 select 子句 String sql = "SELECT * FROM customers" // old String sql = "SELECT column1,column2... FROM customers" //new 两个。像这样使用 JdbcTeplate.query() 方法 List<Customer> result = jdbcTemplate.query(sql, (rs, rowNum) -> new Customer( rs.getLong("column1"), rs.getDate("column2"), ... ), new Object[]{<sql_params>}); 三。消除获取瓶颈。 this.jdbcTemplate.setFetchSize(1000); 四。查看数据库端,分区的键、索引等是否就位? 五。 List>实际上做了什么,有多余的工作吗?

回答 3 投票 0

如果 UPDATE 语句中的 WHERE 子句找不到任何结果,JdbcTemplate 会抛出表或视图不存在

我有一个简单的 UPDATE 语句,如下所示: 更新 SCHEMA.TABLE 设置状态 = '活动',其中状态 = '非活动' 在 SQL Developer 中,即使没有任何带有“INACTIVE”的记录,这始终有效

回答 1 投票 0

JDBC 驱动程序将日期映射到 java.util.Timestamp,该时间戳在 sqlserver 中转换为 datetime2,导致数据比较出现问题

我在我的产品中使用 Spring Batch 框架。这是从mssqlserver数据库中读取一些数据,处理数据并使用where中的主键更新同一个表中处理后的数据

回答 1 投票 0

在spring中使用jdbctemplateFire Sequence.nextval查询

数据库:Oracle 我有一个表,其中有 10 列,我希望在插入行时序列下一个值,并使用插入的序列号。 现在我已经搜索并找到了那个钥匙...

回答 3 投票 0

JdbcTemplate 绑定到多个数据源

我正在尝试向 Spring Boot 项目添加第二个数据源。 主要连接是使用 spring.datasource.* 属性配置的,我正在使用

回答 1 投票 0

使用jdbcTemplet优化雪花批量插入数百万条记录

如何在使用 Spring Boot jdbcTemplet 时优化雪花数据库中数百万条记录的批量插入。 公共 Mono saveData(List> dataMapList, S...

回答 1 投票 0

如何在 Springs MVC 4 中使用 HikariCP 和 JdbcTemplate

我是 Springs MVC 的新手,我尝试将 HikariCP 与 JdbcTemplate 集成。但遇到很多错误,如何将 JdbcTemplate 指向 HikariCP DataSource。 在 applicationContext.xml 中 我是 Springs MVC 的新手,我尝试将 HikariCP 与 JdbcTemplate 集成。但遇到很多错误,请帮忙,如何将 JdbcTemplate 指向 HikariCP DataSource。 在 applicationContext.xml 中 <bean id="dataSource" class="com.zaxxer.hikari.HikariConfig"> <property name="poolName" value="springHikariCP" /> <property name="connectionTestQuery" value="SELECT 1" /> <property name="dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" /> <property name="dataSourceProperties"> <props> <prop key="url">${jdbc.url}</prop> <prop key="user">${jdbc.username}</prop> <prop key="password">${jdbc.password}</prop> </props> </property> </bean> <bean id="jdbcTemplate" class="com.zaxxer.hikari.HikariDataSource" destroy- method="close"> <property name="dataSource" ref="dataSource"></property> </bean> 在控制器中: 控制器 公共类 HandleWareHouse{ private DataSource dataSource; private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource){ this.dataSource = dataSource; } @RequestMapping(value="/saveProduct_categories", method = RequestMethod.POST) @ResponseBody public String insertPc(@RequestParam Map<String,String> requestParams){ jdbcTemplate = new JdbcTemplate(dataSource); String sql = "INSERT INTO product_categories(name,code,des,grp_name) VALUES(?,?,?,?)"; jdbcTemplate.update(sql, new Object[] {requestParams.get("pname"),requestParams.get("pcode"),requestParams.get("stext"),requestParams.get("pcategory")}); return "sucess"; } } 但是出现如下错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'com.zaxxer.hikari.HikariConfig' to required type 'javax.sql.DataSource' for property 'dataSource'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.zaxxer.hikari.HikariConfig] to required type [javax.sql.DataSource] for property 'dataSource': no matching editors or conversion strategy found 我使用 spring javaconfig 来配置数据源并获取 jdbctemplate。我认为这是最好的 @Bean public DataSource getDataSource() { private HikariDataSource dataSource() { final HikariDataSource ds = new HikariDataSource(); ds.setMaximumPoolSize(100); ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); ds.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE"); ; ds.setUsername("username"); ds.setPassword("password"); return ds; } } @Bean public JdbcTemplate getJdbcTemplate() { return new JdbcTemplate(getDataSource()); } 我希望这对你有用。 上面的代码会出现这个错误: 应用程序上下文中某些bean的依赖关系形成一个循环。 使用这个: public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(snowflakeDriverClass); dataSource.setJdbcUrl(snowflakeUrl); dataSource.setUsername(snowflakeUsername); dataSource.setPassword(snowflakePassword); return dataSource; } @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource()); }

回答 2 投票 0

如何在运行时创建(而不是切换)Datasource、JdbcTemplate 和 TransactionManager 实例?

我的 Spring Boot 应用程序在应用程序启动时不知道要连接到哪个数据库。它将在 r...

回答 1 投票 0

使用NamedParameterJdbcTemplate以一定批量大小进行批量更新

有没有一种简单的方法可以使用 NamedParameterJdbcTemplate 在数据库中插入特定批次(例如 500 条)的记录。 .batchUpdate() 方法不将批量大小作为参数。我相信它会尝试...

回答 2 投票 0

DBunit数据集:列正则表达式是MySQL中的保留字

我正在尝试使用 dbUnit 为 MySQL 中具有自动增量列的表编写集成测试。 集成测试如下所示: @RunWith(SpringJUnit4ClassRunner.class) @

回答 1 投票 0

无法调用“org.springframework.jdbc.core.JdbcTemplate.update(String, Object[])”,因为“this.jdbcTemplate”为空

我有一个Spring Batch项目,我需要在JobExecutionListener中集成一个jdbcTemplate。所以我配置了我的数据源和jdbcTemplate,如下所示: 导入java.util.Objects; 导入j...

回答 2 投票 0

动态查询如何限制只能SELECT查询

我们正在创建门户来为最终用户编写选择语句。由于预计会在外部使用,因此我们只允许使用 SELECT 查询。 您能否建议我们如何限制仅 SELECT

回答 1 投票 0

在 Spring Boot 3.2.0 中使用 JdbcTemplate 将 Java LocalDate 持久化到 Oracle DATE 列时出现意外的时间组件插入

在 Spring Boot 3.2.0 中使用 JdbcTemplate 将 Java LocalDate 值保留在 Oracle DATE 列中时,我们遇到了意外行为。 在升级到 Spring Boot 3.2.0 之前,时间

回答 1 投票 0

从 SQL 数据库中的存储过程从字符串转换为 uniqueidentifier 时转换失败

当我在 Spring boot 应用程序中使用 JDBC 模板连接存储过程时出现以下错误。仅获取 accIds 参数时出错 已解决 [org.springframework.jdbc.

回答 1 投票 0

从 spring 本身管理的 shedlock 表中删除记录 我想从 shedlock 表中删除记录?

我尝试像这样删除,这可以正常工作,但直到应用程序启动才插入新记录。 包 com.jcdecaux.hive.refproxy.dao.db.repository; 导入 org.springframework.be...

回答 1 投票 0

Spring 3 MVC:java.lang.IllegalArgumentException:需要属性“dataSource”。如何正确设置JdbcTemplate?

我是Spring开发的新手。现在,我真的面临一个问题。下面的代码片段可以让你清楚地意识到我的问题........................ 这是我的 DAO 类: 公共类LoginDaoIm...

回答 3 投票 0

结果集没有当前行

jdbcTemplate.query(sql, 请求->{ 做{ response.put(request.getLong(1),request.getString(2)); if(request.getInt(5) != 1){ responseForMachine.put(请求。

回答 1 投票 0

通过 int-jdbc:inbound-channel-adapter 使用选择查询的时间更新查询

我想要执行的是使用链接到某个数据源的 int-jdbc:inbound-channel-adapter 来消费消息,然后更新将保留的consumer_table(或偏移表),用于 sp...

回答 1 投票 0

使用NamedParameterJdbcTemplate为每个查询设置不同的查询超时

我正在使用NamedParameterJdbcTemplate。共有三种方法,除了不同的 SQL 查询之外,每种方法的作用几乎相同,例如: 公共开放乐趣方法1():字符串{ val sql = "从fu中选择*...

回答 1 投票 0

处理JdbcTemplate中的列空值

我正在使用 JdbcTemplate 来获取查询结果。数据库表中的某些列可以具有空值。但我收到转换异常,抱怨 null 无法转换为 long 类型。 ...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.