• Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Savepoint 1


    Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点

     

    目录

    1. 应该具有的功能 1

    1.1. 元数据 API 1

    1.2. 分布式事务 vs事务中使用 Savepoint 1

    1.3. 离线数据api 1

    1.4. Ui数据绑定 2

    1.5. 多数据集的支持 2

    1.6. 分页访问数据的支持 2

    1.7. 数据源的获取方式式多样 2

    2. 离线数据集合的填充方式 2

    2.1. (1)从数据库直接获取数据 3

    2.2. (2)用ResultSet填充 3

    2.3. (3)用XML填充 3

    2.4. (4)用其他方法填充 csv、excel、text、http等格式 4

    3. 4、操作离线数据集的操作RowSet中的数据及元数据 4

    3.1. 1)更新数据 4

    3.2. (2)插入数据 4

    3.3. (3)删除数据 4

    3.4. (4)查询 4

    3.5. (5)元数据 5

    4. 类与方法对应表 5

    5. Rf 5

     

     

    1. 应该具有的功能
      1. 元数据 API
      2. 分布式事务 vs事务中使用 Savepoint

    ADO .NET不包括分布式事务的接口,ADO .NET的分布式事务是通过MS DTC统一管理的。JDBC本身就提供了对分布式事务支持的接口,不同的JDBC Driver实现了这一个接口,就支持分布式事务了。

      1. 离线数据api

    ADO .NET最大的特性是对断开连接方式的全方位支持,其引入了DataSet、DataTable、DataRow等等对象,构建了一个“内存数据库”简化版本

    DataAdapter把DataReader的数据填充到DataTable或者DataSet中,给使用者一个直观的使用方式

     

     

    ADO .NET最大的优点是对断开连接访问数据库方式的强有力支持。相比起来,JDBC也引入类似的功能,RowSet,但是比起ADO .NET来,还是不够。

     

    Php pdo好像没有离线数据api

      1. Ui数据绑定

    ADO .NET还能够和ASP .NET和Windows Form的控件进行数据邦定,使得编写一些小程序很简单。

      1. 多数据集的支持
      2. 分页访问数据的支持
      3. 数据源的获取方式式多样

     

    JDBC的数据源的获取方式多样:
      a、直接通过DriverManager.getConnection获得连接
      b、通过应用服务器的数据源获得连接。例如:

      // Get the initial JNDI naming context
      Context ctx = new InitialContext();
      // Get the DataSource object associated with the logical name
      // "jdbc/AcmeDB" and use it to obtain a database connection
      DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB");
      Connection con = ds.getConnection("user", "pwd");

     .NET中,没有类似的咚咚。

     

    1. 离线数据集合的填充方式

     

    3、填充RowSet

      前面说过,应该倾向于把RowSet看成是与数据库无关而只代表一行行数据的对象,因此就涉及到数据从哪里来的问题。

      1. (1)从数据库直接获取数据

      由于大部分情况下,与数据打交道也就是与数据库打交道,因此RowSet接口提供了通过JDBC直接从数据库获取数据的方法,以参考实现JdbcRowSetImpl为例,就是这样:

     

    RowSet rs = new JdbcRowSetImpl();//也可以是 CachedRowSetImpl,    WebRowSetImpl,FilteredRowSetImpl,JoinRowSetImpl。

    rs.setUrl("jdbc:mysql:///test");

    rs.setUsername("root");

    rs.setPassword("");

    rs.setCommand("SELECT * FROM EMPLOYEES");

    rs.execute();

     

      设置好相关属性,运行execute()方法后,EMPLOYEES表中的数据就被填充到rs对象中了。

      除了通过设置JDBC连接URL、用户名和密码外,RowSet也可以使用数据源名称属性的值来查找已经在命名服务中注册的DataSource对象。完成检索后,可以使用DataSource对象创建到它所表示的数据源的连接,设置数据源名称可以使用setDataSourceName()方法。

      1. (2)用ResultSet填充

      在有现成ResultSet的情况下,如果想将其作为RowSet使用;或者当DBMS不提供对滚动和更新的完全支持时,如果想使不可滚动和只读的 ResultSet对象变得可滚动和可更新,可以创建一个使用该ResultSet 对象的数据所填充的 CachedRowSet 对象。

    ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");

    CachedRowSet crs = newCachedRowSetImpl();//也可以是WebRowSetImpl,FilteredRowSetImpl,JoinRowSetImpl,因为他们均继承自CachedRowSetImpl

    crs.populate(rs);

      运行populate()方法后,ResultSet对象rs中的数据就被填充到crs对象中了。

      1. (3)用XML填充

      如果您打算将XML作为数据交换格式在客户端和你的服务器之间传输数据并且向实现数据离线编辑、或者向使用XML格式的数据的话,可以使用WebRowSet接口来用XML填充数据。

    WebRowSet wrs = new WebRowSetImpl();

       wrs.readXml(new FileReader(new File("D:\employees.xml")));

      运行readXml()方法后,employees.xml文件的数据就被填充到wrs对象中了。employees.xml文件的格式参见附录。

      1. (4)用其他方法填充 csv、excel、text、http等格式

      如果形用其他方式填充,比如csv、excel、text、http等格式或方法填充数据,那么就需要自己编写代码实现RowSet。

     

     

    1. 4、操作离线数据集的操作RowSet中的数据及元数据

      除了ResultSet提供的操作数据和元数据方法外,RowSet接口没有提供太多额外的方法。

      1. 1)更新数据

     rs.absolute(5);

    rs.updateInt(1, 10);

    rs.updateInt(2, 1000);

    rs.updateString(3, "John");

    rs.updateRow();

      1. (2)插入数据

    rs.moveToInsertRow();

    rs.updateInt(1, 10);

    rs.updateInt(2, 1000);

    rs.updateString(3, "John");

    rs.insertRow();

      1. (3)删除数据

        rs.absolute(5);

        rs.deleteRow();

      1. (4)查询

     

         rs.setCommand("select id, salary, name from employees where id=?");

    rs.setInt(1, 1);

    rs.execute();

      1. (5)元数据

         RowSetMetaData rsmd = (RowSetMetaData)rs.getMetaData();

    int count = rsmd.getColumnCount();

    int type = rsmd.getColumnType(2);    

     

    1.  类与方法对应表

    概念,类,方法

    Net

    Java

    Php pdo

    脱机数据集

    DataSet、DataTable

    RowSet

     

    conn

    connection

     

    Connection

    pdo

    statement

    command

    statement

    Statement

     

     

     

     

    执行curd

    command.ExecuteNonQuery

     

    StatementexecuteUpdate

     

    $pdo->exec

     

    执行查询

    command.ExecuteReader

     

     statement.executeQuery

     

    Statement.query()

     

     

    数据集转换提取批量

     

    ataAdapter把DataReader的数据填充到DataTable或者DataSet中,

    ResultSet填充

    Statement->fetchAll();

     

    数据集转换提取

    遍历结果

    遍历结果

    Statement->fetch();

     

     

     

     

     

     

     

     

     

     

    1. Rf

    Atitit jdbc3.0  4.0  4.1新特性

     

    再谈ADO .NET vs JDBC - 温少 - 博客园.html

    RowSet的使用 - 简单爱_wxg - 博客园.html

     

    RowSet的使用 - 简单爱_wxg - 博客园.html

    JDBC RowSet接口.html

    PHP PDO _ w3cschool菜鸟教程.html

  • 相关阅读:
    15. 驱动通用编译脚本
    13. linux 中断式驱动编程
    vlc源码分析(二) 播放流程
    vlc源码分析(一) vlc-android native调试配置
    RTSP会话流程——理论结合例子,非常具有参考意义
    RTSP协议学习笔记——详细总纲,入门圣典
    VLC源码分析总结 ——入门纲领
    如何阅读X264代码
    源码分析系列(五)x264_ratecontrol_dataflow
    源码分析系列(四)x264_nal_dataflow
  • 原文地址:https://www.cnblogs.com/attilax/p/15197001.html
Copyright © 2020-2023  润新知