JdbcTemplate总结

  1. 1.您可以使用JdbcTemplate的execute()方法執行SQL DDL语句,例如:  
  2. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  
  3.   
  4.   
  5. 使用JdbcTemplate进行查询时,可以使用queryForXXX()等方法,例如使用queryForInt()方法传回user表格中的数据数目: jdbcTemplate.quertForInt("select count(*) from user"); 也可以使用queryForObject()传回一个查询后的对象,例如传回一个String对象:  
  6.   
  7. String name=(String)jdbcTemplate.queryForObject(  
  8.              "selcet name from user where id=?",  
  9.                          new Object[]{id},  
  10.                          java.lang.String.class);  
  11. )  
  12.   
  13.   
  14. 单独查询某个数据并赋值给特定对象时:  
  15.     public BaseObj getBaseObj(final int ID) {  
  16.   
  17.         String sql = "select * from " + DB_TABLE_NAME + " where NewsId=" + ID;  
  18.         BaseObj obj =(BaseObj) getJdbcTemplate().query(sql,new ResultSetExtractor(){  
  19.             public Object extractData(ResultSet rs) throws SQLException,DataAccessException {  
  20.                 if (rs.next()) {  
  21.                     NewsObj news = new NewsObj();  
  22.                     news.setID(rs.getInt("NewsID"));  
  23.                     news.setTitle(rs.getString("NewsTitle"));  
  24.                     news.setBigClass(rs.getInt("BigClassId"));  
  25.                     news.setNewsContent(rs.getString("NewsContent"));  
  26.                     news.setNewsKey(rs.getString("NewsKey"));  
  27.                     news.setNewsAuthor(rs.getString("NewsAuthor"));  
  28.                     news.setImg(rs.getBoolean("isImg"));  
  29.                     news.setNewsFrom(rs.getString("NewsFrom"));  
  30.                     return news;  
  31.                 }  
  32.                 return null;  
  33.             }  
  34.         });  
  35.        return obj;  
  36.   
  37.     }  
  38.   
  39.    
  40.   
  41. 上面两个例子都是传回单独一笔数据,如果要传回多笔数据,则可以使用queryForList()方法,例如:  
  42. List rows=jdbcTemplate().queryForList("select * from user where id="+id.intValue()); 传回的list中包括的是map对象,每个map对象代表查询结果中的一笔数据,每笔数据包括多个字段,要取得字段中的值,就要使用字段名作为key,例如:  
  43.   
  44.    Iterator it=rows.iterator();  
  45.    while(it.hasNext()){  
  46.        Map result=(Map)it.next();  
  47.        System.out.println(userMap.get("id"));  
  48.        System.out.println(userMap.get("name"));  
  49.        System.out.println(userMap.get("age"));  
  50.     }  
  51.   
  52.    
  53.   
  54. 在查询的同时,你可以在返回结果之前先进行一些处理,这就要实现RowCallbackHandler接口  
  55.   
  56. public User find(Integer id){  
  57.    final User user=new User();  
  58.    jdbcTemplate.query("select * from user where id=?",new Object[]{id},  
  59.                                          new RowCallBackHandler(){  
  60.                                                 public void proccessRow(ResultSet rs){  
  61.                                                         user.setId(new Integer(rs.getInt("id")));  
  62.                                                         uset.setName(rs.getString("name"));      
  63.                                                  }  
  64.                                             });  
  65.    return user;  
  66.  }  
  67.   
  68. 如果一次要返回多个查询结果对象,则可以实现RowMapper接口  
  69.   
  70. public class UserRowMapper implements RowMapper{  
  71.        public Object MapRow(ResultSet rsmint rowNum) throws SQLException{  
  72.                User user=new User();  
  73.                user.setId(new Integer(rs.getInt("id")));  
  74.                user.setName(rs.getString("name"));  
  75.                return user;  
  76.       }  
  77. }  
  78.   
  79. 使用RowMapper查询单笔数据  
  80.   
  81. public User find(Integer id){  
  82.         User user=(User)jdbcTemplate.queryForObject("select * from user where id=?",new Object[]{id},  
  83.                                                                                     new UserRowMapper());  
  84.          return user;  
  85.   
  86. }  
  87.   
  88. 使用RowMapper查询多笔数据  
  89.   
  90.    
  91. class UserRowMapper implements RowMapper {  
  92.   
  93.         public Object mapRow(ResultSet rs,int index) throws SQLException   
  94.   
  95.         {  
  96.             User u = new User();  
  97.             u.setId(rs.getString(”ID”));  
  98.             u.setName(rs.getString(”Name”));  
  99.             u.setPassword(rs.getString(”Password”));  
  100.             return u;  
  101.   
  102.         }  
  103.   
  104.     }  
  105.   
  106. public List select(String where)  
  107.   
  108.     {  
  109.   
  110.         List list;          
  111.         String sql = “select * from admin “+where;          
  112.         list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper()));  
  113.         return list;  
  114.   
  115.     }  
  116.   
  117.    
  118.   
  119. 传回的users对象中,包括了从数据库查询出来的结果,并已经封装成uer对象  
  120.   
  121. JdbcTemplate语句使用:  
  122.   
  123. 1、使用JdbcTemplate的execute()方法执行SQL语句  
  124. 代码  
  125.   
  126.     jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");    
  127.   
  128.   
  129. 2、如果是UPDATE或INSERT,可以用update()方法。  
  130. 代码  
  131.   
  132.     jdbcTemplate.update("INSERT INTO USER VALUES('"    
  133.                + user.getId() + "', '"    
  134.                + user.getName() + "', '"    
  135.                + user.getSex() + "', '"    
  136.                + user.getAge() + "')");     
  137.   
  138.   
  139. 3、带参数的更新  
  140. 代码  
  141.   
  142.     jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?"new Object[] {name, id});    
  143.   
  144.   
  145. 代码  
  146.   
  147.     jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)"new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});     
  148.   
  149.   
  150. 4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法  
  151. 代码  
  152.   
  153.     int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");    
  154.   
  155. 代码  
  156.   
  157.     String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?"new Object[] {id}, java.lang.String.class);    
  158.   
  159. 代码  
  160.   
  161.     List rows = jdbcTemplate.queryForList("SELECT * FROM USER");    
  162.   
  163. 代码  
  164.   
  165.     List rows = jdbcTemplate.queryForList("SELECT * FROM USER");     
  166.     Iterator it = rows.iterator();     
  167.     while(it.hasNext()) {     
  168.         Map userMap = (Map) it.next();     
  169.         System.out.print(userMap.get("user_id") + "\t");     
  170.         System.out.print(userMap.get("name") + "\t");     
  171.         System.out.print(userMap.get("sex") + "\t");     
  172.         System.out.println(userMap.get("age") + "\t");     
  173.     }     
  174.   
  175. JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。  
  176. 除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。  
  177.   
  178. JDBC的PreparedStatement  
  179. 代码  
  180.   
  181.     final String id = user.getId();     
  182.     final String name = user.getName();     
  183.     final String sex = user.getSex() + "";     
  184.     final int age = user.getAge();     
  185.         
  186.     jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",     
  187.                          new PreparedStatementSetter() {     
  188.                              public void setValues(PreparedStatement ps) throws SQLException {     
  189.                                  ps.setString(1, id);     
  190.                                  ps.setString(2, name);               
  191.                                  ps.setString(3, sex);     
  192.                                  ps.setInt(4, age);     
  193.                              }     
  194.                          });     
  195.         
  196.   
  197. 代码  
  198.   
  199.     final User user = new User();     
  200.     jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",     
  201.                         new Object[] {id},     
  202.                         new RowCallbackHandler() {     
  203.                             public void processRow(ResultSet rs) throws SQLException {     
  204.                                 user.setId(rs.getString("user_id"));     
  205.                                 user.setName(rs.getString("name"));     
  206.                                 user.setSex(rs.getString("sex").charAt(0));     
  207.                                 user.setAge(rs.getInt("age"));     
  208.                             }     
  209.                         });     
  210.         
  211.   
  212. 代码  
  213.   
  214.     class UserRowMapper implements RowMapper {     
  215.         public Object mapRow(ResultSet rs, int index) throws SQLException {     
  216.             User user = new User();     
  217.         
  218.             user.setId(rs.getString("user_id"));     
  219.             user.setName(rs.getString("name"));     
  220.             user.setSex(rs.getString("sex").charAt(0));     
  221.             user.setAge(rs.getInt("age"));     
  222.         
  223.             return user;     
  224.         }     
  225.     }     
  226.         
  227.     public List findAllByRowMapperResultReader() {     
  228.         String sql = "SELECT * FROM USER";     
  229.         return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));     
  230.     }     
  231.         
  232.   
  233. 在getUser(id)里面使用UserRowMapper  
  234. 代码  
  235.   
  236.     public User getUser(final String id) throws DataAccessException {     
  237.         String sql = "SELECT * FROM USER WHERE user_id=?";     
  238.         final Object[] params = new Object[] { id };     
  239.         List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));     
  240.         
  241.         return (User) list.get(0);     
  242.     }     
  243.   
  244. 网上收集  
  245. org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL 不能于Object[]一起用  
  246. 代码  
  247.   
  248.     public PreparedStatement createPreparedStatement(Connection con) throws SQLException {     
  249.      return con.prepareStatement(sql);     
  250.     }     
  251.   
  252.   
  253. 1.增删改  
  254. org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource)  
  255. 代码  
  256.   
  257.     template.update("insert into web_person values(?,?,?)",Object[]);     
  258.   
  259.   
  260. 或  
  261. 代码  
  262.   
  263.     template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量     
  264.         
  265.      public void setValues(PreparedStatement ps) throws SQLException {     
  266.       ps.setInt(index++,3);     
  267.     });     
  268.   
  269.   
  270. org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL  
  271. 代码  
  272.   
  273.     public void setValues(PreparedStatement ps) throws SQLException {     
  274.      ps.setInt(index++,3);     
  275.     }     
  276.   
  277.   
  278. 2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)  
  279. org.springframework.jdbc.core.RowMapper 记录映射接口 处理结果集  
  280. 代码  
  281.   
  282.     public Object mapRow(ResultSet rs, int arg1) throws SQLException {   int表当前行数     
  283.       person.setId(rs.getInt("id"));     
  284.     }     
  285.     List template.query("select * from web_person where id=?",Object[],RowMapper);     
  286.   
  287.   
  288. org.springframework.jdbc.core.RowCallbackHandler 记录回调管理器接口 处理结果集  
  289. 代码  
  290.   
  291.     template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){     
  292.      public void processRow(ResultSet rs) throws SQLException {     
  293.       person.setId(rs.getInt("id"));     
  294.     });    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值