使用Spring JdbcTemplate
我执行这样的select语句。
JdbcTemplate jTemplate = container.getBean("jt", JdbcTemplate.class);
String query = "select *from TB_CUMM_DEAL_CCY_DET where REF_NUM ='1452454'";
jTemplate.query(query, new MyResultSetExtractor());
在此代码中jTemplate.query(query, new MyResultSetExtractor());
如何执行。请解释一下。
谢谢。
MyResultSetExtractor.java:
public class MyResultSetExtractor implements ResultSetExtractor {
@Override
public Object extractData(ResultSet rs) throws SQLException,
DataAccessException {
String refNo = null;
while(rs.next()) {
refNo = rs.getString(2);
System.out.println(refNo);
}
return refNo;
}
}
答案 0 :(得分:0)
ResultSetExtractor将只返回整个ResultSet的一个结果对象。这是与RowMappe的主要区别,RowMappe每行检索一个对象。
你在ResultSetExtractor中做的是迭代每一行(rs.next())。在那里,你必须创建代表整行的对象。为此,您有get方法提供一种特定的数据类型,并且还接收一个指示列号的int或一个指示列名的String作为参数。
让我们举一个简单的例子。我们在一个名为Person的数据库中有一个表,它有两个String列:name和surname。
您的对象是:
var yourEntity = new YourEntity() { Id = id, DateProp = dateTime };
using (var db = new MyEfContextName())
{
db.YourEntities.Attach(yourEntity);
db.Entry(yourEntity).Property(x => x.DateProp).IsModified = true;
db.Configuration.ValidateOnSaveEnabled = false;
db.SaveChanges();
}
您的ResultSetExctractor:
public class Person {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
更简单的替代方案,使用RowMapper:
public class MyResultSetExtractor implements ResultSetExtractor<List<Person>> {
@Override
public List<Person> extractData(ResultSet rs) throws SQLException,
DataAccessException {
List<Person> result = new ArrayList<>();
while(rs.next()) {
Person person = new Person();
person.setName(rs.getString(1));
person.setSurname(rs.getString("surname"));
result.add(person);
}
return result;
}
}