Tag: jdbctemplate

NamedJDBCTemplate参数是列表列表

我有一个看起来像这样的查询: SELECT * FROM someTable t WHERE (ta, tb) IN (VALUES (1, 2), (3, 4)) 并且它将选择ta == 1 AND tb == 2或ta == 3 AND tb == 4任何记录。 这似乎工作得很好。 但是,我无法找到一种干净的方法来为NamedJDBCTemplate指定参数。 我尝试给它一个列表列表(即List<List> ),但它似乎炸毁了这样做。 val query = “SELECT * FROM someTable t WHERE (ta, tb) IN (VALUES :values)” namedJdbcTemplate.queryForList(query, mapOf(“values” to listOf(listOf(1, 2), listOf(3, 4)))) 我也尝试手动将值转换为字符串,但这也不会让它变得快乐。 namedJdbcTemplate.queryForList(query, […]

Spring NamedParameterJDBCTemplate重用Prepared Statements

我使用Spring NamedParameterJdbcTemplate从表中获取一些值。 出于某种原因,查询在我的Java应用程序中运行速度非常慢,而不是在SQL Management Studio上运行相同的查询。 我还注意到在分析器中,准备好的语句不会被重用。 如果我多次在我的JAVA应用程序中运行相同的查询,我会看到正在执行的不同预处理语句。 因此,不确定为什么语句不会被重用。 性能是否因为我在查询中使用IN子句而变慢? 这是我的示例java代码 StringBuilder vQuery = new StringBuilder(); vQuery.append(” SELECT SUM(Qty) FROM vDemand”); vQuery.append(” WHERE ProductID = :ProductID”); vQuery.append(” AND [Date] >= :StartDate AND [Date] <= :EndDate"); vQuery.append(" AND CustomerID IN ( :CustomerID )"); MapSqlParameterSource vNamedParameters = new MapSqlParameterSource(); vNamedParameters.addValue("ProductID", aProductID); vNamedParameters.addValue("CustomerID", aCustomerlIDs); vNamedParameters.addValue("StartDate", aDate, Types.TIMESTAMP); vNamedParameters.addValue("EndDate", aDate, […]

如何在jdbctemplate中查询列表

我正在使用spring jdbctemplate并运行如下查询: SELECT COLNAME FROM TABLEA GROUP BY COLNAME 没有传递任何命名参数,但是,用户将传递列名COLNAME 。 问题 有没有办法让占位符,比如? 列名? 例如SELECT ? FROM TABLEA GROUP BY ? SELECT ? FROM TABLEA GROUP BY ? 如果我想简单地运行上面的查询并获得List ,最好的方法是什么? 目前我在做: List <Map> data = getJdbcTemplate().queryForList(query); for (Map m : data) System.out.println(m.get(“COLNAME”));

从JdbcTemplate中的ResultSet获取DateTime

在数据库中我的列是TIMESTAMP类型,所以我的类具有类型为Datetime的属性,如下所示: public void setDiscoveryDate(final DateTime discoveryDtTm) { this.discoveryDtTm = discoveryDtTm; } 现在在JdbcTemplate中我想得到它,所以有些代码如下: variant.setDiscoveryDate(rs.getTimestamp(“discovery_dt_tm”)); 哪个不起作用,因为列为结果集的get我找不到返回DateTime的东西,我只看到了getDate或getTime。

什么是Spring Java中的模板类? 他们为什么称为模板? 例如jdbc-template,jms-template等

我是Java的新手。 我只编程了大约一年。 Spring使用模板意味着什么? 在Spring中,有jdbc-templates,jms-templates等。在java中有什么模板类? 它们是一种特殊的设计模式还是什么? 先谢谢你。

我们如何在java中关闭hsqldb数据库

我使用hsqldb作为我的数据库。 我想要我的选择查询,更新查询执行它将关闭数据库。 下面是我需要一个代码的方法,我可以从中手动关闭我的数据库。 private void insertInitData(BasicDataSource dataSource, int lmexAdapterId, int lmsId) { try { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); String lmexPostParam_id = UUID.randomUUID().toString(); String inertQuery = “Insert into lmex_post_param (lmex_post_param_id, param_name, param_value) values (?,?,?)”; String[] baseUrlParam = { lmexPostParam_id, “base_url”, lmexPostingBaseUrl }; jdbcTemplate.update(inertQuery, baseUrlParam); String lmexPostParamId2 = UUID.randomUUID().toString(); String[] postServiceParam = { lmexPostParamId2, “post_service_url”, lmexPostingPostServiceUrl […]

收集所有发出的SQL的最简单方法

出于多种原因,我不想透露(冗长乏味的故事),我需要捕获复杂应用程序与数据库的交互。 该应用程序构建在Spring / JdbcTemplate之上,我需要找到该应用程序发出的所有SQL。 我怎么能以最简单的方式做到这一点? 创建JdbcTemplate的伪模拟实现似乎不合理。 首先,JdbcTemplate是一个类,而不是一个接口。 其次它有一个大的界面,使实施起来很繁琐。 我正在考虑模拟DataSource和Connection以获取所有SQL发送出去,但也许有一种更简单的方法可以做到这一点?

返回一个列表,我已经有了一个rowmapper实现

在我的UserDao中,我想返回一个用户列表。 我已经有一个implements RowMapper的UserRowMapper 。 我怎样才能做到这一点? 我试过了: List rows = getJdbcTemplate().queryforList(“select * from users”); for(Map row : rows) { } 但不知道如何使用我的UserRowMapper来填充User对象并将其插入到我的用户List列表中。 BTW,这是我最好使用的通用列表: List users = new ArrayList(); ?

如何使用PostgreSQL hstore / json和jdbctemplate

有没有办法使用PostgreSQL json / hstore和jdbctemplate? esp查询支持。 例如: hstore: INSERT INTO hstore_test (data) VALUES (‘”key1″=>”value1″, “key2″=>”value2”, “key3″=>”value3″‘) SELECT data -> ‘key4’ FROM hstore_test SELECT item_id, (each(data)).* FROM hstore_test WHERE item_id = 2 为Json insert into jtest (data) values (‘{“k1”: 1, “k2”: “two”}’); select * from jtest where data ->> ‘k2’ = ‘two’;

是否有多个JdbcTemplate实例?

根据我的理解, DataSource和JdbcTemplates都是threadsafe ,因此您可以配置JdbcTemplate的单个实例,然后将此共享引用安全地注入多个DAO(或存储库) 。 DataSource应该是Spring单例,因为它管理连接池。 官方Spring文档JdbcTemplate最佳实践解释了替代方案(手册摘录用斜体,方括号之间的注释: 在Spring配置文件中配置DataSource,然后将共享DataSource beandependency injection到DAO类中; JdbcTemplate是在DataSource的setter中创建的。 [使用XML配置,这会导致多个JdbcTemplate实例,因为在数据源设置器中有new JdbcTemplate(dataSource) ] 使用组件扫描和注释支持dependency injection。 在这种情况下,您使用@Repository注释该类(这使其成为组件扫描的候选者)并使用@Autowired注释DataSource setter方法。 [也是这种情况导致多个JdbcTemplate实例] 如果您正在使用Spring的JdbcDaoSupport类,并且您的各种JDBC支持的DAO类从它扩展,那么您的子类将inheritanceJdbcDaoSupport类中的setDataSource(..)方法。 您可以选择是否inheritance此类。 JdbcDaoSupport类仅为方便起见而提供。 [因为你为每个扩展它的类都有一个JdbcDaoSupport实例,所以对于派生类的每个实例都有一个JdbcTemplate实例(参见JdbcDaoSupport的源代码 )] 但是,稍后的注释会阻止刚刚提出的所有选项: 配置完成后,JdbcTemplate实例就是线程安全的。 如果您的应用程序访问多个数据库(可能需要多个DataSource,以及随后多个不同配置的JdbcTemplates),您可能需要多个JdbcTemplate实例。 换句话说,刚刚提出的所有选项将导致具有多个JdbcTemplate实例(每个DAO一个),并且在文档说明在使用单个数据库时不需要这样做。 我要做的是直接将JdbcTemplate注入需要它的各种DAO,所以我的问题是,这样做是否可以? 而且,您是否也认为Spring参考文档是自相矛盾的? 还是我的误会?