我想做这样的事情:
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
这似乎表明
参数标记的使用无效?
是否有类似Spring JDBC Template的Java库,具有相同质量的代码和文档以及类似的数据访问异常层次结构,但没有依赖于其他Spring模块(根据http://mvnrepository.com/artifact/org的核心/ bean/context模块).springframework/spring-jdbc/3.0.6.RELEASE)?
我将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数据库?提前致谢 ....
我可以这样做:
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的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将这些数据存储在MySQL数据库中.另外,我使用Maven构建项目,TestNG作为测试框架,使用Spring-Jdbc访问数据库.我已经实现了一个封装对数据库的访问的DAO层.除了使用DAO类添加数据之外,我还想执行一些查询,这些查询聚合数据并将结果存储在其他一些表中(如物化视图).
现在,我想编写一些测试用例来检查DAO类是否正常工作.因此,我想到了一个内存数据库,它将填充一些测试数据.由于我也使用MySQL特定的SQL查询来聚合数据,我遇到了一些麻烦:
现在,我有点陷入困境,我想知道我是否应该以不同的方式创建架构.有人提供了一些如何设置合适系统的提示吗?我还有两个其他选择:
我会很感激任何提示.
谢谢,XComp
我有两个涉及用户定义类型的相关存储过程.第一个接受对象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) 我将 Spring 与 Java 结合使用。
我需要Stream从数据库查询返回一个对象(我用来ObjectMapper将它们映射到 JSON)。
查询结果可能非常大(超过 500k 个对象),因此我不想将它们存储在内存中。
我已经用 完成了JpaRepository。
我想知道如何做到这一点JdbcTemplate以及这样做是否有好处?
JdbcTemplate即......我们可以使用甚至其他库来优化吞吐量和内存使用吗?
我的目标实际上是最终找到运行查询并将所有对象在内存/时间/处理方面打印到输出流的最佳方法。
更新:显然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监听器中显式关闭数据源?
谢谢,
保罗
我有一个看起来像这样的课程.我需要从两个数据库表中填充它,如下所示.有没有首选的方法呢?
我的想法是让服务类选择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) spring-jdbc ×10
java ×6
jdbc ×5
spring ×5
sql ×2
datasource ×1
db2 ×1
h2 ×1
jndi ×1
maven ×1
mysql ×1
oracle ×1
spring-boot ×1
testng ×1
tomcat7 ×1