zoukankan      html  css  js  c++  java
  • jfinal对象封装Record原理

     
    
     
    
    /*DbPro.class*/
    
    public transient Record findFirst(String sql, Object paras[]{
    List result = find(sql, paras);
    return result.size() <= 0 ? null : (Record)result.get(0);
    }
    
    
    public transient List find(String sql, Object paras[])
    {
    Connection conn = null;
    List list;
    try
    {
    conn = config.getConnection();
    list = find(config, conn, sql, paras);
    }
    catch(Exception e)
    {
    throw new ActiveRecordException(e);
    }
    config.close(conn);
    return list;
    Exception exception;
    exception;
    config.close(conn);
    throw exception;
    }
    
    
    transient List find(Config config, Connection conn, String sql, Object paras[])
    throws SQLException
    {
    PreparedStatement pst = conn.prepareStatement(sql);
    config.dialect.fillStatement(pst, paras);
    ResultSet rs = pst.executeQuery();
    List result = RecordBuilder.build(config, rs);   //返回List<Record>
    DbKit.closeQuietly(rs, pst);
    return result;
    }
    
    
    /*RecordBuilder.class
    *把一条记录对象封装Record对象
    */
    public static final List build(Config config, ResultSet rs)
    throws SQLException
    {
    List result = new ArrayList();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
    String labelNames[] = new String[columnCount + 1];
    int types[] = new int[columnCount + 1];
    buildLabelNamesAndTypes(rsmd, labelNames, types);
    Record record;
    for(; rs.next(); result.add(record))
    {
    record = new Record();
    record.setColumnsMap(config.containerFactory.getColumnsMap());
    Map columns = record.getColumns();
    for(int i = 1; i <= columnCount; i++)
    {
    Object value;
    if(types[i] < 2004)
    value = rs.getObject(i);
    else
    if(types[i] == 2005)
    value = ModelBuilder.handleClob(rs.getClob(i));
    else
    if(types[i] == 2011)
    value = ModelBuilder.handleClob(rs.getNClob(i));
    else
    if(types[i] == 2004)
    value = ModelBuilder.handleBlob(rs.getBlob(i));
    else
    value = rs.getObject(i);
    columns.put(labelNames[i], value);
    }
    
    }
    
    return result;
    }
    
      
      
    

      

  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5946078.html
Copyright © 2011-2022 走看看