flex访问数据库:跟我StepByStep学FLEX教程------访问数据库

  这讲本来要对Demo12解释结果发现上讲已经讲得很清楚了所以就不再描述了如有读者有疑问可在评论中发表作者会回复

  由于Demo13是访问数据库因此要做些前期技术介绍

  Demo13访问数据库是通过SpringJDBCTemplate方式(下个Demo将其改造成Hibernate方式)

  这儿简单介绍下SpringJDBCTemplate:

  JDBCTemplate是对JDBC种封装为了减少JDBC繁琐代码而设计出来抽象出些常用思路方法目标是Simple and Stupid

  Make JDBC easier to use and less error phone

  Framework handles the creation and release resources

  Framework takes care of all exception handling

  JDBCTemplate使用需要有DataSource支持所以在配置文件中需要个DataSource配置然后在DataSource配置到JdbcTemplate里接着将JDBCTemplate配置进DAO层最后DAO配置到Model层

跟我StepByStep学FLEX教程------访问数据库

  JDBCTemplate使用思路方法:

    Execute SQL Queries,update statements or stored procedure calls
    Iteration over Results and extraction of ed parameter values


  1、表操作

  使用JdbcTemplateexecute思路方法执行SQL语句

  execute思路方法总是使用 java.sql.Statement,不接受参数而且他不返回受影响记录计数更适合于创建和丢弃表语句

  代码

  jdbcTemplate.execute("CREATE TABLE USER (user_id eger, name varchar(100))");  

  2、增、删和改

  update思路方法update思路方法返回是受影响记录数目个计数并且如果传入参数使用是java.sql.PreparedStatement更适合于插入更新和删除操作

  1)不带参数更新

  代码

jdbcTemplate.update("INSERT INTO USER VALUES('"  
           + user.getId + "', '"  
           + user.getName + "', '"  
           + user.getSex + "', '"  
           + user.getAge + "')");


  2)带参数更新

  代码:jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?",  Object            {name, id});  

  代码:jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",  Object {user.g   etId, user.getName, user.getSex, user.getAge});   

  3)JDBCPreparedStatement

  代码:------单个更新

final String id = user.getId;   
final String name = user.getName;   
final String sex = user.getSex + "";   
final  age = user.getAge;   
  
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",   
                      PreparedStatementSetter {   
                         public void Values(PreparedStatement ps) throws SQLException {   
                             ps.String(1, id); //需要注意: 匿名内部类 只能访问外部最终局部变量
                             ps.String(2, name);             
                             ps.String(3, sex);   
                             ps.Int(4, age);   
                         }   
                     });   


  代码:------批量更新

  需要批处理可以实现org.springframework.jdbc.core.BatchPrepared- StatementSetter接口:

package org.springframework.jdbc.core;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public erface BatchPreparedStatementSetter {
    void Values(PreparedStatement ps,
                      i) throws SQLException;
    getBatchSize;
}

...
public insertUsers(final List users) {
    String sql = "INSERT INTO user (name,age) VALUES(?,?)";
    BatchPreparedStatementSetter ter =
      BatchPreparedStatementSetter {
        public void Values(
            PreparedStatement ps, i) throws SQLException {
            User user = (User) users.get(i);
            ps.String(1, user.getName);
            ps.Int(2, user.getAge.Value);
        }
        public getBatchSize {
            users.size;
        }
      };
    jdbcTemplate.batchUpdate(sql, ter);
}
...


  如果JDBC驱动支持批处理则直接使用它功能如果不支持 Spring则会个自动处理更新以模拟批处理

  3、查询1)使用JdbcTemplate进行查询时使用queryForXXX等思路方法

  •         Queries, using convenience methods

  代码: count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  

  代码:String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?",  Object {id}, java.lang.String.);  

  代码:List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  

  Returns an ArrayList (one entry for each row) of HashMaps (one entry for each column using the column name as the key)

  代码:

List rows = jdbcTemplate.queryForList("SELECT * FROM USER");   
Iterator it = rows.iterator;   
while(it.hasNext) {   
    Map userMap = (Map) it.next;   
    .out.pr(userMap.get("user_id") + "t");   
    .out.pr(userMap.get("name") + "t");   
    .out.pr(userMap.get("sex") + "t");   
    .out.prln(userMap.get("age") + "t");   
}  


  2)JDBCcallback方式

  •         Queries, using callback method

  A)processRow

  在查询到数据的后先作些处理再传回可以实现org.springframework.jdbc.core.RowCallbackHandler接口

  代码:------单行查询

final User user =  User;   
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",   
                     Object {id},   
                     RowCallbackHandler {   
                        public void processRow(ResultSet rs) throws SQLException { //需要注意: 匿名内部类 只能访问外部最终局部变量
                            user.Id(rs.getString("user_id"));   
                            user.Name(rs.getString("name"));   
                            user.Sex(rs.getString("sex").charAt(0));   
                            user.Age(rs.getInt("age"));   
                        }   
                    });   


  代码:------多行查询

final List employees = LinkedList;
jdbc.query("select EMPNO, FIRSTNME, LASTNAME from EMPLOYEE",
     RowCallbackHandler {
         public void processRow(ResultSet rs) throws SQLException {
             Employee e = Employee;
             e.EmpNo(rs.getString(1));
            e.FirstName(rs.getString(2));
            e.LastName(rs.getString(3));
            employees.add(e);
        }
    }
);
employees list will be populated with Employee objects


  B) RowMapper

  次要取回很多查询结果对象则可以先实现org.springframe- work.jdbc.core.RowMapper接口

  代码:------将数据表中数据影射成其对应JAVA类对象mapRow回调思路方法会被ResultSet中

 UserRowMapper implements RowMapper {   
    public Object mapRow(ResultSet rs,  index) throws SQLException {   
        User user =  User;   
  
        user.Id(rs.getString("user_id"));   
        user.Name(rs.getString("name"));   
        user.Sex(rs.getString("sex").charAt(0));   
        user.Age(rs.getInt("age"));   
  
         user;   
    }   
}   




  传回结果已使用UserRowMapper定义将的封装为User对象

//返回多行查询结果  
public List findAllByRowMapperResultReader {   
    String sql = "SELECT * FROM USER";   
     jdbcTemplate.query(sql,  RowMapperResultReader( UserRowMapper));   
}   
the list will be populated with User objects

//返回单行查询结果


  在getUser(id)里面使用UserRowMapper

  代码

public User getUser(final String id) throws DataAccessException {   
    String sql = "SELECT * FROM USER WHERE user_id=?";   
    final Object params =  Object { id };   
    List list = jdbcTemplate.query(sql, params,  RowMapperResultReader( UserRowMapper));   
  
     (User) list.get(0);   
}


  文章来源:http://wangyisong.javaeye.com/blog/419443



Tags:  flex教程 stepbystep stepbystep2000 flex访问数据库

延伸阅读

最新评论

发表评论