zoukankan      html  css  js  c++  java
  • JdbcTemplate学习笔记

    JdbcTemplate学习笔记

    1、使用JdbcTemplate的execute()方法执行SQL语句

    Java 代码
          
    1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");
    2.     
    3. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  

    2、如果是UPDATE或INSERT,可以用update()方法。

    Java 代码
          
    1. jdbcTemplate.update("INSERT INTO USER VALUES('"  
    2.     
    3. + user.getId() + "', '"  
    4.     
    5. + user.getName() + "', '"  
    6.     
    7. + user.getSex() + "', '"  
    8.     
    9. + user.getAge() + "')");  
    10.     
    11. jdbcTemplate.update("INSERT INTO USER VALUES('"  
    12.     
    13. + user.getId() + "', '"  
    14.     
    15. + user.getName() + "', '"  
    16.     
    17. + user.getSex() + "', '"  
    18.     
    19. + user.getAge() + "')");  

    3、带参数的更新

    Java代码
          
    1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});    
    2.     
    3. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  
    Java代码
          
    1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});    
    2.     
    3. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});  

    4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法

    Java代码
          
    1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");    
    2.     
    3. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  
    Java代码
          
    1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);    
    2.     
    3. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);  
    Java代码
          
    1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");    
    2.     
    3. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
    Java代码
          
    1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
    2.     
    3. Iterator it = rows.iterator();  
    4.     
    5. while(it.hasNext()) {  
    6.     
    7. Map userMap = (Map) it.next();  
    8.     
    9. System.out.print(userMap.get("user_id") + " ");  
    10.     
    11. System.out.print(userMap.get("name") + " ");  
    12.     
    13. System.out.print(userMap.get("sex") + " ");  
    14.     
    15. System.out.println(userMap.get("age") + " ");  
    16.     
    17. }  
    18.     
    19.   
    20.     
    21. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
    22.     
    23.   
    24.     
    25. Iterator it = rows.iterator();  
    26.     
    27. while(it.hasNext()) {  
    28.     
    29. Map userMap = (Map) it.next();  
    30.     
    31. System.out.print(userMap.get("user_id") + " ");  
    32.     
    33. System.out.print(userMap.get("name") + " ");  
    34.     
    35. System.out.print(userMap.get("sex") + " ");  
    36.     
    37. System.out.println(userMap.get("age") + " "); 
          
    38.     
    39. }  

    JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。

    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

    JDBC的PreparedStatement

    Java代码
          
    1. final String id = user.getId();    
    2.     
    3. final String name = user.getName();    
    4.     
    5. final String sex = user.getSex() + "";    
    6.     
    7. final int age = user.getAge();  
    8.     
    9.   
    10.     
    11. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",  
    12.     
    13.   
    14.     
    15. new PreparedStatementSetter() {    
    16.     
    17. public void setValues(PreparedStatement ps) throws SQLException {    
    18.     
    19. ps.setString(1, id);  
    20.     
    21. ps.setString(2, name);  
    22.     
    23. ps.setString(3, sex);  
    24.     
    25. ps.setInt(4, age);  
    26.     
    27. }  
    28.     
    29. });  
    30.     
    31.   
    32.     
    33. final String id = user.getId();  
    34.     
    35. final String name = user.getName();  
    36.     
    37. final String sex = user.getSex() + "";  
    38.     
    39. final int age = user.getAge();  
    40.     
    41.     
    42.     
    43. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",  
    44.     
    45.     
    46.     
    47. new PreparedStatementSetter() {      
    48.     
    49. public void setValues(PreparedStatement ps) throws SQLException {    
    50.     
    51. ps.setString(1, id);    
    52.     
    53. ps.setString(2, name);      
    54.     
    55. ps.setString(3, sex);    
    56.     
    57. ps.setInt(4, age);      
    58.     
    59. }    
    60.     
    61. });        
    Java代码
          
    1. final User user = new User();      
    2.     
    3. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",    
    4.     
    5. new Object[] {id},    
    6.     
    7. new RowCallbackHandler() {    
    8.     
    9. public void processRow(ResultSet rs) throws SQLException {    
    10.     
    11. user.setId(rs.getString("user_id"));  
    12.     
    13. user.setName(rs.getString("name"));  
    14.     
    15. user.setSex(rs.getString("sex").charAt(0));    
    16.     
    17. user.setAge(rs.getInt("age"));    
    18.     
    19. }  
    20.     
    21. });  
    22.     
    23.   
    24.     
    25. final User user = new User();  
    26.     
    27.     
    28.     
    29. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",    
    30.     
    31. new Object[] {id},      
    32.     
    33. new RowCallbackHandler() {  
    34.     
    35.   
    36.     
    37.   
    38.     
    39. public void processRow(ResultSet rs) throws SQLException {    
    40.     
    41. user.setId(rs.getString("user_id"));    
    42.     
    43. user.setName(rs.getString("name"));    
    44.     
    45. user.setSex(rs.getString("sex").charAt(0));    
    46.     
    47. user.setAge(rs.getInt("age"));    
    48.     
    49. }    
    50.     
    51. });  
    Java代码
          
    1. class UserRowMapper implements RowMapper {  
    2.     
    3.   
    4.     
    5. public Object mapRow(ResultSet rs, int index) throws SQLException {  
    6.     
    7.   
    8.     
    9. User user = new User();  
    10.     
    11. user.setId(rs.getString("user_id"));      
    12.     
    13. user.setName(rs.getString("name"));    
    14.     
    15. user.setSex(rs.getString("sex").charAt(0));      
    16.     
    17. user.setAge(rs.getInt("age"));      
    18.     
    19. return user;         
    20.     
    21. }         
    22.     
    23. }  
    24.     
    25.     
    26.     
    27. public List findAllByRowMapperResultReader() {      
    28.     
    29.   
    30.     
    31. String sql = "SELECT * FROM USER";  
    32.     
    33.   
    34.     
    35. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));  
    36.     
    37.   
    38.     
    39. }  
    40.     
    41.   
    42.     
    43. class UserRowMapper implements RowMapper {  
    44.     
    45.   
    46.     
    47. public Object mapRow(ResultSet rs, int index) throws SQLException {  
    48.     
    49. User user = new User();    
    50.     
    51. user.setId(rs.getString("user_id"));    
    52.     
    53. user.setName(rs.getString("name"));    
    54.     
    55. user.setSex(rs.getString("sex").charAt(0));    
    56.     
    57. user.setAge(rs.getInt("age"));    
    58.     
    59. return user;    
    60.     
    61. }    
    62.     
    63. }  
    64.     
    65.   
    66.     
    67. public List findAllByRowMapperResultReader() {      
    68.     
    69. String sql = "SELECT * FROM USER";    
    70.     
    71. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));  
    72.     
    73. }  

    在getUser(id)里面使用UserRowMapper

    Java代码
          
    1. public User getUser(final String id) throws DataAccessException {    
    2.     
    3. String sql = "SELECT * FROM USER WHERE user_id=?";    
    4.     
    5. final Object[] params = new Object[] { id };    
    6.     
    7. List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));      
    8.     
    9. return (User) list.get(0);    
    10.     
    11. }
    12.     
    13.   
    14.     
    15. public User getUser(final String id) throws DataAccessException {  
    16.     
    17. String sql = "SELECT * FROM USER WHERE user_id=?";      
    18.     
    19. final Object[] params = new Object[] { id };      
    20.     
    21. List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));      
    22.     
    23. return (User) list.get(0);      
    24.     
    25. }

    网上收集

    org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL 不能于Object[]一起用

    Java代码
          
    1. public PreparedStatement createPreparedStatement(Connection con) throwsSQLException {    
    2.     
    3. return con.prepareStatement(sql);    
    4.     
    5. }  
    6.     
    7.   
    8.     
    9. public PreparedStatement createPreparedStatement(Connection con) throwsSQLException {    
    10.     
    11. return con.prepareStatement(sql);    
    12.     
    13. }  

    1.增删改

    org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource)

    Java代码
          
    1. template.update("insert into web_person values(?,?,?)",Object[]);    
    2.     
    3. template.update("insert into web_person values(?,?,?)",Object[]);  
          

    Java代码
          
    1. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ //匿名内部类 只能访问外部最终局部变量    
    2.     
    3. public void setValues(PreparedStatement ps) throws SQLException {    
    4.     
    5. ps.setInt(index++,3);    
    6.     
    7. });  
    8.     
    9.   
    10.     
    11. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ //匿名内部类 只能访问外部最终局部变量  
    12.     
    13.   
    14.     
    15. public void setValues(PreparedStatement ps) throws SQLException {    
    16.     
    17. ps.setInt(index++,3);    
    18.     
    19. });  
    20.     
    21.   
    22.     
    23. org.springframework.jdbc.core.PreparedStatementSetter //接口 处理预编译SQL        
    24.     
    25. public void setValues(PreparedStatement ps) throws SQLException {    
    26.     
    27. ps.setInt(index++,3);    
    28.     
    29. }  
    30.     
    31.   
    32.     
    33. public void setValues(PreparedStatement ps) throws SQLException {    
    34.     
    35. ps.setInt(index++,3);    
    36.     
    37. }  

    2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)

    org.springframework.jdbc.core.RowMapper 记录映射接口 处理结果集

    Java代码
          
    1. public Object mapRow(ResultSet rs, int arg1) throws SQLException { //int表当前行数    
    2.     
    3. person.setId(rs.getInt("id"));    
    4.     
    5. }    
    6.     
    7. List template.query("select * from web_person where id=?",Object[],RowMapper);    
    8.     
    9. public Object mapRow(ResultSet rs, int arg1) throws SQLException { //int表当前行数    
    10.     
    11. person.setId(rs.getInt("id"));    
    12.     
    13. }    
    14.     
    15. List template.query("select * from web_person where id=?",Object[],RowMapper);  

    org.springframework.jdbc.core.RowCallbackHandler 记录回调管理器接口 处理结果集

    Java代码
            
      1. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){    
      2.     
      3. public void processRow(ResultSet rs) throws SQLException {    
      4.     
      5. person.setId(rs.getInt("id"));    
      6.     
      7. });  
  • 相关阅读:
    Spark GraphX 属性图操作
    Scala隐式转换
    Spark GraphX
    交叉验证_自动获取模型最优超参数
    协同过滤算法
    聚类-----高斯混合模型
    IDEA kafka producer数据输出缓慢 和 kafka consumer 报错的处理
    Opencv读取视频一闪而过情况分析
    影像叠加+滑动条
    opencv中的图像矩(空间矩,中心矩,归一化中心矩,Hu矩)
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/6155888.html
Copyright © 2011-2022 走看看