标签: spring-jdbc

Spring JDBC获取从查询返回的值

嗨,我有一个查询,我从数据库中选择值,我想与所选数据进行比较。我能够创建查询并传入参数,但在访问从查询返回的值时仍然遇到一些问题。有人能告诉我我是否在正确的轨道上,我想我写错了最后两个陈述。

    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)

java sql spring jdbc spring-jdbc

2
推荐指数
1
解决办法
1万
查看次数

从Spring JdbcTemplate中提取ResultSetMetaData

我试图resultsetmeta使用Spring jdbc模板获取数据.如果返回至少一行,它工作正常.

当没有返回行即空时出现问题resultSet.

我已经尝试了很多但仍然坚持相同.如果有任何解决方案,请帮助我.

而且,我ResultSetWrappingSqlRowSetMetaData在春天找到了课.这在我的上下文中有用吗?

谢谢您的帮助.

resultset spring-jdbc

2
推荐指数
1
解决办法
2万
查看次数

为什么我们使用 MapSqlParameterSource

我是 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)

使用它的目的是什么?

提前致谢

spring spring-jdbc

2
推荐指数
1
解决办法
1万
查看次数

带有枚举的JDBC Spring 4 NamedParameterJdbcTemplate

我一直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 spring-jdbc

2
推荐指数
1
解决办法
3781
查看次数

动态数据源路由 - 数据源路由器未初始化

我指的是这篇文章,其中我们可以使用 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)

java spring spring-jdbc mybatis spring-mybatis

2
推荐指数
1
解决办法
4320
查看次数

Spring-boot + JDBC + HSQLDB:如何验证Spring Boot是否使用连接池?

根据这个文件:

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 spring-mvc spring-jdbc embedded-database spring-boot

2
推荐指数
1
解决办法
8233
查看次数

如果 jdbc.queryForObject 不返回行,如何处理它

我想知道如何在我的情况下正确使用 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这里可以吗?因为我之前没有看到这样的代码。

mysql sql jdbc spring-jdbc jdbctemplate

2
推荐指数
2
解决办法
9471
查看次数

将参数传递给 mapRow

我需要将参数传递给我的 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)

如何将时区从查询传递到行映射器?

java jdbc spring-jdbc jdbctemplate

2
推荐指数
1
解决办法
1918
查看次数

insert varbinary value from hex literal in Microsoft SQL Server

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 …

sql-server jdbc spring-jdbc jdbctemplate mssql-jdbc

2
推荐指数
1
解决办法
1903
查看次数

OracleDriver不接受jdbcUrl jdbc:oracle:thin @ localhost:1521 / orcl

在启动具有外部数据库连接性的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)

java oracle spring spring-jdbc spring-boot

2
推荐指数
1
解决办法
4881
查看次数