JdbcTemplate學習筆記

來源:互聯網
上載者:User

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 />});

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.