Tag: jdbctemplate

如果B出错,请回退A. spring boot,jdbctemplate

我有一个方法’databaseChanges’,它以迭代的方式调用2个操作:A,B。 ‘A’首先,’B’最后。 ‘A’和’B’可以是我的持久存储,Oracle Database 11g中的U pdate D eletefunction。 比方说, ‘A’更新表Users中的记录,属性zip,其中id = 1。 ‘B’在表爱好中插入记录。 场景:调用了databaseChanges方法,’A’操作并更新记录。 ‘B’操作并尝试插入记录,发生某种情况,抛出exception,exception是冒充dbChanges方法。 预期: ‘A’和’B’没有任何改变。 “A”所做的更新将会回滚。 “B”没有改变任何东西,嗯……有一个例外。 实际: ‘A’更新似乎没有回滚。 “B”没有改变任何东西,嗯……有一个例外。 一些代码 如果我有连接,我会做类似的事情: private void databaseChanges(Connection conn) { try { conn.setAutoCommit(false); A(); //update. B(); //insert conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (Exception ei) { //logs… } } finally { […]

使用带有JDBCTemplate的预准备语句

我正在使用JDBC模板,并希望使用预准备语句从数据库中读取。 我在.csv文件中迭代多行,并在每一行上执行一些带有相应值的SQL select查询。 我想加快从数据库中读取数据,但我不知道如何让JDBC模板与预处理语句一起使用。 有PreparedStatementCreator和PreparedStatementSetter 。 在此示例中 ,它们都是使用匿名内部类创建的。 但是在PreparedStatementSetter类中,我无法访问我想在预准备语句中设置的值。 因为我正在迭代.csv文件,所以我不能将它们硬编码为String,因为我不知道它们。 我也无法将它们传递给PreparedStatementSetter,因为构造函数没有参数。 将我的价值观设定为最终值也是愚蠢的。 我习惯于创建准备好的语句非常简单。 就像是 PreparedStatement updateSales = con.prepareStatement( “UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? “); updateSales.setInt(1, 75); updateSales.setString(2, “Colombian”); updateSales.executeUpdate(): 就像在这个Java教程中一样 。

在RowMapper中使用查询

在java中我会做类似下面的事情来迭代resultset并形成查询, public Map<String, List> fun(){ Map<String, List> map = new TreeMap<String, List>(); LinkedHashSet set = new LinkedHashSet(); String sql = “select distinct(column) from table where conditions orderby column “; ResultSet rslt = stmt.executeQuery(sql); while (rslt.next()) { al.add(rslt.getString(1)); } for (String s : al) { List list = new ArrayList(); String sql2 = “select * from […]

JdbcTemplate IN子句用于String元素

我使用NamedParameterJdbcTemplate表示Clause元素,其中一个似乎是List 。 JdbcTemplate替换它们?,?,?…(列表大小)但是对于带有List的IN子句,它必须是’?’,’?’…. 有没有解决的办法?

ResourcePool无法从其主工厂或源获取资源

我正在尝试使用jdbcTemplate连接到Java中的数据库,我得到以下错误。 我用谷歌搜索了很长时间,我找到的所有解决方案都没有解决我的问题。 我尝试了几个不同的数据库(SQLServer和MySQL),但没有一个工作。 SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/promotion-handler-admin] threw exception [Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!] with root cause com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) […]

unit testing使用Spring JDBC的DAO类

我有几个DAO对象用于从数据库中检索信息,我真的想为它们编写一些自动化测试,但我很难弄清楚如何去做。 我正在使用Spring的JdbcTemplate运行实际查询(通过JdbcTemplate准备语句)并将结果映射到模型对象(通过RowMapper类)。 如果我要编写unit testing,我不确定如何/应该模拟对象。 例如,由于只有读取,我会使用实际的数据库连接而不是模拟jdbcTemplate,但我不确定是否正确。 这是批次中最简单的DAO的(简化)代码: /** * Implementation of the {@link BusinessSegmentDAO} interface using JDBC. */ public class GPLBusinessSegmentDAO implements BusinessSegmentDAO { private JdbcTemplate jdbcTemplate; private static class BusinessSegmentRowMapper implements RowMapper { public BusinessSegment mapRow(ResultSet rs, int arg1) throws SQLException { try { return new BusinessSegment(rs.getString(…)); } catch (SQLException e) { return null; } […]

使用JdbcTemplate插入多行

如何使用在mySQL上运行的JdbcTemplate以可伸缩的方式执行以下SQL。 在这种情况下,可扩展意味着: 服务器上只执行一条SQL语句 它适用于任意数量的行。 这是声明: INSERT INTO myTable (foo, bar) VALUES (“asdf”, “asdf”), (“qwer”, “qwer”) 假设我有一个包含foo和bar字段的POJO列表。 我意识到我可以迭代列表并执行: jdbcTemplate.update(“INSERT INTO myTable(foo, bar) VALUES (?, ?)”, paramMap) 但这并不能完成第一个标准。 我相信我也可以执行: jdbcTemplate.batchUpdate(“INSERT INTO myTable(foo, bar) VALUES (?, ?)”, paramMapArray) 但据我所知,这只会编译SQL一次并多次执行,再次失败第一个标准。 似乎通过这两个标准的最终可能性是简单地使用StringBuffer自己构建SQL,但我想避免这种情况。

Spring Boot中的多个DataSource和JdbcTemplate(> 1.1.0)

我想在Spring Boot项目中注入一个特定的JdbcTemplate 。 我尝试按照此示例进行多个DataSource配置: http : //spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-now 我的代码编译并运行,但只考虑带有@Primary注释的DataSource,无论我在SqlService类中放置什么@Qualifier 。 我的相关代码如下: DatabaseConfig.java : @Configuration public class DatabaseConfig { @Bean(name = “dsSlave”) @ConfigurationProperties(prefix=”spring.mysql_slave”) public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = “dsMaster”) @Primary @ConfigurationProperties(prefix=”spring.mysql_master”) public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = “jdbcSlave”) @Autowired @Qualifier(“dsSlave”) public JdbcTemplate slaveJdbcTemplate(DataSource dsSlave) { return new JdbcTemplate(dsSlave); } @Bean(name […]

多个一对多关系ResultSetExtractor

假设我有一个具有两个不同的一对多关系的对象。 很像: Customer 1M Brands和Customer 1M Orders 让我们说我的对象Customer有两个与这两个对象相关的列表。 我已经阅读了这个例子: http : //forum.springsource.org/showthread.php?50616-rowmapper -with-one-to-many- query ,它解释了如何使用单一的一对多关系来完成它。 为方便起见,这里是ResultSetExtractor覆盖: private class MyObjectExtractor implements ResultSetExtractor{ public Object extractData(ResultSet rs) throws SQLException, DataAccessException { Map map = new HashMap(); MyObject myObject = null; while (rs.next()) { Integer id = rs.getInt(“ID); myObject = map.get(id); if(myObject == null){ String description = rs,getString(“Description”); […]

如何使用JDBCTemplate.queryForMap获取Map数据

如何从JDBCTemplate.queryForMap()加载数据,它返回Map接口。如何在map内部维护查询数据。我试图加载但是我得到了以下exception,即org.springframework.dao.IncorrectResultSizeDataAccessException:结果不正确 码:- public List getUserInfoByAlll() { List profilelist=new ArrayList(); Map m=new HashMap(); m=this.jdbctemplate.queryForMap(“SELECT userid,username FROM USER”); Set s=m.keySet(); Iterator it=s.iterator(); while(it.hasNext()){ String its=(String)it.next(); Object ob=(Object)m.get(its); log.info(“UserDAOImpl::getUserListSize()”+ob); } return profilelist; } Plz帮助我