使用JdbcTemplate的execute()方法执行SQL语句 :
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");
2、如果是UPDATE或INSERT,可以用update()方法。
jdbcTemplate.update("INSERT INTO USER VALUES('"
+ user.getId() + "', '"
+ user.getName() + "', '"
+ user.getSex() + "', '"
+ user.getAge() + "')");
jdbcTemplate.update("INSERT INTO USER VALUES('"
+ user.getId() + "', '"
+ user.getName() + "', '"
+ user.getSex() + "', '"
+ user.getAge() + "')");
3、带参数的更新
jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});
jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});
4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);
String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
Iterator it = rows.iterator();
while(it.hasNext()) {
Map userMap = (Map) it.next();
System.out.print(userMap.get("user_id") + "\t");
System.out.print(userMap.get("name") + "\t");
System.out.print(userMap.get("sex") + "\t");
System.out.println(userMap.get("age") + "\t");
}
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
Iterator it = rows.iterator();
while(it.hasNext()) {
Map userMap = (Map) it.next();
System.out.print(userMap.get("user_id") + "\t");
System.out.print(userMap.get("name") + "\t");
System.out.print(userMap.get("sex") + "\t");
System.out.println(userMap.get("age") + "\t");
}
JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。
JDBC的PreparedStatement
final String id = user.getId();
final String name = user.getName();
final String sex = user.getSex() + "";
final int age = user.getAge();
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, id);
ps.setString(2, name);
ps.setString(3, sex);
ps.setInt(4, age);
}
});
final String id = user.getId();
final String name = user.getName();
final String sex = user.getSex() + "";
final int age = user.getAge();
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, id);
ps.setString(2, name);
ps.setString(3, sex);
ps.setInt(4, age);
}
});
final User user = new User();
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",
new Object[] {id},
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
user.setId(rs.getString("user_id"));
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex").charAt(0));
user.setAge(rs.getInt("age"));
}
});
final User user = new User();
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",
new Object[] {id},
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
user.setId(rs.getString("user_id"));
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex").charAt(0));
user.setAge(rs.getInt("age"));
}
});
class UserRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getString("user_id"));
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex").charAt(0));
user.setAge(rs.getInt("age"));
return user;
}
}
public List findAllByRowMapperResultReader() {
String sql = "SELECT * FROM USER";
return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
}
class UserRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getString("user_id"));
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex").charAt(0));
user.setAge(rs.getInt("age"));
return user;
}
}
public List findAllByRowMapperResultReader() {
String sql = "SELECT * FROM USER";
return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
}
在getUser(id)里面使用UserRowMapper
public User getUser(final String id) throws DataAccessException {
String sql = "SELECT * FROM USER WHERE user_id=?";
final Object[] params = new Object[] { id };
List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));
return (User) list.get(0);
}
public User getUser(final String id) throws DataAccessException {
String sql = "SELECT * FROM USER WHERE user_id=?";
final Object[] params = new Object[] { id };
List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));
return (User) list.get(0);
}
网上收集
org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL 不能于Object[]一起用
Java代码
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement(sql);
}
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement(sql);
}
1.增删改
org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource)
template.update("insert into web_person values(?,?,?)",Object[]);
template.update("insert into web_person values(?,?,?)",Object[]);
或
template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(index++,3);
});
template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(index++,3);
});
org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(index++,3);
}
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(index++,3);
}
2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
org.springframework.jdbc.core.RowMapper 记录映射接口 处理结果集
public Object mapRow(ResultSet rs, int arg1) throws SQLException { int表当前行数
person.setId(rs.getInt("id"));
}
List template.query("select * from web_person where id=?",Object[],RowMapper);
public Object mapRow(ResultSet rs, int arg1) throws SQLException { int表当前行数
person.setId(rs.getInt("id"));
}
List template.query("select * from web_person where id=?",Object[],RowMapper);
org.springframework.jdbc.core.RowCallbackHandler 记录回调管理器接口 处理结果集
template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException {
person.setId(rs.getInt("id"));
});
分享到:
相关推荐
Spring的JdbcTemplate是Spring框架为简化JDBC操作而设计的一个工具类库,它极大地降低了数据库访问的复杂性,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据库连接管理和SQL语句的执行。JdbcTemplate通过一...
JdbcTemplate是Spring框架中的一个核心组件,主要用于简化Java应用程序与数据库之间的交互。...在实际项目中,根据需求选择合适的方法进行数据访问,结合良好的文档资料,能够有效地提升开发质量和项目进度。
本学习资料包含了Spring与Hibernate、JDBC的整合应用,这些都是Java后端开发的重要技术栈。 首先,让我们深入理解Spring框架。Spring的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:这是Spring最...
本资源“spring-jdbc.rar”包含的资料旨在帮助开发者理解并掌握Spring JDBC的基本原理和核心功能,从而在实际开发中更加高效地运用这一强大的工具。 一、Spring JDBC的概述 Spring JDBC通过一系列的抽象和模板类,...
3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Java+...
在本压缩包中,我们很可能会找到关于如何配置和使用Spring JDBC的相关资料。 1. **Spring JDBC概述** Spring JDBC的核心是`JdbcTemplate`和`SimpleJdbcTemplate`,这两个模板类极大地简化了数据库访问。它们提供了...
由于压缩包文件名称列表仅给出了"ch02",这可能是资料的章节编号或者目录结构,无法提供更具体的信息。如果"ch02"包含了相关源码或示例,那么它可能涵盖了上述JDBC数据访问的部分实践内容,如配置示例、使用示例或...
3. 使用Spring的JdbcTemplate或MyBatis等数据访问工具获取需要的数据。 4. 将数据转换为XML,然后用XSLT转换为XSL-FO格式。 5. 调用FOP API,将XSL-FO转换为所需的输出格式,如PDF。 6. 可能会涉及到文件的存储或...
标题中的“Spring技术内幕 学习笔记”表明这是一份关于深入理解Spring框架核心机制的资料集合,主要关注Spring框架的内部工作原理和高级用法。描述中的“NULL”没有提供额外信息,但我们可以通过标签“源码”和...
- Spring 作为一站式框架,提供了诸如 SpringMVC(Web 层)、Service 层的依赖注入以及 DAO 层的 JdbcTemplate 和与其他 ORM 框架(如 Hibernate)的集成。 1.1.2 Spring 的版本与目录结构 - Spring 有多个版本,如...
在本学习资料中,我们将深入探讨Spring MVC 3,这是一个广泛使用的版本,提供了许多改进和新特性。 首先,Spring MVC 3 提供了增强的注解支持,这使得开发者可以更方便地配置控制器和方法。`@Controller` 注解用于...
"Java-e-Jdbc-formacao-spring"可能是一个关于如何在Spring框架中使用Java Database Connectivity(JDBC)的培训或教程资料。Spring框架提供了对JDBC的强大支持,简化了数据库操作,并提供了事务管理、数据源配置...
8. **使用 JdbcTemplate 保存数据**:JdbcTemplate 是 Spring 提供的轻量级数据库访问工具,它可以更直接地操作 SQL。学习如何使用 JdbcTemplate 执行 SQL 语句,处理批量操作和事务控制。 9. **常用配置**:Spring...
Spring Boot摒弃了传统的XML配置,转而采用自动化配置和Java配置,大大减少了繁琐的代码编写工作,提高了开发效率。 美发管理系统的实现,首先需要理解业务需求。该系统可能包括客户管理、预约管理、服务项目管理、...
此外,了解Spring框架中的JdbcTemplate或MyBatis这样的ORM(Object-Relational Mapping)工具,可以进一步简化数据库操作,提高代码的可维护性。 在实际项目开发中,我们还会遇到诸如连接池(如C3P0、HikariCP)、...
又比如JdbcTemplate 可以帮忙把一个查询结果传化为一个对象列表,但是你需要查阅一些资料才知道要用 BeanPropertyRowMapper 。如果下次要用的时候又忘记了这个类,又要查一次或者翻以前的代码来看,其实完全可以提供...
例如,如果你的项目中有JDBC相关的库,Spring Boot会自动配置数据源和JdbcTemplate。 3. `@ComponentScan`: 用于扫描指定包及其子包下的@Component、@Service、@Repository和@Controller等注解的类,将它们注册为...
Spring JDBC简化了JDBC操作,通过提供JdbcTemplate来避免直接处理JDBC API。Spring通过资源管理和异常处理,使代码更加简洁易读。此外,Spring还提供了对数据访问异常进行抽象的层次结构,并通过数据访问异常转换...
学员将深入理解Spring的IoC和AOP,SpringJdbcTemplate、事务管理和SpringMVC的工作流程。通过实际项目,巩固和提高SSM框架的使用能力。 整个课程体系覆盖了从Java基础到企业级应用开发的各个方面,旨在培养全面掌握...