<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>yollywu</title>
    <description></description>
    <link>http://yollywu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>北京-面试经历</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/196608" style="color:red;">http://yollywu.javaeye.com/blog/196608</a>&nbsp;
          发表时间: 2008年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一:正龙泰实际上是长信通<br />   早餐中餐都没吃，赶到的面试，结果只是笔试，开始进去前台招呼填写个人简历，然后来了份187题的心理素质测试题，因为脑子比较昏，所以很快做完了，没怎么思索，按直觉和习惯来的，完了后，是上机测试，本以为很快就能上，结果是等了半小时还是等，原因是有人在机试，等的过程中，没人理我和朋友，连杯水什么都没有，旁边的杂志还是2004年的，等了大约1小时候才被通知去机试。<br />   上机的题目基本上都是用到数据结构方面的知识，主要是排序和栈、队列的知识比较多，二:华夏人寿保险有限公司<br />   因为刚到北京，所以地址都不熟悉，做到海淀桥西下，一直走到苏州街53号，没发现97号金州大厦，然后打的也被师傅忽悠顿没找到，知道自己边走边问，才知道真正的地方在哪里，一直走过了苏州街才找到，刚到公司的时候是10点1分，约定是10点整。<br />   技术部经理很客气，开始是技术面试，完了后，给经理的影响比较好，他说虽然面试没问题还是需要笔试，然后是笔试，笔试题目很简单所以分数也蛮高的，最后没做完就直接被叫去二面了，这时候信心还是比较足的，二面主要是问在原来公司的工作经历以及一些比较有影响的事情，这次面试大概花了40分钟左右，二面完了到了中午，经理请我去公司底下食堂吃了中饭，这时候，公司给我整体的影响真的很不错，很想能有机会进去，在办公室休息后，下午上班三面官过来，三面主要是问下对保险行业的一个认识以及对公司的认识，在这个过程中也没什么大的问题，主要是了解下公司，以及进来后的职责，公司的薪水和福利都不错。三面完了后，我以为基本上可以了，然后好像与人力资源谈去了，让我等通知。<br />    走到半路上，我想想回去问下，是不是没希望，亏我多了个心眼，我直接问技术经理，我说如果觉得我不合适就直接跟我说，不要等通知，然后问了以后才知道，公司不怀疑我的实力，但是公司要招个能一直做下去的，由于我是从外省做了一年多才过来的，所以公司担心我的稳定性，然后我说没问题的，因为我确实觉得公司还不错，然后给了我一个机会，让我跟公司老总四面了，我最失败的就是在四面了，由于以前没怎么面试，所以很多比较尖锐的话题都没有去仔细考虑过，比如可不可以加班，离职原因等，所以谈的很失败。。。后来想想，如果早点准备就好了。<br /><br />   <br /><br />三:东南融通
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/196608#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 24 May 2008 23:47:37 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/196608</link>
        <guid>http://yollywu.javaeye.com/blog/196608</guid>
      </item>
      <item>
        <title>基础回顾(1)---对象序列化(引)</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/165473" style="color:red;">http://yollywu.javaeye.com/blog/165473</a>&nbsp;
          发表时间: 2008年02月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后，可以用java.io包中的各种字节流类将其保存到文件中，管道到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常简单、强大，在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题，但却相当重要，具有许多实用意义。<br />一：对象序列化可以实现分布式对象。主要应用例如：RMI要利用对象序列化运行远程主机上的服务，就像在本地机上运行对象时一样。<br />二： java对象序列化不仅保留一个对象的数据，而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中，可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深复制”，即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。<br />从上面的叙述中，我们知道了对象序列化是java编程中的必备武器，那么让我们从基础开始，好好学习一下它的机制和用法。<br /><br />java 序列化比较简单，通常不需要编写保存和恢复对象状态的定制代码。实现java.io.Serializable接口的类对象可以转换成字节流或从字节流恢复，不需要在类中增加任何代码。只有极少数情况下才需要定制代码保存或恢复对象状态。这里要注意：不是每个类都可序列化，有些类是不能序列化的，例如涉及线程的类与特定JVM有非常复杂的关系。<br /><br />序列化机制：<br /><br />序列化分为两大部分：序列化和反序列化。序列化是这个过程的第一部分，将数据分解成字节流，以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示，有时还要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过程与字节流连接，包括对象类型和版本信息。反序列化时， JVM用头信息生成对象实例，然后将对象字节流中的数据复制到对象数据成员中。下面我们分两大部分来阐述：<br /><br /><br />处理对象流：<br />（序列化过程和反序列化过程）<br /><br />java.io包有两个序列化对象的类。ObjectOutputStream负责将对象写入字节流，ObjectInputStream从字节流重构对象。<br />我们先了解ObjectOutputStream类吧。ObjectOutputStream类扩展DataOutput接口。<br />writeObject ()方法是最重要的方法，用于对象序列化。如果对象包含其他对象的引用，则writeObject()方法递归序列化这些对象。每个 ObjectOutputStream维护序列化的对象引用表，防止发送同一对象的多个拷贝。（这点很重要）由于writeObject()可以序列化整组交叉引用的对象，因此同一ObjectOutputStream实例可能不小心被请求序列化同一对象。这时，进行反引用序列化，而不是再次写入对象字节流。<br />下面，让我们从例子中来了解ObjectOutputStream这个类吧。<br /><br />// 序列化 today's date 到一个文件中.    FileOutputStream f = new FileOutputStream("
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/165473#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Feb 2008 15:17:07 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/165473</link>
        <guid>http://yollywu.javaeye.com/blog/165473</guid>
      </item>
      <item>
        <title>从SQLSERVER binary 导入到ORCALE Blob字段</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/162582" style="color:red;">http://yollywu.javaeye.com/blog/162582</a>&nbsp;
          发表时间: 2008年02月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">      
     //照片处理段
     InputStream photo = rs.getBinaryStream("ZA9998");

     //照片处理       
            if(photo!=null){
            BLOB blob = null;
            Ex1Con.setAutoCommit(false);

            PreparedStatement pstmt = Ex1Con.prepareStatement
           ("update t_gs_person set PERSON_PHOTO=empty_blob() where PERSON_ID=?"); 
            pstmt.setInt(1,perrow+1);
            pstmt.executeUpdate();
            pstmt.close();

            pstmt = Ex1Con.prepareStatement
           ("select PERSON_PHOTO from t_gs_person where PERSON_ID= ? for update");
            pstmt.setInt(1,perrow+1);
            ResultSet rset = pstmt.executeQuery();

            if (rset.next()) blob = (BLOB) rset.getBlob(1);
            try {

	           pstmt = Ex1Con.prepareStatement
                   ("update t_gs_person set PERSON_PHOTO=? where PERSON_ID=?");

		   OutputStream out = blob.getBinaryOutputStream();
		   int count = -1, total = 0;
		   byte[] data = new byte[(int)photo.available()];
		   photo.read(data);
		   out.write(data); 
		   photo.close();
		   out.close();

		   pstmt.setBlob(1,blob);
		   pstmt.setInt(2,perrow+1);
		   pstmt.executeUpdate();
		   pstmt.close(); 
		} catch (IOException e) {
		// TODO Auto-generated catch block
		   try {
			photo.close();
			} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				e.printStackTrace();
			}
            }//照片处理if语句结束
     //照片处理结束</pre><br /><br />建议Statement对象名字区分开来,后来发现关闭对象时候，有状态对象未关闭。
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/162582#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Feb 2008 08:47:30 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/162582</link>
        <guid>http://yollywu.javaeye.com/blog/162582</guid>
      </item>
      <item>
        <title>Hibernate中的状态 PO 与 VO(摘抄)</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/157941" style="color:red;">http://yollywu.javaeye.com/blog/157941</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Hibernate中，对象有三种状态：临时状态、持久状态和游离状态。<br />临时状态：当new一个实体对象后，这个对象处于临时状态，即这个对象只是一个保存临时数据的内存区域，如果没有变量引用这个对象，则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系，除非通过Session的save或者 SaveOrUpdate把临时对象与数据库关联，并把数据插入或者更新到数据库，这个对象才转换为持久对象。<br />例如：Emp e=new Emp();    //创建临时对象<br />          e.setEmpno((long) 8888);<br />          e.setEName("mike");<br />          ...<br />          EmpDAO d=new EmpDAO();<br />          d.save(e);      //持久化<br />          ...<br /><br />持久状态:持久化对象的实例在数据库中有对应的记录，并拥有一个持久化表示（ID）。对持久化对象进行delete操作后，数据库中对应的记录将被删除，那么持久化对象与数据库记录不再存在对应关系，持久化对象变成临时状态。<br />    持久化对象被修改变更后，不会马上同步到数据库，知道数据库事务提交。在同步之前，持久化对象是脏的（Dirty）。<br />例如：<br />          Emp e=new Emp(); //创建了临时的对象<br />          EmpDAO edao= new empDAO();<br />          e=edao.findbyEmpno((long) 7786);    //使对象与数据库记录对应，从而持久化<br />          e.setEname("新的名字");                     //修改了持久化对象，使之处于 Dirty<br />          ......<br />          edao.saveorupdate(e);                      //保存，但是仍然 Dirty<br />          tran.commit();                                     //提交，实现与数据库同步，不再Dirty<br />          ......<br /><br />游离状态：当Session进行了Close、Clear或者evict后，持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值，但是因为会话已经消失，对象不在持久化管理之内，所以处于游离状态（也叫：脱管状态）。游离状态的对象与临时状态对象是十分相似的，只是它还含有持久化标识。<br /><br /><br />其中，持久化状态的对象，简称为：PO<br />而临时状态和游离状态的对象，简称为： VO
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/157941#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 10:22:54 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/157941</link>
        <guid>http://yollywu.javaeye.com/blog/157941</guid>
      </item>
      <item>
        <title>[收藏]中国惠普前总裁孙振耀谈人生(转载)</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/156892" style="color:red;">http://yollywu.javaeye.com/blog/156892</a>&nbsp;
          发表时间: 2008年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.cnblogs.com/dudu/archive/2007/12/22/1010388.html" target="_blank">http://www.cnblogs.com/dudu/archive/2007/12/22/1010388.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/156892#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jan 2008 14:19:38 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/156892</link>
        <guid>http://yollywu.javaeye.com/blog/156892</guid>
      </item>
      <item>
        <title>Builder模式与Configuration</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/155712" style="color:red;">http://yollywu.javaeye.com/blog/155712</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          摘自:http://www.jdon.com/designpatterns/builder.htm<br />Builder模式定义:<br />将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.<br /><br />Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.<br /><br />为何使用?<br />是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件.<br /><br />因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.<br /><br />如何使用?<br />首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示.<br /><br />首先,需要一个接口,它定义如何创建复杂对象的各个部件:<br /><br /><span style="color: red">public interface Builder {<br /><br />　　//创建部件A　　比如创建汽车车轮<br />　　void buildPartA();<br />　　//创建部件B 比如创建汽车方向盘<br />　　void buildPartB();<br />　　//创建部件C 比如创建汽车发动机<br />　　void buildPartC();<br /><br />　　//返回最后组装成品结果 (返回最后装配好的汽车)<br />　　//成品的组装过程不在这里进行,而是转移到下面的Director类中进行.<br />　　//从而实现了解耦过程和部件<br />　　Product getResult();<br /><br />}</span><br /><br />用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:<br /><br />public class Director {<br /><br />　　private Builder builder;<br /><br />　　public Director( Builder builder ) {<br />　　　　this.builder = builder;<br />　　}<br />　　// 将部件partA partB partC最后组成复杂对象<br />　　//这里是将车轮 方向盘和发动机组装成汽车的过程<br />　　public void construct() {<br />　　　　builder.buildPartA();<br />　　　　builder.buildPartB();<br />　　　　builder.buildPartC();<br /><br />　　}<br /><br />}<br /><br />Builder的具体实现ConcreteBuilder:<br />通过具体完成接口Builder来构建或装配产品的部件;<br />定义并明确它所要创建的是什么具体东西;<br />提供一个可以重新获取产品的接口:<br /><br />public class ConcreteBuilder implements Builder {<br /><br />　　Part partA, partB, partC;<br />　　public void buildPartA() {<br />　　　　//这里是具体如何构建partA的代码<br /><br />　　};<br />　　public void buildPartB() {<br />　　　　//这里是具体如何构建partB的代码<br />　　};<br />　　 public void buildPartC() {<br />　　　　//这里是具体如何构建partB的代码<br />　　};<br />　　 public Product getResult() {<br />　　　　//返回最后组装成品结果<br />　　};<br /><br />}<br /><br />复杂对象:产品Product:<br />public interface Product { }<br /><br />复杂对象的部件:<br />public interface Part { }<br /><br /><br />我们看看如何调用Builder模式:<br /><span style="color: red">ConcreteBuilder builder = new ConcreteBuilder();<br />Director director = new Director( builder );<br /><br />director.construct();<br />Product product = builder.getResult();</span><br /><br />Builder模式的应用<br />在Java实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.<br /><br />"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件.<br /><br />在sf.cft.configuration中<br />使用Hibernate的第一个步骤是要对其进行配置：<br />Configuration cfg = new Configuration()<br />    .addFile("Vertex.hbm.xml")<br />    .addFile("Edge.hbm.xml");<br /><br />net.sf.hibernate.cfg.Configuration的一个实例代表了应用程序中所有的Java类到关系数据库的映射的集合<br />在Configuration中，有大量的addXXX方法，这些方法共同的目的是把映射信息加到映射集合中，其最核心的方法是：<br />protected void add(org.dom4j.Document doc)<br /><br />在添加完映射的集合之后，紧接着就是生成SessionFactory。<br />//返回一个Session工厂实现类对象。<br /><span style="color: red">	public SessionFactory buildSessionFactory() throws HibernateException {<br />		secondPassCompile();<br />		validate();<br />		Environment.verifyProperties(properties);<br />		Properties copy = new Properties();<br />		copy.putAll(properties);<br />		Settings settings = buildSettings();<br />		configureCaches(settings);<br />		return new SessionFactoryImpl(this, settings);<br />	}<br /></span><br />Configuration使用了Builder模式，主要完成SessionFactory的构建与生成。
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/155712#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 17:02:08 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/155712</link>
        <guid>http://yollywu.javaeye.com/blog/155712</guid>
      </item>
      <item>
        <title>关于xml导入数据库</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/137733" style="color:red;">http://yollywu.javaeye.com/blog/137733</a>&nbsp;
          发表时间: 2007年11月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp; 以前做过一个应用，通过一个XML文件，在两个不同的系统间传递信息，两套系统的数据库设计是不一样的，其中的XML文件包含了数据库信息，比如表名 表字段 以及数据。最终的结果是两套系统能够相互的导入对方导出的XML包含的信息进自己的数据库<br />
&nbsp;&nbsp; 1.那是我第一次做关于XML相关的东西，所以方法比较死，dom4j对每个节点进行解析，通过迭代最终相当于将一个包含一张表一条记录的信息放进一个对象，最终传递到入库前是一个list。(一个xml文件包含了库中表结构和数据)<br />
&nbsp;&nbsp; 2.现在做的一个模块通过前期的一些工作后,因为这次做的信息来源(xml文件等)并不是协商好的，所以我只能单方研究，剥离到最后，剩下的工作是一堆xml文件，要导入数据库。遇到的麻烦事:<br />
&nbsp;&nbsp; A:通过程序接压缩.dat文件，得到xml文件以及schema文件。<br />
&nbsp;&nbsp; B:如果我像以前一样，指定解析节点名称,8个xml不是要8个解析方法(当然或许要更好地办法，我这里是用以前的办法，解析一个就存入指定实体对象)<br />
&nbsp;&nbsp; C:xml文件中(一个xml文件==一张数据库表)的库结构与现有库是不一致的，有可能比现有库的字段多，也有可能比现有库字段少。<br />
&nbsp;&nbsp; D:想找个通用的方法解析这N个XML文件，在解析以后能够形成比较好的存储结构。<br />
&nbsp;&nbsp; E:怀疑是不是我的对象思想太差咯。。 <br />
&nbsp;&nbsp; F:以上除却了另外一些判断逻辑。
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/137733#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 Nov 2007 10:07:46 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/137733</link>
        <guid>http://yollywu.javaeye.com/blog/137733</guid>
      </item>
      <item>
        <title>碰到的一个编码问题</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/113409" style="color:red;">http://yollywu.javaeye.com/blog/113409</a>&nbsp;
          发表时间: 2007年08月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          系统有两个子系统，一个是BS的，一个是delphi做的CS，中间的数据传输是通过XML进行传输的。在XML传输的功能实现后，要求对XML进行加密解密.加密解密算法是CS端用delphi写的，然后这边用JAVA写个同样的算法。现在碰到的一个问题是:<br />  用该算法的时候，CS和BS各自都能够加解密,我这边的过程是这样的。我这边解密的过程是这样的，首先获取到CS那边的加密文件，然后通过 <pre name="code" class="java">  
        StringBuffer strbuf = new StringBuffer();
	try {
		FileInputStream in = new FileInputStream(file);
		int size = 0;
		byte [] buf = new byte[1024];	
		while ((size=in.read(buf)) != -1) {
			strbuf.append(new String(buf,0,size));
		}
		
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
       return strbuf;
          </pre><br /> 在得到返回的StringBuffer的基础上，对StringBuffer进行解密操作。<br />      <pre name="code" class="java">  StringBuffer xmlStr=new StringBuffer("");
       xmlStr.append(encode.UnEncryptString(readBuf,key));</pre> <br /> 然后在得到解密后的字符串写入XML文件<br />       有两种方式，一种是写入普通 ，另外一种是采用dom4j提供的字符串转XML的方式<br />      <pre name="code" class="java">
       Document doc = DocumentHelper.parseText(xmlStr.toString());
       OutputFormat format = OutputFormat.createPrettyPrint();
       FileOutputStream writefile=new FileOutputStream(importFile);//输出流，用来接受生成的xml表示的doc	
       format.setEncoding("UTF-8");
       XMLWriter writer=new XMLWriter(writefile,format);  		
       writer.write(doc);
</pre> 	<br />       最终不管我采用什么方式结论是中文始终是乱码。<br />       我想问的问题是<br />       1. 如果双方导入导出的都是标准的XML文件(UTF-8)，在此基础上进行加密，<br />          那么在以后读取与写入文件(无论是字节流还是字符流或其他的)过程中，是不是都不涉及到转碼的  问题。<br />       2.在此过程中，正常的情况编码可能需要变化的是什么地方。<br />       3.一个前提是算法没有问题，单独的不涉及文件存储，双方是可以互加解密。
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/113409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 17 Aug 2007 09:57:21 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/113409</link>
        <guid>http://yollywu.javaeye.com/blog/113409</guid>
      </item>
      <item>
        <title>Oracle数据库迁移碰到的问题</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/90156" style="color:red;">http://yollywu.javaeye.com/blog/90156</a>&nbsp;
          发表时间: 2007年06月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          数据库迁移碰到的问题：这段SQL表示搜索日期早于to_date的内容<br />   query=query+ " and {createdate}&lt;=to_date('"+timeend+" 23:59:59','YYYY-MM-DD HH24:mi:ss')";<br />   page.setQueryString(query)；<br />to_date()是Oracle特有的函数，用来转换时间格式,在系统设计的时候，‘timeend’是传递过来的字符串类型的值<br />   现在想要改成不同数据库都支持的话，必须把to_date()给替换掉，同时又不影响整个SQL语句表达的最后结果！<br />   我尝试使用API中的Date类或者其他的类，似乎都不能解决问题，createdate的类型是Date，to_date起到的作用就是把字符串转化为日期。<br />   比如用户选择的日期是2007-8-8，最后转化后还是2007-8-8，所以使用<br />        SimpleDateFormat   sdf   =   <br />		  new   SimpleDateFormat("yyyy-MM-dd");   <br />		                          d   =   sdf.parse(bYmd); 等方法是不能成功的。<br />   <br />   最后有种解决方法是，另外写个类，写个方法判断数据库的类型，把to_date再封装次，如果是Oracle就不to_date当做字符串传递过去，如果不是则使用对应各种数据库可以转化日期的方法。<br />   比如 <br />    String sql=query+ " and {createdate}&lt;=to_date('"+timeend+" 23:59:59','YYYY-MM-DD HH24:mi:ss')";<br />    B.getSql(sql);<br />   如果判断是Oracle，则sql不变，如果不是，则修改to_date为对应数据库的方法。<br />   有种最简单的方法就是把数据库字段类型改了去<img src="/images/smiles/icon_biggrin.gif"/>，可惜经理可能会不同意。<br />   不知道上面方法的可行性怎么样..还有没有更好的方法。<br />   <br /><ul>[list=]</ul>[/list]
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/90156#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Jun 2007 15:40:26 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/90156</link>
        <guid>http://yollywu.javaeye.com/blog/90156</guid>
      </item>
      <item>
        <title>碰到的actionForm的问题</title>
        <author>yollywu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yollywu.javaeye.com">yollywu</a>&nbsp;
          链接：<a href="http://yollywu.javaeye.com/blog/81335" style="color:red;">http://yollywu.javaeye.com/blog/81335</a>&nbsp;
          发表时间: 2007年05月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　　这个问题是这样的，第一个页面是获取到的数据库中某张表的记录列表，<br />   　<br />然后可以选中编号进行增删改操作，'/edms/initialEditClient.do?clientId='+clientId;<br />  　<br />初始化编辑触发动作的initalEditClientaction()  通过选种的记录id来查找到实体(<br />     <br />Client client=clientdao.getById(clientInfoForm.getClientId()))，<br />    <br /> 然后通过设置actionForm各种属性<br />     clientInfoForm.setXX(client.getXX);<br />　　　<br />　　　正常情况下，成功的页面可以接受和显示通过clientInfoForm传递的属性值.<br /><br />　　　但是我这边碰到的问题是在action中，可以获取到所有的属性，但是在ＪＳＰ显示页面什么都没传递过去，　<br />　　　我分析了，配置文件没问题，找了好几个人看.开始因为我的actiongForm是通过让POJO类继承ActionForm,开始以为是这个原因导致不能回显，后来重新建了个actiongForm，还是没能解决问题.<br />　　　真的找不到什么原因..
          <br/>
          <span style="color:red;">
            <a href="http://yollywu.javaeye.com/blog/81335#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 May 2007 23:35:24 +0800</pubDate>
        <link>http://yollywu.javaeye.com/blog/81335</link>
        <guid>http://yollywu.javaeye.com/blog/81335</guid>
      </item>
  </channel>
</rss>