小编Pol*_*let的帖子

不确定如何使用Spring jdbcTemplate和PreparedStatementSetter返回生成的列id值

在重构之前,我使用jdbcTemplate,preparedStatementCreator和GeneratedKeyHolder在数据库中插入一行来存储生成的插入行的id.

    jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder)  
Run Code Online (Sandbox Code Playgroud)

但是,现在我尝试使用我的jdbcTemplate执行更新,但现在使用preparedStatementSetter.我能看到的唯一方法是jdbcTemplate.update(String sql,PreparedStatementSetter),但现在我不知道如何返回生成列的id.

    PreparedStatementSetter pss = new PreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement preparedStatement)
                throws SQLException {
            preparedStatement.setString(1, pupil.getFirstname());
            preparedStatement.setString(2, pupil.getSurname());
            preparedStatement.setString(3, pupil.getGivenName());
            preparedStatement.setDate(4, pupil.getDob());
        }
    };      


    jdbcTemplate.update("INSERT INTO STUDENTS "+ "(FIRSTNAME, SURNAME, GIVEN_NAME, DOB) VALUES (?,?,?,?)",pss);
Run Code Online (Sandbox Code Playgroud)

假设我对prepareStatements的方法是正确的,有谁知道如何返回生成的id的值?

java spring jdbc

5
推荐指数
1
解决办法
3980
查看次数

Scala Set [_] vs Set [Any]

我有以下代码行:

case set: Set[Any] => setFormat[Any].write(set)
Run Code Online (Sandbox Code Playgroud)

但是,编译器会发出警告:

非变量类型参数类型模式中的任何类型scala.collection.Set [Any]未选中,因为它被擦除消除[warn]

很公平.

所以我改变了我的路线:

case set: Set[_] => setFormat[Any].write(set)
Run Code Online (Sandbox Code Playgroud)

现在我收到一个错误:

[错误]发现:scala.collection.Set [_]

[error] required:scala.collection.Set [Any]

Q1.这两者有什么区别?

然后我将我的代码更改为以下内容:

case set: Set[_] => setFormat[Any].write(set.map(s => s))
Run Code Online (Sandbox Code Playgroud)

现在很高兴没有任何错误或警告.

Q2.这为什么有用?

scala

5
推荐指数
1
解决办法
194
查看次数

标签 统计

java ×1

jdbc ×1

scala ×1

spring ×1