Tag: jdbctemplate

子spring对象和它的超级java.util对象之间的显式类型转换

在spring我使用的是jdbcTemplate,但是在查询List时遇到了返回Linkedcaseinsensitivemap的问题,在执行以下操作时我仍然得到spring linkedcaseinsensitivemap,即使我将它转换为java util List并定义左侧作为java.util.List的赋值。 首先,这怎么可能? final java.util.List<Map> list = (java.util.List<Map>) jdbc .queryForList(“SELECT * FROM customer”); 那么,如何实现这种类型的升级呢? 无需声明第二个列表为它分配内存,然后手动将对象放入java.util.List? 由于LinkedCaseInsensitive是java对象的子类,因此我很难弄清楚如何转换为超级对象,即java List。 如何实现这一目标至关重要。 因为目前还没有办法知道哪些经纪人会使用我们的AMQ,目标是严格保持jms对象,所以我无法开始发送弹簧对象,因为jms应该是我们的标准,也请注意我没有实现AMQProtocol的选项,我需要发送基本的java对象, 由于已建议序列化为JSON,我将解释为什么它在这种情况下不起作用,为什么我需要将“按原样”发送给接收器,因为它们将把它放入Notes文档中。 for (int i = 1; i <= metadata.getColumnCount(); i++) { String columnName = metadata.getColumnName(i); Object values = sqlConnection.getRset().getObject(i); doc.replaceItemValue(columnName, values); } 那么,人们如何才能更好地完成这项工作呢? 请提前帮助谢谢!

使用Mockito模拟JdbcTemplate的DataSource

我正在尝试在Spring项目中测试一个类。 我想在测试类和dao类中进行尽可能多的更改,这样我就不必因为更改而重新测试所有类型的东西。 我正在使用的类有一个JdbcTemplate template类变量,该变量由以下实例化: setJdbcTemplate(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } 我想测试的方法使template.query()运行定义的SQL查询并将结果返回到列表。 我在我的测试用例中创建了以下内容,但我不确定如何使用它。 我可以使用Mockito使以下代码返回某个字符串列表吗? DataSource mockedDataSrc = Mockito.mock(DataSource.class); customerClassDao.setJdbcTemplate(mockedDataSrc); 我可以以某种方式使用when或another命令来设置我想要返回到JdbcTemplate的.query调用的内容吗?

Spring启动 – 如何配置多个数据源

我正在尝试使用Spring启动设置多个数据源(MySql,Postgres和Oracle)。 我没有使用JPA。 使用JdbcTemplate进行设置。 我试过设置这样的东西。 application.properties spring.datasource.test-oracle.username=test-oracle spring.datasource.test-oracle.password=test-password spring.datasource.test-oracle.url=dburl/test spring.datasource.test-oracle.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.int-oracle.username=int-oracle spring.datasource.int-oracle.password=int-password spring.datasource.int-oracle.url=dburl/int spring.datasource.int-oracle.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.d.int-mysql.username=user spring.datasource.d.int-mysql.password=password spring.datasource.d.int-mysql.url=dburl/d spring.datasource.d.int-mysql.driver-class-name=com.mysql.jdbc.Driver spring.datasource.m.int-mysql.username=user spring.datasource.m.int-mysql.password=password spring.datasource.m.int-mysql.url=dburl/m spring.datasource.m.int-mysql.driver-class-name=com.mysql.jdbc.Driver spring.datasource.d.test-mysql.username=user spring.datasource.d.test-mysql.password=password spring.datasource.d.test-mysql.url=dburl/d spring.datasource.d.test-mysql.driver-class-name=com.mysql.jdbc.Driver spring.datasource.m.test-mysql.username=user spring.datasource.m.test-mysql.password=password spring.datasource.m.test-mysql.url=dburl/m spring.datasource.m.test-mysql.driver-class-name=com.mysql.jdbc.Driver MySqlConfiguration.java @Configuration public class MySqlConfiguration() { @Bean(name = “dMySql”) @ConfigurationProperties(prefix = “spring.datasource.d.int-mysql”) public DataSource mysqlDrupalDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = “dJdbc”) public JdbcTemplate drupalJdbcTemplate(DataSource dMySql) […]

当我通过jdbctemplate在表中插入记录时,如何获取自动增加的id

private void insertIntoMyTable (Myclass m) { String query = “INSERT INTO MYTABLE (NAME) VALUES (?)”; jdbcTemplate.update(query, m.getName()); } 当上面的查询插入记录时,表中的ID列会自动增量。 有没有办法在插入时获得此自动递增的ID。 所以在这个例子中,我的方法的返回值将是int

Spring JdbcTemplate – 插入blob并返回生成的密钥

从Spring JDBC文档中,我知道如何使用JdbcTemplate插入blob final File blobIn = new File(“spring2004.jpg”); final InputStream blobIs = new FileInputStream(blobIn); jdbcTemplate.execute( “INSERT INTO lob_table (id, a_blob) VALUES (?, ?)”, new AbstractLobCreatingPreparedStatementCallback(lobhandler) { protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException { ps.setLong(1, 1L); lobCreator.setBlobAsBinaryStream(ps, 2, blobIs, (int)blobIn.length()); } } ); blobIs.close(); 以及如何检索新插入行的生成密钥 : KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update( new PreparedStatementCreator() […]

Spring的JdbcTemplate和Transactions

使用JdbcTemplate时,是否需要显式配置事务? 我的代码布局如下所示: 我将有一个UserDao将注入我的UserService,然后我的控制器将调用我的UserService中的方法。 我希望尽可能简化事务,并且我不需要多个数据库调用来跨越事务。 默认情况下,我是否必须在配置文件中执行任何操作或在任何地方使用@Transaction注释? 现在说在我的控制器中我需要对我的userService和accountService进行2次调用,我能否以某种方式明确地将其包装在事务中? userService.updateUser(user); accountService.updateXXX(…);

jdbcTemplate.queryForList的返回类型(sql,object,classType)

我正在使用jdbcTemplate.queryForList以下列方式执行命名查询: List conversations = jdbcTemplate.queryForList( SELECT_ALL_CONVERSATIONS_SQL_FULL, new Object[] {userId, dateFrom, dateTo}); SQL查询是: private final String SELECT_ALL_CONVERSATIONS_SQL_FULL = “select conversation.conversationID, conversation.room, ” + “conversation.isExternal, conversation.startDate, ” + “conversation.lastActivity, conversation.messageCount ” + “from openfire.ofconversation conversation ” + “WHERE conversation.conversationid IN ” + “(SELECT conversation.conversationID ” + “FROM openfire.ofconversation conversation, ” + “openfire.ofconparticipant participant ” + “WHERE conversation.conversationID […]

JDBCTemplate使用BeanPropertyRowMapper设置嵌套的POJO

给出以下示例POJO :(假设所有属性的Getters和Setter) class User { String user_name; String display_name; } class Message { String title; String question; User user; } 可以轻松查询数据库(在我的情况下为postgres)并使用BeanPropertyRowMapper填充Message类列表,其中db字段与POJO中的属性匹配:(假设DB表具有POJO属性的对应字段)。 NamedParameterDatbase.query(“SELECT * FROM message”, new BeanPropertyRowMapper(Message.class)); 我想知道 – 是否有一种方便的方法来构造单个查询和/或创建行映射器,以便在消息中填充内部“用户”POJO的属性。 也就是说,查询中每个结果行的一些语法魔术: SELECT * FROM message, user WHERE user_id = message_id 生成一个Message列表,其中填充了关联的User 使用案例: 最终,这些类作为Spring Controller中的序列化对象传回,这些类是嵌套的,因此生成的JSON / XML具有不错的结构。 目前,通过执行两个查询并在循环中手动设置每个消息的用户属性来解决此问题。 可用,但我想一个更优雅的方式应该是可能的。 更新:使用解决方案 – 感谢@Will Keeling使用自定义行映射器获得答案的灵感 – 我的解决方案添加了bean属性映射,以便自动执行字段分配。 需要注意的是构造查询,以便相关的表名称为前缀(但是没有标准约定来执行此操作,因此以编程方式构建查询): […]

使用预准备语句和变量将Java中的Order By与JDBC驱动程序绑定

我在用着 jdbcTemplate与mySQL数据库建立JDBC连接 准备好的语句尽可能地保护自己免受SQL注入攻击 需要接受来自用户的请求,以对十几个不同列中的任何一列进行数据排序 以下声明 jdbcTemplate.query(“SELECT * FROM TABLE1 ORDER BY ? ?”, colName, sortOrder); 当然这不起作用,因为变量绑定不应该仅为查询中的表达式的参数值指定列名。 那么……人们如何解决这个问题呢? 只是在Java代码中进行排序似乎是一个简单的解决方案,但是因为我得到一个变量字符串供列排序,一个变量告诉我排序顺序….这是一个丑陋的比较器条件数量盖。 这似乎应该是解决它的常见模式的常见问题……

如何使用JDBC将数据从文件复制到PostgreSQL?

我想使用JDBC将数据从文件复制到PostgreSQL DB。 我正在使用JDBC语句对象将文件复制到DB中。 这很慢。 我才知道我们也可以使用copy out命令将文件复制到DB。 但是,我如何处理JDBC。 即使是在JDBC中具有复制示例的良好参考资料也会有所帮助。 PS:提前谢谢