标签: spring-jdbc

在 Spring JDBC 模板中插入或更新带有时间戳的行时如何指定时区?

在 JDBC API 中,我可以使用以下命令简单地设置 UTC 时区

用于插入或更新

PreparedStatement myPreparedStatement = ...
myPreparedStatement.setTimestamp( 1, myDateTime, Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ));
Run Code Online (Sandbox Code Playgroud)

用于查询

ResultSet rs = ...
rs.next();
rs.getTimestamp( 1,  Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ) )
Run Code Online (Sandbox Code Playgroud)

使用 Spring JDBC Template,我将需要使用类似的东西来查询。

对于查询,我没有任何问题,因为可以通过 RowMapper 访问 ResultSet,并使用 ResultSet 传递 UTC 中的 Calendar 实例。但是,为了插入或更新,我只有以下内容。

NamedParameterJdbcTemplate namedParameterJdbcTemplate = ....
SqlParameterSource parameters = new MapSqlParameterSource().addValue("current_timestamp", myDateTime )
namedParameterJdbcTemplate.update(sql, parameters);
Run Code Online (Sandbox Code Playgroud)

问题

有没有办法告诉 Spring JDBC 模板使用我指定的时区?

我不喜欢使用,TimeZone.setDefault(..)因为这会影响我们的遗留模块。

spring-jdbc jdbctemplate

5
推荐指数
1
解决办法
4256
查看次数

如何从结果集中获取单行

我有一个返回两行的 sql 查询。我已经使用 BeanPropertyRowMapper 来检索查询结果,我想使用第一行并将特定值分配给 pojo。如何从结果集中检索单行

java jdbc spring-jdbc jdbctemplate

5
推荐指数
1
解决办法
9234
查看次数

Spring jdbc“选择更新”

我有以下与 Spring JDBC 一起使用的方法

public String getState() {
    String stateLink = template.queryForObject(
            "select state_url from state_scrape_queue where in_use = false ORDER BY scrape_timestamp NULLS FIRST LIMIT 1",
            (result, rowNum) -> {
                return result.getString("state_url");
            });
    return stateLink;
}
Run Code Online (Sandbox Code Playgroud)

我找不到如何使用Spring JDBC 进行更新的示例。我想in_use设置为 true 用于更新。

我需要使用 select 进行更新,因为该应用程序将以多线程方式使用。我不希望多个线程获得同一行,防止这种情况的方法是使用select for update

我能够使用普通 JDBC 做到这一点,这是我问的问题如何使用普通 JDBC 做到这一点

使用 JDBC 选择“更新”?

有谁知道这将如何完成?

spring jdbc spring-jdbc jdbctemplate spring-boot

5
推荐指数
1
解决办法
3327
查看次数

Spring Boot 通过 REST 端点将大型数据库导出到 csv

我需要构建一个 Spring Boot 应用程序,该应用程序公开 REST 端点,以将巨大的数据库表导出为具有不同过滤器参数的 CSV 文件。我正在努力寻找解决这个问题的有效方法。

目前,我正在使用 spring-data-jpa 查询数据库表,该表返回 POJO 列表。然后使用 Apache Commons CSV 将此列表作为 CSV 文件写入 HttpServletResponse。这种方法有几个问题。首先,它将所有数据加载到内存中。其次,它很慢。

我没有对数据执行任何业务逻辑,在这种情况下是否有必要使用 jpa 和实体(POJO)。我觉得这就是造成问题的地方。

java spring spring-jdbc spring-data spring-boot

5
推荐指数
1
解决办法
6079
查看次数

从 Java 8 迁移到 java 11 - 无法加载 jdk.internal.util 类 (java.lang.NoClassDefFoundError)

从 Java 8 迁移到 Java 11 开放 JDK。出现奇怪的错误,其中 java.base 模块中的一个类 (java.util.Arrays) 无法访问模块jdk.internal.util.ArraysSupport中名为 ( )的另一个类java.base

如果我查看java.base模块jdk.internal.util包的模块信息未导出。我尝试过--add-export java.base/jdk.internal.util=ALL-UNNAMED但遇到了同样的错误。As--add-export有助于将包导出到另一个模块。这里的问题是同一模块中的一个类无法访问同一模块中的另一个类。不确定这里出了什么问题并寻求建议。

java.lang.NoClassDefFoundError: Could not initialize class jdk.internal.util.ArraysSupport
        at java.base/java.util.Arrays.equals(Arrays.java:2873)
        at java.base/sun.security.util.ObjectIdentifier.equals(ObjectIdentifier.java:345)
        at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:185)
        at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:154)
        at java.base/sun.security.pkcs.PKCS7.<init>(PKCS7.java:136)
        at java.base/sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:127)
        at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:297)
        at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:230)
        at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:757)
        at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1034)
        at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:870)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:788)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2124)
        at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2033)
        at …
Run Code Online (Sandbox Code Playgroud)

java spring spring-jdbc java-11

5
推荐指数
1
解决办法
5155
查看次数

使用Spring JdbcTemplate进行多个数据库操作

我喜欢JdbcTemplate的简单易用性,但我对它的工作方式感到有些困惑.似乎每个操作(query()或update())从数据源获取连接并关闭它.

很漂亮,但是如何在同一个连接中执行多个SQL查询?

我可能想要按顺序执行多个操作(例如SELECT后跟一个INSERT后跟一个提交)或者我可能想要执行嵌套查询(SELECT然后根据每行的结果执行第二个SELECT).

我如何使用JdbcTemplate执行此操作.我使用合适的班级吗?

java spring jdbc spring-jdbc

4
推荐指数
2
解决办法
2万
查看次数

这个spring类BatchPreparedStatementSetter有什么用?

谁能给我一些关于他的春课的简短描述

org.springframework.jdbc.core.BatchPreparedStatementSetter
Run Code Online (Sandbox Code Playgroud)

(JavaDoc API链接)

java spring spring-jdbc

4
推荐指数
1
解决办法
5842
查看次数

获取具有空SQL状态的错误代码4220

我收到错误代码-4220与空SQL状态.SP"XXXXX"包含VARGRAPHICS数据类型.下面是完整的异常堆栈跟踪.SP正在执行,读取输出参数时出错,即执行成功调用方法,但getString方法给出错误.

即使我正在尝试访问任何方法来获取输出参数值,也会出现错误.仅供参考,我尝试使用最新版本的db2驱动程序,但仍然存在错误.

    com.ibm.db2.jcc.am.SqlException: [jcc][t4][1065][12306][3.65.77] Caught java.io.CharConversionException.  See attached Throwable for details. ERRORCODE=-4220, SQLSTATE=null
    at com.ibm.db2.jcc.am.cd.a(cd.java:682)
    at com.ibm.db2.jcc.am.cd.a(cd.java:60)
    at com.ibm.db2.jcc.am.cd.a(cd.java:112)
    at com.ibm.db2.jcc.am.gc.a(gc.java:2825)
    at com.ibm.db2.jcc.am.gc.a(gc.java:582)
    at com.ibm.db2.jcc.am.gc.q(gc.java:560)
    at com.ibm.db2.jcc.am.gc.N(gc.java:1557)
    at com.ibm.db2.jcc.am.gc.a(gc.java:1541)
    at com.ibm.db2.jcc.am.CallableStatement.D(CallableStatement.java:941)
    at com.ibm.db2.jcc.am.CallableStatement.getString(CallableStatement.java:920)
    at com.cst.test.daoLayer.SPTest.callDB2ProcOUTParameter(SPTest.java:118)
    at com.cst.test.daoLayer.SPTest.testLogic(SPTest.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:618)
    at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
    at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
    at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
    at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
    at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
    at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
    at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
    at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: …
Run Code Online (Sandbox Code Playgroud)

db2 spring-jdbc

4
推荐指数
2
解决办法
4万
查看次数

如何减少SpringBoot中我的SQL查询的超时

我正在构建一个Web应用程序,该应用程序在后端使用MSSQl来获取查询。我正在使用SpringBoot和Hibernate。

现在,如果数据库关闭,我的查询将花费超过2分钟的时间,并在异常org.hibernate.exception.JDBCConnectionException以下抛出:无法打开连接”

如何减少应用程序中的超时,以便在db关闭时更早地查询超时。

帮助深表赞赏

mysqli yaml hibernate spring-jdbc spring-boot

4
推荐指数
1
解决办法
4052
查看次数

如何将对象列表(DTO)作为单个IN参数传递给存储过程

我想在参数中传递Dto并在spring jdbc中调用存储过程.这有可能,这样做吗?

我想用patometer中的dto调用存储过程而不是设置参数?因为我有大量的参数.

mysql stored-procedures dto spring-jdbc

4
推荐指数
1
解决办法
3724
查看次数