Atitit 数据库抽象层jdbc pdo 等比较与异常点
目录
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
应该具有的功能元数据 API分布式事务 vs事务中使用 Savepoint
ADO .NET不包括分布式事务的接口,ADO .NET的分布式事务是通过MS DTC统一管理的。JDBC本身就提供了对分布式事务支持的接口,不同的JDBC Driver实现了这一个接口,就支持分布式事务了。
离线数据api
ADO .NET最大的特性是对断开连接方式的全方位支持,其引入了DataSet、DataTable、DataRow等等对象,构建了一个“内存数据库”简化版本
DataAdapter把DataReader的数据填充到DataTable或者DataSet中,给使用者一个直观的使用方式
ADO .NET最大的优点是对断开连接访问数据库方式的强有力支持。相比起来,JDBC也引入类似的功能,RowSet,但是比起ADO .NET来,还是不够。
Php pdo好像没有离线数据api
Ui数据绑定
ADO .NET还能够和ASP .NET和Windows Form的控件进行数据邦定,使得编写一些小程序很简单。
多数据集的支持分页访问数据的支持数据源的获取方式式多样
JDBC的数据源的获取方式多样:
a、直接通过DriverManager.getConnection获得连接
b、通过应用服务器的数据源获得连接。例如:
//GettheinitialJNDInamingcontext
Contextctx=newInitialContext();
//GettheDataSourceobjectassociatedwiththelogicalname
//"jdbc/AcmeDB"anduseittoobtainadatabaseconnection
DataSourceds=(DataSource)ctx.lookup("jdbc/AcmeDB");
Connectioncon=ds.getConnection("user","pwd");
.NET中,没有类似的咚咚。
离线数据集合的填充方式
3、填充RowSet
前面说过,应该倾向于把RowSet看成是与数据库无关而只代表一行行数据的对象,因此就涉及到数据从哪里来的问题。
(1)从数据库直接获取数据
由于大部分情况下,与数据打交道也就是与数据库打交道,因此RowSet接口提供了通过JDBC直接从数据库获取数据的方法,以参考实现JdbcRowSetImpl为例,就是这样:
RowSet rs = newJdbcRowSetImpl();//也可以是 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()方法。
(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对象中了。
(3)用XML填充
如果您打算将XML作为数据交换格式在客户端和你的服务器之间传输数据并且向实现数据离线编辑、或者向使用XML格式的数据的话,可以使用WebRowSet接口来用XML填充数据。
WebRowSet wrs = newWebRowSetImpl();
wrs.readXml(newFileReader(newFile("D:\\employees.xml")));
运行readXml()方法后,employees.xml文件的数据就被填充到wrs对象中了。employees.xml文件的格式参见附录。
(4)用其他方法填充csv、excel、text、http等格式
如果形用其他方式填充,比如csv、excel、text、http等格式或方法填充数据,那么就需要自己编写代码实现RowSet。
4、操作离线数据集的操作RowSet中的数据及元数据
除了ResultSet提供的操作数据和元数据方法外,RowSet接口没有提供太多额外的方法。
1)更新数据
rs.absolute(5);
rs.updateInt(1, 10);
rs.updateInt(2, 1000);
rs.updateString(3, "John");
rs.updateRow();
(2)插入数据
rs.moveToInsertRow();
rs.updateInt(1, 10);
rs.updateInt(2, 1000);
rs.updateString(3, "John");
rs.insertRow();
(3)删除数据
rs.absolute(5);
rs.deleteRow();
(4)查询
rs.setCommand("select id, salary, name from employees where id=?");
rs.setInt(1, 1);
rs.execute();
(5)元数据
RowSetMetaData rsmd = (RowSetMetaData)rs.getMetaData();
intcount = rsmd.getColumnCount();
inttype = rsmd.getColumnType(2);
类与方法对应表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
Atitit 数据库抽象层jdbc pdo 等比较与异常点 目录 1. 应该具有的功能1 1.1. 元数据 API1 1.2. 分布式事务 vs事务中使用 Savepoint1