嗨,我有一个查询,我从数据库中选择值,我想与所选数据进行比较。我能够创建查询并传入参数,但在访问从查询返回的值时仍然遇到一些问题。有人能告诉我我是否在正确的轨道上,我想我写错了最后两个陈述。
String sql = "SELECT userName, password FROM tblusers WHERE userName = ? AND password = ? ";
Object[] parameters = new Object[] {login.getUserName(), login.getPassword()};
String dbUserName = (String)getJdbcTemplate().queryForObject(
sql, parameters, String.class);
String dbPassword = (String)getJdbcTemplate().queryForObject(
sql, parameters, String.class);
Run Code Online (Sandbox Code Playgroud) 我试图resultsetmeta使用Spring jdbc模板获取数据.如果返回至少一行,它工作正常.
当没有返回行即空时出现问题resultSet.
我已经尝试了很多但仍然坚持相同.如果有任何解决方案,请帮助我.
而且,我ResultSetWrappingSqlRowSetMetaData在春天找到了课.这在我的上下文中有用吗?
谢谢您的帮助.
我是 spring 世界的新手,在上面的代码中我理解查询,但我不明白为什么使用“new MapSqlParameterSource("username" ,username)”?
public boolean exists(String username) {
return jdbc.queryForObject("select count(*) from users where username=:username",
new MapSqlParameterSource("username" ,username),Integer.class)>0; }
Run Code Online (Sandbox Code Playgroud)
使用它的目的是什么?
提前致谢
我一直JdbcTemplate很开心地使用,但是后来我说服了NamedParameterJdbcTemplate。但是到目前为止,有时或一直没有享受到这一点。
可以说我有一个Person类,如下所示:
public class Person implements Serializable {
private int age;
private String name;
private long socialId;
private Gender gender;
private String email;
enum Gender {
MALE, FEMALE
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试插入以下人员列表:
SqlParameterSource[] params
= SqlParameterSourceUtils.createBatch(personList.toArray());
getNamedJdbcTemplate().batchUpdate(insertSql, params);
Run Code Online (Sandbox Code Playgroud)
但是它失败并显示以下消息
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:169)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:169)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:402)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:235)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:166)
at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:65)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:48)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:999)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:989)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
... 41 more
Run Code Online (Sandbox Code Playgroud)
我进行了调试,可以看到在StatementCreatorUtils类中,如果方法中为Enum类型,它将始终失败。
private …Run Code Online (Sandbox Code Playgroud) 我指的是这篇文章,其中我们可以使用 Spring Framework 中的 AbstractRoutingDataSource 来动态更改应用程序使用的数据源。我正在使用 Mybatis (3.3.0) 和 Spring (4.1.6.RELEASE)。如果从主数据库获取数据时发生异常,我想切换到备份数据库。在这个例子中,我使用了 hsql 和 mysql db。
路由数据源:
public class RoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getTargetDataSource();
}
}
Run Code Online (Sandbox Code Playgroud)
数据源上下文持有者:
public class DataSourceContextHolder {
private static final ThreadLocal<DataSourceEnum> contextHolder = new ThreadLocal<DataSourceEnum>();
public static void setTargetDataSource(DataSourceEnum targetDataSource) {
contextHolder.set(targetDataSource);
}
public static DataSourceEnum getTargetDataSource() {
return (DataSourceEnum) contextHolder.get();
}
public static void resetDefaultDataSource() {
contextHolder.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
应用数据配置:
@Configuration
@MapperScan(basePackages = "com.sample.mapper")
@ComponentScan("com.sample.config") …Run Code Online (Sandbox Code Playgroud) 根据这个文件:
29.1.1嵌入式数据库支持
Spring Boot可以自动配置嵌入式H2,HSQL和Derby数据库.您不需要提供任何连接URL,只需包含对要使用的嵌入式数据库的构建依赖关系.
和
29.1.2连接到生产数据库
还可以使用池化DataSource自动配置生产数据库连接.
DataSource配置由spring.datasource.*中的外部配置属性控制.例如,您可以在application.properties中声明以下部分:
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)
[Tip]您通常不需要指定driver-class-name,因为Spring引导可以从url中为大多数数据库推断出它.
[注意]对于要创建的池化DataSource,我们需要能够验证有效的Driver类是否可用,因此我们在执行任何操作之前检查它.即如果你设置 spring.datasource.driver-class-name = com.mysql.jdbc.Driver,那么该类必须是可加载的.
如果我将以下内容放在application.properties文件中,该怎么办:
spring.datasource.url=jdbc:hsqldb:file:db/organization-db
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
Run Code Online (Sandbox Code Playgroud)
Spring Boot会自动配置池数据源吗,因为我指定了spring.datasource.driver-class-name?
或者它只是为没有连接池的嵌入式数据库驱动程序创建数据源?
如何确认Spring Boot是否正在使用连接池?
我想知道如何在我的情况下正确使用 jdbc。
该saveLinkHistory列是 mysql 中的 bit(1) 类型。
public boolean getIsSavedLinkHistory(String name) {
String sql = "select saveLinkHistory from users where name = ?";
Boolean isTracked = jdbcTemplateObject.queryForObject(sql, new Object[] { name }, Boolean.class);
return isTracked;
}
Run Code Online (Sandbox Code Playgroud)
查询运行良好,直到出现错误,Incorrect result size: expected 1, actual 0因为有时name不存在,该queryForObject方法期望我总是得到 1 行作为结果。
我该如何处理这种情况,只是抛出一个异常,说“名称”不存在?顺便说一句,Boolean这里可以吗?因为我之前没有看到这样的代码。
我需要将参数传递给我的 RowMapper,因为我需要将时区应用于日期字段。目前这是我的代码:
询问:
@Override
public List<GCProjectMember> selectGCMembers(Long jobId,String timezone) {
DataSource dataSource = DataSourceBeanBuilder.getClientDataSource(ClientContextHolder.getCustomerType(),
this.getClass().getName());
this.setDataSource(dataSource);
List<GCProjectMember> membersList = getJdbcTemplate().query(SELECT_GC_MEMBERS, new Object[] { jobId },
new GCProjectMemberRowMapper());
if (membersList.size() > 0) {
return membersList;
} else {
return Collections.emptyList();
}
}
Run Code Online (Sandbox Code Playgroud)
行映射器:
public class GCProjectMemberRowMapper extends BasicRowMapper implements RowMapper<GCProjectMember> {
@Override
public GCProjectMember mapRow(ResultSet rs, int rowNum) throws SQLException {
GCProjectMember member = new GCProjectMember();
...
if (hasColumn(rs, "sign_date")) {
member.setSignDate(rs.getTimestamp("sign_date"));
}
....
return member;
}
}
Run Code Online (Sandbox Code Playgroud)
如何将时区从查询传递到行映射器?
I have a SpringBoot app, where I use jdbcTemplate to insert a row to a mssql
int numOfRowsAffected = remoteJdbcTemplate.update("insert into dbo.[ELCOR Resource Time Registr_] "
+ "( [Entry No_], [Record ID], [Posting Date], [Resource No_], [Job No_], [Work Type], [Quantity], [Unit of Measure], [Description], [Company Name], [Created Date-Time], [Status] ) "
+ " VALUES (?,CONVERT(varbinary,?),?,?,?,?,?,?,?,?,?,?);",
ELCORResourceTimeRegistr.getEntryNo(),
ELCORResourceTimeRegistr.getEntryNo()),
ELCORResourceTimeRegistr.getPostingDate(),
ELCORResourceTimeRegistr.getResourceNo(),
jobNo,
ELCORResourceTimeRegistr.getWorkType(),
ELCORResourceTimeRegistr.getQuantity(),
ELCORResourceTimeRegistr.getUnitOfMeasure(),
ELCORResourceTimeRegistr.getDescription(),
ELCORResourceTimeRegistr.getCompanyName(),
ELCORResourceTimeRegistr.getCreatedDate(),
0);
Run Code Online (Sandbox Code Playgroud)
the value of ELCORResourceTimeRegistr.getEntryNo() is a String with the value 0x00173672
but …
在启动具有外部数据库连接性的Spring Boot应用程序时,Spring抛出以下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactoryBuilder' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactoryBuilder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' …Run Code Online (Sandbox Code Playgroud) spring-jdbc ×10
jdbc ×5
spring ×5
java ×4
jdbctemplate ×3
spring-boot ×2
sql ×2
mssql-jdbc ×1
mybatis ×1
mysql ×1
oracle ×1
resultset ×1
spring-mvc ×1
sql-server ×1