好像jbuilder的一个包里有这种类,但源码不知道有没有,像com.borland.dx.dataset和com.borland.dx.sql.dataset这个包里就有的,反编译这些类,不久有源码了吗?

解决方案 »

  1.   

    好象有满足1,2两条要求的类,第3条好象也可以,好象是com.borland.database.xmldbms.XMLDBMSTABLE组件
      

  2.   

    呵呵,上面几位可能根本不明白.net framework的DataSet,它和com.borland.dx.dataset有本质的不同。com.borland.dx.dataset可能只相当于.net framework中的DataTable,而决不是DataSet。
    com.borland.dx.dataset我已经试过了,不行,性能非常差。我希望一种高效的,内存表的管理结构。
      

  3.   

    我用 Hibernate 来做的持久。跟你的要求比一下的话 Hibernate + 普通Set 差不多使用起来也有点像。 Java 里应该没有你要的直接实现你可以在 Hibernate + 普通Set 的基础上为项目做一个 包装类 ,达到效果速度上没问题
      

  4.   

    找到了给我一份,谢谢 [email protected]
      

  5.   

    www.webmethods.com提供一个类electric.xml.io.literal.LiteralReader用来序列化.net客户端发过来的TYPED DATASET XML还没找到源代码,并且好象只是把XML中的OBJECT提取出来了,DATASET的其他特性不知道有没有转换(JAVA不熟)
      

  6.   

    to  onefox(一品狐):
    我对Hibernate有如下疑问,不知道是我不会用,还是Hibernate不支持。
    1)对于数据库的int或者number类型,那么映射到Hibernate下应该是int或者是double类型。在数据库中如果该类型存着null,那么映射类型的int或者double根本不支持。
    2)另外,Hibernate一定要一张表映射一个类。但是对于通用结构的程序来说是非常不利的,我根本不知道数据库的结构,我仅仅只希望取字段通过字符串来取。比如DataSet.Tables["Hello"].Rows[0]["MyField"]就是取字段为MyField的数值。
      

  7.   

    to idiotzeng:
    ResultSet仅仅只是一个接口,第一个条件也许符合,第二个条件绝对不行。因为我无法实例化一个接口啊。
      

  8.   

    我也说一些:
    DataSet其实很强,好像是跟数据库映射一样,如有个性质,好像是对DataSet里面的记录Edit过了(update or insert or delete),你acceptChange就可以写回数据库中,就好像一些持久层解决的对象持久交互。我觉得DataSet内核是内存的数据库,既然是数据库那么就有数据库表,表记录,表结构,表关系起码这些元素,那么我觉得你说的实现类似的类其实就是设计个微型数据库。
    这是对1的看法.有了上面,再搞对别的数据源的通用映射就是2了。有了微型数据库3更加不要说了.
      

  9.   

    Hibernate 只是我平时用的持久模块, 你也可以用自己习惯的工具代替啊。
    我的意思是说:用一个“持久模块”+“Set” 外面套一个“包装类” 差不多可以达到你要的效果了。当然,这个方法是不能轻松通用其他项目的
      

  10.   

    我们花了不少时间开发了一个DATASET,包含对数据的各种操作,增,删,存,撤消,查询,过滤,排序,很类似PB的DATAWINDOW,当然,菜鸟的作品见笑了,不过,它目前完成了我们作桌面MIS系统的大部分功能
      

  11.   

    to onefox(一品狐):
    我初用Java,很多不懂的。我习惯的工具是.net和Delphi,呵呵,好像Java都不合适。我是做通用模块的,我根本不关心具体的数据库。因为很多东西抽象好了以后,作为程序员,很少的代码就能做很多的工作。如果,每个表一定要有一个具体的类,那就太没搞头了。
    对了,我关于Hibernate的两个疑问,能否回答?
      

  12.   

    呵呵,难道Java真的没有吗?或者告诉我google搜索该用哪些关键字也行。
    我初学Java,请多多关照!
      

  13.   

    楼主强人!初学JAVA已经是五星了!PFPF!
      

  14.   

    你可以看一下,jdo里面的东西,
      

  15.   

    楼主的MSN可不可以给我留一下,我的:[email protected]
      

  16.   

    1)对于数据库的int或者number类型,那么映射到Hibernate下应该是int或者是double类型。在数据库中如果该类型存着null,那么映射类型的int或者double根本不支持。>>>这个问题可以解决:用它的封装类:Integer,Double。设: dynamic-insert="true" 2)另外,Hibernate一定要一张表映射一个类。但是对于通用结构的程序来说是非常不利的,我根本不知道数据库的结构,我仅仅只希望取字段通过字符串来取。比如DataSet.Tables["Hello"].Rows[0]["MyField"]就是取字段为MyField的数值。>>>先用SQL获取表、字段,再动态生成xml映射文件。应该可行吧?
      

  17.   

    补充:上面第2还没生成相应的bean:
    获取表和其字段后,生成相应的.java,再调用javac编译,然后动态加载编译后的class,(盖原来的class)。
      

  18.   

    to xylohouse:
    第一个问题,我的想法和你类似。
    对第二个问题,我不敢苟同,你不觉得这个方法很慢吗?而且不讲效率。相比之下,用ResultSet似乎更合适,不过ResultSet也有不爽的地方,就是String要用getString(),Int要用getInt()之类的,没有一个通吃的,相比之下,.net在这点比Java强多了。
    当然要在Java中实现,我认为肯定是可以的,但是为什么JDK不去实现呢?或者没有现成的?如果OR Mapping这么复杂,我宁可不用。
      

  19.   

    我作了一个具有基本增加,修改,删除功能的Dataset类,但是很不完整,想和搂主一块完善它,如何?
      

  20.   

    呵呵,不知道你的DataSet功能怎样?我现在等着jdk1.5的出现。
      

  21.   

    对第二个问题,我不敢苟同,你不觉得这个方法很慢吗?而且不讲效率。相比之下,用ResultSet似乎更合适,不过ResultSet也有不爽的地方,就是String要用getString(),Int要用getInt()之类的,没有一个通吃的,相比之下,.net在这点比Java强多了。>>>这种情况只在数据库表结构变更时才发生的,而一般表结构在初始化后基本不会
    变动吧,所以动态加载类及创建xml文件也只是初始时发生吧?
      

  22.   

    呵呵,你误解我的意思了,我说的“慢”是指麻烦的意思。需要动态生成xml文件,在动态生成一个类,还要把类变成.class吗?要不要修改heribernate的config文件呢?你看看需要做多少步骤啊?
    呵呵,在.net钟,我的字段名事先有了,只要一个表名作为参数带入,然后我就可以生成select field1, field2... from TableName的SQL语句,用DataAdapter轻松的Fill到DataSet钟,然后操纵数据,再通过DataAdapter回写,多少方便了,呵呵!所以实现.net的上述功能,我看啊,还是用ResultSet方便,但是ResultSet不能直接创建内存表,所以我才问这个问题。
      

  23.   

    我做的这个类在更新的时候,不用setXXX,而是用setField(int nField)和setField(String strField)来更新的,取得某个字段,也不是用getXXX,而是用getField(int nField)和getField(String strField).另外还可以得到当前记录getCurrentRecord().他可以可被某些控件邦定,使之成为DataControle.当记录的Status发生改变时,可以自动刷新DataControle的UI。与Delphi中的Dataset类有的相似(我原来是用Dephi的)。该Dataset类有自己的Database,在Open的时候会激发BeforeOpen和AfterOpen事件,在Close的时候会激发BeforeClose和AfterClose事件.
    等等等等……
    其他的功能我还在想,不过像楼主所说的断开式DataSet我一时还想不出什么好办法?至于与xml的交互,我想我应该可以做到(当然要花比较长的一段时间)。
      

  24.   

    to liufuyahong:
    1)我以前也是做Delphi的,而且Delphi非常熟悉。因为现在主要是做Web应用程序,所以,对DataSet的性能非常关心。如果性能差,功能再强也要放弃,JBuilder中的QueryDataSet我就用过,效率太差了。相比之下,由于Web不需要和控件做binding,所以,DataWare功能对我来说无所谓的。
    2)断开式的DataSet,在Delphi中也是有的,TClientDataSet就是的,很典型,而且可以和XML相互转化。
    3).net的DataSet和Delphi的DataSet本质上是不一样的。.net的DataSet相当于Delphi中DataSet的集合。不过,能做好Delphi的DataSet,组合一下就OK了,这个不会太复杂的,和XML转化也一样,不用写太多程序的,用DOM分析一下还是比较容易的。
      

  25.   

    对于第一个问题,如果不是做断开式的Dataset,我想我的Dataset性能应该算可以,因为它只是对ResultSet的简单再封装,而且如果没有任何控件Bind它,则刷新绑定控件UI的过程只相当于一次判断。对于断开似的Dataset,则就难讲了,当然可以做到断开,但其性能就很大程度上决定于数据结构的组织,排序算法的设计(尤其是数据量相当大的时候,与xml的交互也一样),对我而言,其挑战性极大。可能不等我做出,sun或者别的牛人早就已经发布好几个了。
      

  26.   

    偶做过快一年的JDBC驱动,侃两句,先声明,没有这种现成的包或者类的,自己需要去实现。1、 不过ResultSet也有不爽的地方,就是String要用getString(),Int要用getInt()之类的,没有一个通吃的,相比之下,.net在这点比Java强多了。JDBC中几乎所有类型都可以用getString方法取值的,而且我觉得你的第一个问题用ResultSet接口肯定可以解决。第二个问题其实你也可以用Java中的数组和Hashtable模拟一个,但这个最容易产生OutOFMemory异常,而且功能不会太强。我的建议做法是,把你想要生成的表的结构都放到临时表中,这样就可以按照你的要求在内存中创建表了,而且这样各种SQL语法都能用,效率也会高。你还可以把这部分逻辑封装到一个EJB中。第三个没有什么好说的了,能取到数据,就是采用文本流的方式也能生成XML了。PS:ResultSet接口其实写的很好的,针对各种数据库都比较合适,你自己如果要写,你可以去实现它。
      

  27.   

    严重同意CoolAbu(阿卜-Never Stop(★★★★)) ,我做这个狗屁Dataset,其实也是为了自己方便调用,在许多时候也还是要直接用ResultSet的。
      

  28.   

    to chechy(www.qdocuments.net) 
         如果一个表不对应一个结构,无论是什么结构,那么应如何实现呢,我现在就是因为这个问题也头痛的不行,由于表的字段多,所以一个结构实现一个Serializable接口或者将多个表结构实现一个Serializable(其它表作为它的属性)去实现的,不知道楼言有什么好的方法,给我们这些菜上一堂课
      

  29.   

    阁下的需求没有现成的,一切需要您的智慧与勇气去自己实现1/2我认为可以用类似javax.sql.RowSet那样的接口,或者将java.sql.ResultSet与PreparedStatement拼装在一起,只不过在实现2的时候,具体操作的是某个Map或List而非某个db。没有用过或看过DataSet,但恕在下斗胆直言,如果它不是实现了某个接口的话,那在设计上或许真的是种失败。
      

  30.   

    对于第2个问题,不讲别的,只SQL语句的解析,就够做的了。在我看来,难点也就在这。另一个难点是数据结构和建立在其上的排序/查询算法。如果解决了这两大难题,可以说,问题已经解决了。
      

  31.   

    TO whentop(@__@) :
    我现在用的就是JDK1.5,请问是哪个类呀?
      

  32.   

    不懂.NET,但通过楼主所给的下面这个表达式可以判断
    这个控件实际上是一个小型数据库。
    DataSet.Tables["Hello"].Rows[0]["MyField"]
    java里虽然没有这样的直接类,但实现这个结构本身还是很容易的。
    至于写xml或getString等都是鸡毛蒜皮的小事。
    关键是与数据库交互的逻辑。有些问题想问一下。你说的这个DataSet它是分页的吗
    或是有默认的每页多少记录。
    否则如果数据有几十万怎么操作(不会全部读内存吧)?
    另外涉及到很多复杂的问题。理论上,如果我在一个几十万数据的这个
    反复增加修改删除了数十个表的数百条记录,
    (中间不保存,而且还有些数据库的表没主键)
    具体怎样保存?用什么方案?
    (注意这个DataSet表还跟实际的表不是对应关系)
    我想如果这个DataSet表跟物理数据差别很大,其中必定有十分复杂的逻辑关系。
    而这些都是与具体的业务相关的,有必要做成一个通用的东西么。
    如果有这功夫写这个看起来通用(天知道有多少毛病和隐患?)的东西,
    项目早搞完了吧。
    个人觉得还是跟数据库表一一对应比较好把握。
    即使这样对于大数据量操作都还有一些难点。
      

  33.   

    我玩了一阵子的JAVA也玩了一阵子的.net
    我感觉,在数据库连接这方面,ADO.net是java所不能比的,DataSet的功能非常强大我对DataSet的理解是,用作查询,是上上之选,在做一个与数据库有关系的程序时,最频繁的操作莫过于查询了,将所要查询的数据都映射到DataSet,存在内存中,而减少与数据库的连接消耗,真是天才般的想法,可惜,SUN的牛人当时没想到在更新的时候,我还是自己去写更新代码,因为DataSet中的数据与数据库中的数据并不完全对应,在将数据读入到数据集的时候,我自己加了一些表或列,用于存储一些汇总结果,这样,在程序中,也不要自己写代码去计算所需要的一些汇总数据了.
    更新操作的频率远远不及查询操作,每更新一次,再重新Fill一下DataSet
    我就是这样做的 楼上的人说,JDK1.5 己经有了,请问指的是JDK1.5己经发布了,还是在JDK1.5中与有了类似于ado.net的数据集的东东?如果是后者的话,请求指点一二
    我的E-Mail: [email protected]
      

  34.   

    能引起大家的重视和讨论,我很高兴。虽然到现在,没有非常完满的结果。
    to usabcd(9号公路上的3名共军) :如果你发现,原先做一张表需要几天,现在最多1小时。可能寥寥几行代码就完成了你需要的列表、新增、修改、查看、删除功能的时候,你就不会认为通用的程序有多不好了。
    to  laoxing521(阳光): .net回写数据库也是非常简单的,最直接的你可以用CommandBuilder,我自己也封装了一个回写的类和CommandBuilder类似,呵呵,非常方便。我个人相信ResultSet应该是离线的,但是对应内存表,恐怕还没有。jdk1.5有CachedRowSet(大概是这个名字),可能确实符合我的要求。
      

  35.   

    to  shine333(enihs) :希望你不要恪守教条。难道类不实现接口,就不是好类!就像难道类的继承最多只有3层一样,这些如果恪守下去,必然约束了自己的思维,限制了自己的思路。
    我个人认为我领悟了面向对象,我从来不遵守那些约定的规则。我认为规则是普遍规律,是给初学者的建议。但是真正领悟的人,如果恪守这些规则,就是给自己套上了紧箍。我的方针就是,宁可我开发的基类复杂一些,多处理一些,也要让用这些类的程序员简单,再简单。
    另外.net的DataSet实现了不少接口,但是这些接口和DataSet本身的主体功能没有直接关系。
      

  36.   

    关注,最近也在学JAVA,真的发现JAVA 的开发速度那叫一个慢!
    几乎每样在.NET 的中包装好的现成的东西你都将在JAVA中自己实现!烦!
    在ADO.NET 方面个人认为.NET 已经大幅领先JAVA!DataSet / DataTable / DataRow / DataColumn 真的好用!
      

  37.   

    看各位大侠们说了这么久,感觉PowerBuilder中的 DataStore 不就是你们要的吗,这个在pb4(97年或者更早)就有了。 所谓的.net 中的DataSet 难免不是跟PB学的。