您的位置:首页 > 编程语言 > Java开发

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

2006-07-05 00:45 821 查看
这篇博文是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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐