1、使用JdbcTemplate的execute()方法執行SQL語句
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");
2、如果是UPDATE或INSERT,可以用update()方法。
jdbcTemplate.update("INSERT INTO USER VALUES('"<br /> + user.getId() + "', '"<br /> + user.getName() + "', '"<br /> + user.getSex() + "', '"<br /> + user.getAge() + "')");
3、帶參數的更新
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()});
4、使用JdbcTemplate進行查詢時,使用queryForXXX()等方法
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);List rows = jdbcTemplate.queryForList("SELECT * FROM USER");List rows = jdbcTemplate.queryForList("SELECT * FROM USER");<br />Iterator it = rows.iterator();<br />while(it.hasNext()) {<br /> Map userMap = (Map) it.next();<br /> System.out.print(userMap.get("user_id") + "/t");<br /> System.out.print(userMap.get("name") + "/t");<br /> System.out.print(userMap.get("sex") + "/t");<br /> System.out.println(userMap.get("age") + "/t");<br />}
JdbcTemplate將我們使用的JDBC的流程封裝起來,包括了異常的捕捉、SQL的執行、查詢結果的轉換等等。spring大量使用Template Method模式來封裝固定流程的動作,XXXTemplate等類別都是基於這種方式的實現。
除了大量使用Template Method來封裝一些底層的操作細節,spring也大量使用callback方式類回調相關類別的方法以提供JDBC相關類別的功能,使傳統的JDBC的使用者也能清楚瞭解spring所提供的相關封裝類別方法的使用。
JDBC的PreparedStatement
final String id = user.getId();<br />final String name = user.getName();<br />final String sex = user.getSex() + "";<br />final int age = user.getAge(); </p><p>jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",<br /> new PreparedStatementSetter() {<br /> public void setValues(PreparedStatement ps) throws SQLException {<br /> ps.setString(1, id);<br /> ps.setString(2, name);<br /> ps.setString(3, sex);<br /> ps.setInt(4, age);<br /> }<br /> });final User user = new User();<br />jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",<br /> new Object[] {id},<br /> new RowCallbackHandler() {<br /> public void processRow(ResultSet rs) throws SQLException {<br /> user.setId(rs.getString("user_id"));<br /> user.setName(rs.getString("name"));<br /> user.setSex(rs.getString("sex").charAt(0));<br /> user.setAge(rs.getInt("age"));<br /> }<br /> });
class UserRowMapper implements RowMapper {<br /> public Object mapRow(ResultSet rs, int index) throws SQLException {<br /> User user = new User(); </p><p> user.setId(rs.getString("user_id"));<br /> user.setName(rs.getString("name"));<br /> user.setSex(rs.getString("sex").charAt(0));<br /> user.setAge(rs.getInt("age")); </p><p> return user;<br /> }<br />} </p><p>public List findAllByRowMapperResultReader() {<br /> String sql = "SELECT * FROM USER";<br /> return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));<br />}<br />
在getUser(id)裡面使用UserRowMapper
public User getUser(final String id) throws DataAccessException {<br /> String sql = "SELECT * FROM USER WHERE user_id=?";<br /> final Object[] params = new Object[] { id };<br /> List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper())); </p><p> return (User) list.get(0);<br />}
網上收集
org.springframework.jdbc.core.PreparedStatementCreator 返回先行編譯SQL 不能於Object[]一起用
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {<br /> return con.prepareStatement(sql);<br />}
1.增刪改
org.springframework.jdbc.core.JdbcTemplate 類(必須指定資料來源dataSource)
template.update("insert into web_person values(?,?,?)",Object[]);
或
template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名內部類 只能訪問外部最終局部變數 </p><p> public void setValues(PreparedStatement ps) throws SQLException {<br /> ps.setInt(index++,3);<br />});
org.springframework.jdbc.core.PreparedStatementSetter 介面 處理先行編譯SQL
public void setValues(PreparedStatement ps) throws SQLException {<br /> ps.setInt(index++,3);<br />}
2.查詢JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
org.springframework.jdbc.core.RowMapper 記錄映射介面 處理結果集
public Object mapRow(ResultSet rs, int arg1) throws SQLException { int表當前行數<br /> person.setId(rs.getInt("id"));<br />}<br />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(){<br /> public void processRow(ResultSet rs) throws SQLException {<br /> person.setId(rs.getInt("id"));<br />});