Set, int)来把JDBC ResultSet的每一行转换成对象。
在所有的SqlQuery实现中,这个类是最常使用并且也是最容易使用的。
下面是一个自定义查询的简单例子,它把customer表中的数据映射成叫做Customer的Java类。
private class CustomerMappingQuery extends MappingSqlQuery {
public CustomerMappingQuery(DataSource ds) {
super(ds, "SELECT id, name FROM customer WHERE id = ?");
super.declareParameter(new SqlParameter("id", Types.INTEGER));
compile();
}
public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
Customer cust = new Customer();
cust.setId((Integer) rs.getObject("id"));
cust.setName(rs.getString("name"));
return cust;
}
}
使用JDBC进行数据访问(5)
时间:2011-03-14
我们为customer查询提供一个构建方法,它只有数据源这一个参数。 在构建方法中,我们调用超类的构建方法,并将数据源和将要用来查询取得数据的SQL作为参数。 因为这个SQL将被用来建立PreparedStatement,所以它可以包含?来绑定执行时会得到的参数。 每一个参数必须通过declareParameter方法并传递给它一个SqlParameter来声明。 SqlParameter有一个名字和一个在java.sql.Types定义的JDBC类型。 在所有的参数都定义完后,我们调用compile方法建立随后会执行的PreparedStatement。
我们来看一段代码,来实例化这个自定义查询对象并执行:
public Customer getCustomer(Integer id) {
CustomerMappingQuery custQry = new CustomerMappingQuery(dataSource);
Object[] parms = new Object[1];
parms[0] = id;
List customers = custQry.execute(parms);
if (customers.size() > 0)
return (Customer) customers.get(0);
else
return null;
}
在例子中的这个方法通过一个参数id得到customer。在建立了CustomerMappingQuery 类的一个实例后,我们再创建一个数组,用来放置所有需要传递的参数。 在这个例子中只有一个Integer的参数需要传递。 现在我们使用这个数组执行查询,我们会得到一个List包含着Customer对象, 它对应查询返回结果的每一行。在这个例子中如果有匹配的话,只会有一个实体。
SqlUpdate
这个RdbmsOperation子类表示一个SQL更新操作。就像查询一样, 更新对象是可重用的。和所有的RdbmsOperation对象一样,更新可以有参数并定义在SQL中。
类似于查询对象中的execute()方法,这个类提供很多update()的方法。
这个类是具体的。通过SQL设定和参数声明,它可以很容易的参数化,虽然他也可以子例化 (例如增加自定义方法)。
import java.sql.Types;
import javax.sql.DataSource;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlUpdate;
public class UpdateCreditRating extends SqlUpdate {
public UpdateCreditRating(DataSource ds) {
setDataSource(ds);
setSql("update customer set credit_rating = ? where id = ?");
declareParameter(new SqlParameter(Types.NUMERIC));
declareParameter(new SqlParameter(Types.NUMERIC));
compile();
}
/**
* @param id for the Customer to be updated
* @param rating the new value for credit rating
* @return number of rows updated
*/
public int run(int id, int rating) {
Object[] params =
new Object[] {
new Integer(rating),
new Integer(id)};
return update(params);
}
}
使用JDBC进行数据访问(6)
时间:2011-03-14
StoredProcedure
这是RDBMS存储过程的对象抽象的超类。它是一个抽象类,它的 |