在Java中实现.NET的System.Data名称空间下的功能-九年以后

这篇博文是2006年写的了,现在是2014年-九年过去了,也不再纠结这个上面了。现在在用Slick,更加原生的支持Scala方式的数据库访问,也不用再生搬硬套了。


最近在工作中进行产品的自定义数据查询的模块的设计和开发。由于才疏学浅,目光短窄,在Java的世界中没有找到类似.NET中System.Data名称空间下的jar包,让我着实的郁闷了一把。于是自己动手开始一个愚笨的自我实现的过程。本篇文章就简单的介绍一下大体的设计思路,还望路过此地的诸位仁兄能留下宝贵建议。如果有伤大雅的话,还请诸位保留。毕竟我们都是想让自己的工作更加轻松一点,无他耳。

在.NET的System.Data下面最常用的莫过于DataSet,DataTable,DataRow和DataColumn,相关的必然是DataTableCollection,DataRowCollection和DataColumnCollection。我做这样实现的初衷主要也是由于Java的ResultSet实在不够方便(也许.NET的确让人变得懒惰了,呵呵)。使用Hashtable或者List又实在不够直观。

我的实现是基于JDK 5.0及以上版本。因为用到了Java里面的范性和Iterate的功能。Java5以上的这两个功能实在是让人击节叫好。再顺便说个题外话,因为这个也是和数据库有关的一个外延式的扩展,写到这里让我不由的想起,在使用Java5以上版本进行数据库操作的时候。Java5 update 5以前的最好不要用,里面有Bug,就是和数据库的JDBC连接总是出问题。推荐使用Java5 update6以上版本,包括Java6Beta2, beta1就算了。呵呵。

其中DataSet,DataTable,DataRow和DataColumn是继承Object类的,并且DataRow是不提供公共的结构函数的,也就是说使用者不能直接new一个DataRow。为这么这么做,诸位看官读到下一段就会明白了。DataTableCollection,DataRowCollection和DataColumnCollection是继承于ArrayList<T>的,这里使用到范型,具体每一个集合类分别使用对应的DataTable,DataColumn和DataRow作为类型参数传递给父类的。这样的强类型设置可以保证安全,访问的效率。

DataSet里面包含一个DataTableCollection用于存放DataTable的集合。
DataTable里面包含两个集合分别是DataColumnCollection和DataRowCollection。顾名思义就是用来放置Column和Row的两个集合。在这里面我们可以把DataColumnCollection看成是一个Schema用来每一次创建对应DataTable的新的DataRow的一个Schema。那么使用对应的DataTable的NewRow方法每一次返回的DataRow都是基于该DataColumnCollection实现的,对创建的DataRow可以使用序号、ColumnName和DataColumn对象提取对应的数据。另外关键的一点是利用Java中对象都是传递引用的特点,在DataColumnCollection和DataRowCollection里面均有对彼此的一个引用,这样在对DataColumnCollection 进行列删除的时候可以保证DataTable中所有的DataRow都对将该列删除保证具体的数据集合和Schema保持一致。

剩下的就都是小Case了,首先对Collection的几个父类的方法进行重载,比如size(),add(DataRow、DataColumn、DataTable, etc.), get(int index), get(String name),等等。其次就是参考MSDN实现.NET提供的几个我们认为便捷的方法就可以了。这样一个很简单的System.Data名称空间就完成了。

剩下还有几个悬而未决的问题有待日后解决,比如输出XML,比如DataColumn的数据类型(用来进行针对特定的数据类型的排序,以及加入DataView之后可以使用Filter功能进行数据的筛选,对进行类的计算操作等等),最后就是提供简洁的方式将Java中的ResultSet结果集结合ResultSetMetaData转换成DataSet和DataTable。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值