标签: spring-jdbc

使用select和parameters执行DB2插入

我想做这样的事情:

INSERT INTO TABLEA
(
 COLUMN1, COLUMN2, COLUMN 3
)
SELECT FOOBAR, DOOBAR, ?
FROM TABLEB
Run Code Online (Sandbox Code Playgroud)

然后通过Spring JDBC将其发送给JDBC进行更新......

simpleJdbcTemplate.update( mySqlFromAbove, someVariableToReplaceQuestionMark );
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?如果我在构建SQL查询时用硬编码的值替换问号,它会正常工作,但我不想打开自己的SQL注入...

编辑 -
我得到
嵌套异常是com.ibm.db2.jcc.c.SqlException:DB2 SQL错误:SQLCODE:-418,SQLSTATE:42610,SQLERRMC:null
这似乎表明
参数标记的使用无效?

sql db2 jdbc spring-jdbc

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

没有Spring的Spring JDBC模板

是否有类似Spring JDBC Template的Java库,具有相同质量的代码和文档以及类似的数据访问异常层次结构,但没有依赖于其他Spring模块(根据http://mvnrepository.com/artifact/org的核心/ bean/context模块).springframework/spring-jdbc/3.0.6.RELEASE)?

java spring spring-jdbc

10
推荐指数
3
解决办法
8026
查看次数

Spring-boot使用schema.sql和data.sql填充H2数据库

我将Spring-boot设置为使用H2内存数据库application.properties文件位于/ config目录中

它看起来像这个文件被处理

spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.path=/myconsole
spring.h2.console.enabled=true
spring.datasource.initialize=true
spring.datasource.schema=schema.sql
spring.datasource.data=data.sql
Run Code Online (Sandbox Code Playgroud)

处理此文件并且控制台显示在/ myconsole但是不处理schema.sql和data.sql并且db是emplty.我在/ config和/ src/main/resouces下放置了schema.sql和data.sql文件

SQL语言指令是正确的,我可以使用控制台输入填充表.

另一个奇怪的事情是,即使我将db命名为spring.datasource.url = jdbc:h2:mem:mydb spring控制台加载另一个数据库testdb osjdeEmbeddedDatabaseFactory ---启动嵌入式数据库:url ='jdbc:h2:mem:testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = false',用户名='sa'

如何正确加载H2数据库?提前致谢 ....

h2 spring-jdbc spring-boot

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

我可以请求JDBCTemplate扩展list参数以用于in()子句吗?

我可以这样做:

select * from mytable m where m.group_id in (?)
Run Code Online (Sandbox Code Playgroud)

...并传入要扩展到我的参数的列表或参数数组,即:

select * from mytable m where m.group_id in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

具体来说,我使用的是Spring和JdbcTemplate/SimpleJdbcTemplate类.

java spring jdbc spring-jdbc

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

从SimpleJdbcTemplate查询返回的大型列表

这是我的问题:在我的Java程序中的某个时刻,我使用Spring的SimpleJdbcTemplate类从数据库中获取(非常)大的事件列表.

List<Event> events = 
            this.simpleJdbcTemplate.query(myQuery,
            myMapper(), 
            new Object[] {
                    filter.getFirst(),
                    filter.getSecond(),
                    filter.getThird()}
            );
Run Code Online (Sandbox Code Playgroud)

问题是该列表可能包含600,000个事件...因此使用大量内存(并且还需要时间来处理).

但是我并不需要一次检索所有事件.实际上我希望能够遍历列表,只读取一些事件(链接到特定的KEY_ID - sq查询myQuery按KEY_ID排序),处理它们并最终返回迭代,让垃圾收集器摆脱以前和已处理的事件,以便我永远不会超过一定的内存量.

有没有一种很好的方法可以使用Spring库(或任何库)?

干杯,Vakimshaar.

java sql spring jdbc spring-jdbc

9
推荐指数
2
解决办法
8333
查看次数

测试在内部使用特定于MySQL的查询的代码的适当方法是什么

我正在收集数据并使用Java将这些数据存储在MySQL数据库中.另外,我使用Maven构建项目,TestNG作为测试框架,使用Spring-Jdbc访问数据库.我已经实现了一个封装对数据库的访问的DAO层.除了使用DAO类添加数据之外,我还想执行一些查询,这些查询聚合数据并将结果存储在其他一些表中(如物化视图).

现在,我想编写一些测试用例来检查DAO类是否正常工作.因此,我想到了一个内存数据库,它将填充一些测试数据.由于我也使用MySQL特定的SQL查询来聚合数据,我遇到了一些麻烦:

  1. 首先,我想过简单地使用Spring-Jdbc提供的嵌入式数据库功能来实例化嵌入式数据库.我决定使用H2实现.在那里我遇到了麻烦,因为聚合查询使用特定于MySQL的内容(例如时间操作函数,如DATE()).这种方法的另一个缺点是我需要维护两个ddl文件 - 在MySQL中定义表的实际ddl文件(这里我定义了编码并为表和列添加注释,这两个特性都是特定于MySQL的); 和测试ddl文件定义相同的表但没有注释等,因为H2不支持注释.
  2. 我找到了使用MySQL作为嵌入式数据库的描述,我可以在测试用例中使用它(http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html) .这对我来说真的很有希望.不幸的是,它没有用:一个MissingResourceExcpetion发生了"资源'5-0-21/Linux-amd64/mysqld'找不到".似乎驱动程序无法在我的本地计算机上找到数据库守护程序.但我不知道我需要寻找什么才能找到解决该问题的方法.

现在,我有点陷入困境,我想知道我是否应该以不同的方式创建架构.有人提供了一些如何设置合适系统的提示吗?我还有两个其他选择:

  1. 我将使用本机MySQL实例并设置仅用于测试用例的数据库,而不是使用嵌入式数据库.这个选项听起来很慢.实际上,我可能想稍后设置一个CI服务器,我认为使用嵌入式数据库会更合适,因为测试运行得更快.
  2. 我从SQL查询中删除了所有特定于MySQL的东西,并使用H2作为嵌入式数据库进行测试.如果这个选项是正确的选择,我需要找到另一种方法来测试将数据聚合到物化视图的SQL查询.
  3. 还是有第三种选择,我没有想到的?

我会很感激任何提示.

谢谢,XComp

mysql testng spring-jdbc embedded-database maven

9
推荐指数
2
解决办法
3206
查看次数

如何将用户定义的类型作为输入传递给存储过程?

我有两个涉及用户定义类型的相关存储过程.第一个接受对象ID并返回用户定义类型的相应实例.第二个接受相同用户定义类型的实例并使用它执行某些操作.

我正在使用Java,JDBC和一些Spring JDBC.我已经成功完成了第一个存储过程,即.我可以从数据库中检索用户定义类型的实例,但是,我无法使第二个存储过程工作.

这是我到目前为止的基本概要:

架构(PL/SQL)

create or replace type example_obj as object
  (ID     NUMBER,
   NAME   VARCHAR2(100))

create or replace type example_tab as table of example_obj

create or replace package
example as

procedure getExample
(p_id      in number,
 p_example out example_tab);

procedure useExample
(p_example  in example_tab);

end example;
Run Code Online (Sandbox Code Playgroud)

实体(Java) - 表示Java中的用户定义类型

public class Example {
    public BigDecimal ID;
    public String Name;
}
Run Code Online (Sandbox Code Playgroud)

Mapper(Java) - 从SQL类型映射到Java类型并返回

public class ExampleMapper extends Example implements SQLData {
    public static final String SQL_OBJECT_TYPE_NAME = "example_obj";
    public static …
Run Code Online (Sandbox Code Playgroud)

java oracle stored-procedures jdbc spring-jdbc

9
推荐指数
1
解决办法
3644
查看次数

使用 JdbcTemplate 流式传输 JDBC 查询结果

我将 Spring 与 Java 结合使用。

我需要Stream从数据库查询返回一个对象(我用来ObjectMapper将它们映射到 JSON)。

查询结果可能非常大(超过 500k 个对象),因此我不想将它们存储在内存中。

我已经用 完成了JpaRepository

我想知道如何做到这一点JdbcTemplate以及这样做是否有好处?

JdbcTemplate即......我们可以使用甚至其他库来优化吞吐量和内存使用吗?

我的目标实际上是最终找到运行查询并将所有对象在内存/时间/处理方面打印到输出流的最佳方法。

java spring jdbc spring-jdbc

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

我应该关闭JNDI获取的数据源吗?

更新:显然Tomcat,从7.0.11开始,为您关闭DataSource,因此它在webapp的contextDestroyed中不可用.请参阅:https://issues.apache.org/bugzilla/show_bug.cgi?id = 25060

嗨,

我正在使用Spring 3.0和Java 1.6.

如果我以这种方式获得数据源:

<bean id="dataSource" class="my.data.Source" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:home"/>
    <property name="username" value="user"/>
    <property name="password" value="pw"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

然后在bean被销毁时关闭数据源.

如果我得到这样的数据源:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/db" />
Run Code Online (Sandbox Code Playgroud)

那么我是否必须在contextDestroyed监听器中显式关闭数据源?

谢谢,

保罗

spring jndi datasource spring-jdbc tomcat7

8
推荐指数
1
解决办法
7111
查看次数

JDBC模板 - 一对多

我有一个看起来像这样的课程.我需要从两个数据库表中填充它,如下所示.有没有首选的方法呢?

我的想法是让服务类选择List<>通过ResultSetExtractor从DAO.然后foreach在该列表上执行操作,并List<>通过另一个人为个人选择一封电子邮件ResultSetExtractor,并将其附加到foreach循环中.

有没有更好的方法,还是这样的好?

public class Person {
    private String personId;
    private String Name;
    private ArrayList<String> emails;
}


 create table Person (
   person_id  varchar2(10),
   name       varchar2(30)
);


create table email (
  person_id   varchar2(10),
  email       varchar2(30)
);
Run Code Online (Sandbox Code Playgroud)

java spring-jdbc

8
推荐指数
1
解决办法
1万
查看次数