<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye博客</title>
    <description>Java博客,Ruby on Rails博客,AJAX博客,Agile博客 -- JavaEye做最棒的软件开发交流社区</description>
    <link>http://www.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>java操作excel</title>
        <author>haowei0315</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://haowei0315.javaeye.com">haowei0315</a>&nbsp;
                    链接：<a href="http://haowei0315.javaeye.com/blog/252330" style="color:red;">http://haowei0315.javaeye.com/blog/252330</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;最近在搞一个java读取excel2007操作(包括读写)的程序,发现2007的已变成xlsx的文件了,以前用jxl.jar不支持,请问有什么好的解决方法吗?</p>
          <br/>
          <span style="color:red;">
            <a href="http://haowei0315.javaeye.com/blog/252330#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 17:28:12 +0800</pubDate>
        <link>http://haowei0315.javaeye.com/blog/252330</link>
        <guid>http://haowei0315.javaeye.com/blog/252330</guid>
      </item>
          <item>
        <title>新装ORACLE 10g乱码解决方案</title>
        <author>gzspark</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gzspark.javaeye.com">gzspark</a>&nbsp;
                    链接：<a href="http://gzspark.javaeye.com/blog/252322" style="color:red;">http://gzspark.javaeye.com/blog/252322</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          NND，N年不用Oracle之后，还是被逼要用上它（谁让用户为王呢）！仔细回忆下四五年前的安装步骤，先到Oracle.com上下载个10g。找个Xmanager装上，用SecureCRT登录服务器（我打算装在linux下）export输出到本机IP。然后是漫长的等待！<br /><br />好象经历过这么多年oracle的一切都未改变，很顺利就完成了。嗯，用我做的数据库迁移工具把数据导进oracle。加载应用，启动！<br /><br />喂...怎么回事，我的界面上怎么那么多????，晕倒！乱码！又见乱码！<br /><br />按着网上的教程做了几遍后终于死心的我，只好紧急求救DBA了，这哥们先是教育我一通，你找的网上教程是一篇被广泛传播的错误文章，晕倒！不管了，你说怎么能折腾回来就行！求得正解，试验成功，并分享如下：<br /><br />sqlplus " / as sysdba"<br />sql>shutdown immediate;<br />sql>startup mount;<br />sql>alter system enable restricted session;&nbsp; <br />sql>alter database open;<br />sql>alter database character set INTERNAL_USE ZHS16GBK;<br />sql>shutdown immediate;<br />sql>startup mount;<br /><br /><br />环境：CentOS 4.3 + Oracle 10g2 <br /><br />本人原创文章，欢迎转载，转载请注明出处！
          <br/>
          <span style="color:red;">
            <a href="http://gzspark.javaeye.com/blog/252322#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 16:56:16 +0800</pubDate>
        <link>http://gzspark.javaeye.com/blog/252322</link>
        <guid>http://gzspark.javaeye.com/blog/252322</guid>
      </item>
          <item>
        <title>委托与事件讲解</title>
        <author>liaozh2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liaozh2004.javaeye.com">liaozh2004</a>&nbsp;
                    链接：<a href="http://liaozh2004.javaeye.com/blog/252294" style="color:red;">http://liaozh2004.javaeye.com/blog/252294</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          事件与委托似乎很难以理解，这是因为它们的使用方式与常用的编码有很大的差别，例如通常编写的都是同步代码，调用一个类型的方法，会即刻出现方法执行的结果，这是符合逻辑的。但在某些情况中，同步代码未必满足需求，拿公共汽车来打个比方，如果交通管制中心希望每一辆公车到达一个站点时都发送给自己一个信号以便自己能够随时掌握交通状况，使用同步代码，公汽对象肯定需要调用管制中心对象，这样就出现了我们一直不愿意看到的情况：两个类型紧密地耦合在一起。既然要其它类型对自己的行为作出反应，亲自调用其类型的方法似乎不可避免，在同步代码中，很难避免这种紧密的类型调用关系。<br /><br />另一个差别是在一般情况下，我们只将属性作为参数传递给方法，而很少会考虑将一个方法传递给另一个方法。<br /><br /> <br /><br />我们抛弃各种C#参考书中桀骜难懂的事件与委托概念，设想一个情景来理解事件与委托的使用：有一家IT公司，董事长不希望自己的雇员在上班时间玩游戏，但又不可能每时每刻都盯着每个雇员，因此，他希望使用一种新的方式实现监视雇员的效果：如果有雇员违反规定，某个设备或专门的监查人员将自动发出一个消息通知他，董事长只需要在事情发生时进行处理。<br /><br />因此，这个用例实际上是两种类型——董事长类与雇员类——之间的交互，下面的代码将给读者展示如何使用委托与事件机制实现这种交互：<br /><br />首先，我们需要在董事长类与雇员类之间定义一个委托类型，用于传递两者之间的事件，这个类型就是一个监视设备或专门负责打小报告的监查人员：<br /><br />public delegate void DelegateClassHandle();<br /><br />定义一个委托的过程类似方法的定义，但它没有方法体。定义委托一定要添加关键字delegate。由于定义委托实际上相当一个类，因此可以在定义类的任何地方定义委托。另外，根据委托的可见性，也可以添加一般的访问修饰符，如public、private和protected。<br /><br />委托的返回值类型为void，这并非表示委托类型本身带有返回值，该返回值类型是指委托的目标函数类型，即它委托的一个事件处理函数返回值是void类型。<br /><br />新建一个雇员类Employee，其代码如下：<br /><br />public class Employee<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; public event DelegateClassHandle PlayGame;<br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; public void Games()<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PlayGame != null)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlayGame();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />雇员类Employee代码中定义了一个DelegateClassHandle类型的事件PlayGame，它的定义方式也很特殊，首先必须使用关键字event，表示PlayGame是一个事件，同时还必须声明该事件的委托类型为DelegateClassHandle，即将来由该类型的委托对象负责通知事件。<br /><br />如果有雇员开始玩游戏，它将执行Games方法，而只要该方法一被调用，就会触发一个事件PlayGame，然后董事长就会收到这个事件的消息——有人在玩游戏了。<br /><br />董事长类代码如下，他有一个方法Notify用于接收消息：<br /><br />public class Admin<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; public void Notify()<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Console.WriteLine("someone is playing game");<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />Employee的PlayGame事件如何与Admin的Notify方法关联起来呢？只需通过事件绑定即可实现，具体过程如下列代码：<br /><br />Employee employee = new Employee();<br /><br />Admin admin = new Admin();<br /><br /> <br /><br />employee.PlayGame += new DelegateClassHandle(admin.Notify);<br /><br />employee.Games();<br /><br />请大家注意事件绑定的代码：<br /><br />employee.PlayGame += new DelegateClassHandle(admin.Notify);<br /><br />通过DelegateClassHandle将两个类的交互进行了绑定，当employee.Games方法调用后，触发PlayGame事件，而该事件将被委托给admin的Notify方法处理，通知董事长有雇员在上班时间玩游戏。<br /><br />但董事长并不满足这种简单的通知，他还想知道究竟是谁在上班时间违反规定。显然，现在委托对象必须传递必要的参数才行，这个要求也可以很容易地办到。事件的参数可以设置为任何类型的数据，在.NET框架中，还提供了事件参数基类EventArgs专门用于传递事件数据。<br /><br />从该EventArgs类派生一个自定义的事件参数类CustomeEventArgs，这个类型将携带雇员姓名和年龄信息：<br /><br />public class CustomeEvetnArgs : EventArgs<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; string name = "";<br /><br />&nbsp;&nbsp;&nbsp; int age = 0;<br /><br />&nbsp;&nbsp;&nbsp; public CustomeEvetnArgs()<br /><br />&nbsp;&nbsp;&nbsp; { }<br /><br />&nbsp;&nbsp;&nbsp; public string Name<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return this.name; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { this.name = value; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public int Age<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return this.age; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { this.age = value; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />修改委托类型DelegateClassHandle的定义，让其携带必要的参数：<br /><br />public delegate void DelegateClassHandle(object sender, CustomeEvetnArgs e);<br /><br />雇员类的代码修改后如下：<br /><br />public class Employee<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; private string _name;<br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; public string Name<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return _name; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { _name = value; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; private int _age;<br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; public int Age<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get { return _age; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set { _age = value; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; public event DelegateClassHandle PlayGame;<br /><br /> <br /><br />&nbsp;&nbsp;&nbsp; public void Games()<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PlayGame != null)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CustomeEvetnArgs e = new CustomeEvetnArgs();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Name = this._name ;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Age = this._age;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlayGame(this, e);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />在Games方法中，首先新建一个CustomeEventArgs对象，然后设置了必要的属性Name和Age。<br /><br />董事长的通知方法也必须相应地进行修改：<br /><br />public class Admin<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; public void Notify(object sender, CustomeEvetnArgs e)<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Console.WriteLine(e.Name+" is "+e.Age.ToString());<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />将两个类型对象进行关联的代码也需要进行相应的修改：<br /><br />Employee employee = new Employee();<br /><br />employee.Name = "Mike";<br /><br />employee.Age = 25;<br /><br />Admin admin = new Admin();<br /><br /> <br /><br />employee.PlayGame += new DelegateClassHandle(admin.Notify);<br /><br />employee.Games();<br /><br />修改后的代码运行的结果是，当Mike调用Games方法玩游戏时，会自动触发PlayGame事件，而该事件携带相关信息通知admin，后者的Notify方法将接收到数据并输出“Mike is 25”，告诉董事长是Mike，25岁，正在上班时间玩游戏。<br /><br /> <br /><br />委托是可以多路广播（Mulitcast）的，即一个事件可以委托给多个对象接收并处理。在上面的用例中，如果有另一位经理与董事长具有同样的癖好，也可以让委托对象将雇员的PlayGame事件通知他。<br /><br />首先定义经理类：<br /><br />public class Manager<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp; public void Notify(object sender, CustomeEvetnArgs e)<br /><br />&nbsp;&nbsp;&nbsp; {<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Console.WriteLine(sender.ToString() + "-" + e.Name);<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />}<br /><br />经理Manager类型的Notify方法与Admin一致，他也接受到相应的信息。<br /><br />委托的多路广播绑定的方法仍然是使用+=运算符，其方法如下面的代码所示：<br /><br />Employee employee = new Employee();<br /><br />employee.Name = "Mike";<br /><br />employee.Age = 25;<br /><br />Admin admin = new Admin();<br /><br />Manager manager = new Manager();<br /><br /> <br /><br />employee.PlayGame += new DelegateClassHandle(admin.Notify);<br /><br />employee.PlayGame += new DelegateClassHandle(manager.Notify);<br /><br />employee.Games();<br /><br />执行该方法，读者将看到admin和manager的Notify方法都会被事件通知并调用执行。通过这样的方法，董事长和经理都会知道Mike在玩游戏了。<br /><br />如果董事长不希望经理也收到这个通知，该如何解除PlayGame对manager的事件绑定呢？同样非常简单，在employee.Games方法被调用前执行下列语句即可：<br /><br />employee.PlayGame -= new DelegateClassHandle(manager.Notify);<br /><br /> <br /><br />最后需要提醒读者注意的，Employee类中的Games方法在触发事件PlayGame之前需要判断该事件是否为null。当employee对象的Games方法触发事件PlayGame后，必须有一个目标函数来处理这个事件，而该语句正是判断该目标函数是否存在。如果将这个判断去掉，且对事件不进行任何绑定而直接调用Games方法，程序将在事件PlayGame处弹出一个NullReferenceException的异常。<br /><br />读者能够从委托与事件的代码中得出什么结论吗？两个需要存在调用关系的类型，在各自的实现中却没有编写实际的调用代码，它们只是通过一个事件和一个第三方的委托类型完成了消息的传递过程。两个类型之间不存在任何的紧密耦合，它们看似松散地通过一个委托对象中通信，实现了本书一直宣传的“高聚合”和“低耦合”观点。
          <br/>
          <span style="color:red;">
            <a href="http://liaozh2004.javaeye.com/blog/252294#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 16:10:45 +0800</pubDate>
        <link>http://liaozh2004.javaeye.com/blog/252294</link>
        <guid>http://liaozh2004.javaeye.com/blog/252294</guid>
      </item>
          <item>
        <title>怎么没有看到  PureMVC 的帖子或圈子呀</title>
        <author>whaosoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://whaosoft.javaeye.com">whaosoft</a>&nbsp;
                    链接：<a href="http://whaosoft.javaeye.com/blog/252217" style="color:red;">http://whaosoft.javaeye.com/blog/252217</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          怎么没有看到 PureMVC 的帖子或圈子呀 我是个flex 初学者<br />as可给我弄疯了~~ 呵呵<br />谁有好点的 qq群啊 什么的 哎!!
          <br/>
          <span style="color:red;">
            <a href="http://whaosoft.javaeye.com/blog/252217#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 15:04:59 +0800</pubDate>
        <link>http://whaosoft.javaeye.com/blog/252217</link>
        <guid>http://whaosoft.javaeye.com/blog/252217</guid>
      </item>
          <item>
        <title>查找表里面重复的数据</title>
        <author>liyiye</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liyiye.javaeye.com">liyiye</a>&nbsp;
                    链接：<a href="http://liyiye.javaeye.com/blog/252207" style="color:red;">http://liyiye.javaeye.com/blog/252207</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>第一种办法：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运用存储过程，不过那样比较麻烦。</p>
<p>第二种方法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用sql语句：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000;">&nbsp;&nbsp; select t.account_number,t.insurance_date <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from i_net_value t <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where t.rowid != </span></p>
<p><span style="color: #800000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (select max(t.rowid) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;from i_net_value b <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;where b.account_number = t.account_number and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;b.insurance_date = t.insurance_date)</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liyiye.javaeye.com/blog/252207#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 14:59:09 +0800</pubDate>
        <link>http://liyiye.javaeye.com/blog/252207</link>
        <guid>http://liyiye.javaeye.com/blog/252207</guid>
      </item>
          <item>
        <title>移动中间件和wap网关的比较</title>
        <author>Qlodestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qlodestar.javaeye.com">Qlodestar</a>&nbsp;
                    链接：<a href="http://qlodestar.javaeye.com/blog/252197" style="color:red;">http://qlodestar.javaeye.com/blog/252197</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一、wap网关的做用 <br />对于移动客户端，WAP网关作为服务器，为用户提供了安全、压缩、协议转换等服务；在互联网端，WAP网关作为客户机，向web服务器发出服务请求，通过因特网获取用户需要的信息。如图: <br /><br /><img src="/upload/attachment/42279/d2393a3b-1de5-38cb-a75d-a12c6dbd3819.jpg" height="252" alt="" width="389" /><br /><br /><br />WAP网关解决了无线通讯下的几个关键问题 <br />&nbsp;&nbsp; 安全：数据信息经过压缩编码并加密后才发送手机终端 <br />&nbsp;&nbsp; 协议转换：WAP协议与因特网协议的转换功能 <br />&nbsp;&nbsp; 可靠性：WAP网关的错误校正技术，可以确保网络浏览和数据传输过程不会因无线电通信线路质量的变化而受到严重影响。 <br />但是wap网关的存在如下限制: <br />1.WAP网关没有解决兼容性的问题： <br />&nbsp;&nbsp; WAP只对手机接入提供支持，使用手机中内置的浏览器登录。需要自己解决终端差异性问题 <br />&nbsp;&nbsp; 不同的手机终端对WAP页面的浏览能力不同，老式机型只能支持WML格式，目前部分手机也支持XHTML格式和CHTML格式，智能手机也可以支持常规的html页面和Javascript，除了浏览器的不同，不同型号的手机：屏幕大小，支持的文件格式也不同。 <br />&nbsp;&nbsp; 现在一般的做法是使用开源项目WURFL来适配不同的终端。 <br />2.接入方式单一：无法实现wifi方式接入 <br />3. 终端单一：计算机、电话、家电、汽车等智能设备无法接入 <br /><br />二、移动中间件 <br />&nbsp; 目前常用的移动中间件有SYBASE和IBM两种，和wap网关一样提供无线方式接入、认证、数据同步、安全等功能 <br /><br />图1：ibm的解决方案 <br /><img src="/upload/attachment/42282/b4c3b9ce-2803-31d5-93c7-c1b5c9fee24e.jpg" height="800" alt="" width="907" /><br />图2：sybase的解决方案 </p>
<p><img src="/upload/attachment/42284/d8ad240c-198b-3376-8a5f-f1751dc40c7d.jpg" height="290" alt="" width="481" /><br />图3：cisico的解决方案，不过我觉得CISICO的解放方案是基于wifi接入的，适用性有限 <br /><img src="/upload/attachment/42286/1852ad39-8072-32b2-b79e-1837f5d2a802.jpg" height="800" alt="" width="737" /><br />移动中间件具有WAP网关所没有的优点是 <br />1.缓存：移动中间件具有客户端，客户端实现web的展现、缓存、表单同步，支持浏览显示的控件也更多，应用更丰富。例如M-Business Anywhere Client。同时这对手机终端也产生了要求。 <br />2.内存数据库使用：如果是大型web应用，比如CRM/手机银行等业务，存在动态表单，又存在着大数据量查询、排序的需求，使用常规方式数据量大，手机电池消耗很快，移动中间件可以在客户端使用移动数据库缓存数据，减少数据压力。 <br />3.移动中间件解决了终端兼容性问题，移动中间件实现了手机终端的适配，可以适应不同手机屏幕的变化。 <br />要特别说明的是移动中间件价格都比较昂贵 <br /><br />结论： <br />如果网站复杂度不是特别高，只是表单的提交，显示。采用WAP网关接入有更高的性价比。如果有表单的批量提交(缓存要求)、并且复杂度比较高，有多种终端多种方式接入的需求，可以考虑采用移动中间件实现。 <br /><br />第1次来javaeye，欢迎大家访问我的.net博客：<a href="http://www.cnblogs.com/lodestar">http://www.cnblogs.com/lodestar</a></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://qlodestar.javaeye.com/blog/252197#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 14:42:42 +0800</pubDate>
        <link>http://qlodestar.javaeye.com/blog/252197</link>
        <guid>http://qlodestar.javaeye.com/blog/252197</guid>
      </item>
          <item>
        <title>Android 设计一个可单选，多选的Demo</title>
        <author>wuhua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wuhua.javaeye.com">wuhua</a>&nbsp;
                    链接：<a href="http://wuhua.javaeye.com/blog/252171" style="color:red;">http://wuhua.javaeye.com/blog/252171</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Android 提供了相当多的UI，在android.widget 的UI组件库，下面就让我们看看他是ListView的用法吧。</p>
<p>&nbsp;</p>
<p>下面的Demo 是一个</p>
<p>&nbsp;</p>
<pre name="code" class="java">/*
 * Copyright (C) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package com.example.android.apis.view;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * This example shows how to use choice mode on a list. This list is 
 * in CHOICE_MODE_SINGLE mode, which means the items behave like
 * checkboxes.
 */
public class List10 extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setListAdapter(new ArrayAdapter&lt;String&gt;(this,
                android.R.layout.simple_list_item_single_choice, GENRES));

        final ListView listView = getListView();

        listView.setItemsCanFocus(false);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    }


    private static final String[] GENRES = new String[] {
        &quot;Action&quot;, &quot;Adventure&quot;, &quot;Animation&quot;, &quot;Children&quot;, &quot;Comedy&quot;, &quot;Documentary&quot;, &quot;Drama&quot;,
        &quot;Foreign&quot;, &quot;History&quot;, &quot;Independent&quot;, &quot;Romance&quot;, &quot;Sci-Fi&quot;, &quot;Television&quot;, &quot;Thriller&quot;
    };
</pre>
<p>&nbsp;</p>
<p>上面是一个单选的List Demo。</p>
<p>&nbsp;</p>
<p>对于需要多选的话可以改变这些参数就OK了</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="java">setListAdapter(new ArrayAdapter&lt;String&gt;(this,
                android.R.layout.simple_list_item_multiple_choice, GENRES));

        final ListView listView = getListView();

        listView.setItemsCanFocus(false);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
</pre>
<p>很简单吧，Android的开发确实很不错。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://wuhua.javaeye.com/blog/252171#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 14:24:28 +0800</pubDate>
        <link>http://wuhua.javaeye.com/blog/252171</link>
        <guid>http://wuhua.javaeye.com/blog/252171</guid>
      </item>
          <item>
        <title>hibernate session 过滤器控制</title>
        <author>yushan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yushan.javaeye.com">yushan</a>&nbsp;
                    链接：<a href="http://yushan.javaeye.com/blog/252167" style="color:red;">http://yushan.javaeye.com/blog/252167</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近做一个公司项目的Demo，使用技术为jsp+dwr+hibernate,因为该Demo中所用的表多，有一对一，一对多和多对一的关系，所以利用hibernate的延迟加载（lazy=&quot;true&quot;）对性能的提高相当重要，但随之带来的session管理更为重要，弄不好常出现延迟加载异常，在这里我利用了Filter 来处理session的close的，相关代码如下：</p>
<p>&nbsp;</p>
<p>1.HibernateSessionFactory.java(Eclipse自动生成，通过<span style="color: #ff0000;">ThreadLocal</span>
将session的非线程安全变成安全)</p>
<pre name="code" class="java">import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;


public class HibernateSessionFactory {

    private static final Logger log = Logger.getLogger(SessionFactory.class) ;
	private static final ThreadLocal&lt;Session&gt; threadLocal = new ThreadLocal&lt;Session&gt;();
    private static String CONFIG_FILE_LOCATION = &quot;/hibernate.cfg.xml&quot;;
    private static Configuration configuration = new Configuration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

	static {
    	try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			
			log.error(&quot; error creating sessionFactory&quot;) ;
			e.printStackTrace();
		}
    }
    public HibernateSessionFactory() {
    }
	

    public static Session getSession() throws HibernateException {
    	log.info(&quot;getSession is run&quot;) ;
    	
        Session session = (Session) threadLocal.get();
		if (session == null || !session.isOpen()) {
			log.info(&quot;SessionFactory.getSession() session is null or close&quot;) ;
			if (sessionFactory == null) {
				log.info(&quot;SessionFactory.getSession() rebuildSessionFactory() is running&quot;) ;
				rebuildSessionFactory();
			} 
			session = (sessionFactory != null) ? sessionFactory.openSession(): null;
			threadLocal.set(session);
		}

        return session;
    }


	public static void rebuildSessionFactory() {
		log.info(&quot;rebuildSessionFactory is run&quot;) ;
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			log.error(&quot;erro creating sessionFactory&quot;) ;
			e.printStackTrace();
		}
	}


    public static void closeSession() throws HibernateException {
    	log.info(&quot;closeSession is run&quot;) ;
    	
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
        	log.info(&quot;SessionFactory.closeSession() session is not null&quot;) ;
        	if(!session.isOpen()){
        		System.out.println(&quot;该 session 已经关闭&quot;) ;
        	}
            session.close();
        }
    }


	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}


	public static void setConfigFile(String configFile) {
		SessionFactory.configFile = configFile;
		sessionFactory = null;
	}


	public static Configuration getConfiguration() {
		return configuration;
	}
	


}</pre>
<p>&nbsp;HibernateSessioniFactory主要负责session的开和关。</p>
<p>&nbsp;</p>
<p>2.HibernateSessionFilter(要编写的过滤器，主要处理session的关闭)</p>
<pre name="code" class="java">import java.io.IOException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ad.session.HibernateSessionFactory;

public class HibernateSessionFilter implements Filter {  
    private static final Log log = LogFactory.getLog(HibernateSessionFilter.class);  
    
   
      @Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println(&quot;HibernateSessionFilter is end&quot;) ;
	} 
  
   @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,  
            FilterChain chain) throws IOException, ServletException {  
        log.debug(&quot;HibernateSessionFilter start&quot;);  
        
        try{  
            //request 之前要处理的代码
            chain.doFilter(arg0, arg1);     
           //response之后要要处理的代码    
           
        }catch (Exception e) {  
            e.printStackTrace();             
        }   finally{          
            HibernateSessionFactory.closeSession();            
        }  
  
    }
  
     
   @Override
     public void destroy() {     
       System.out.println(&quot;HibernateSessionFilter is start&quot;) ;
     }  
  
}</pre>
<p>&nbsp; 该过滤器只处理session的关闭，似乎有点浪费了，在这也可以加上字符集的处理。</p>
<p>&nbsp; Filter运行原理(个人认为，有误请多指教)：首先建立一个过滤类，需继承Filter接口，必须实现三个方法：</p>
<p>&nbsp; init：服务器启动时运行该方法，运行期间不执行；</p>
<p>&nbsp;doFilter：运行期间执行，其作用是request之前要做那些工作，response之后(即服务器将内容全部发回View层后)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要做那些工作。每次访问服务器都会执行doFilter方法</p>
<p>&nbsp;destroy：服务器终止时运行。</p>
<p>&nbsp;</p>
<p>3. 在web.xml中的配置如下：</p>
<pre name="code" class="xml">        &lt;filter&gt;
		&lt;filter-name&gt;hibernateSession&lt;/filter-name&gt;
		&lt;filter-class&gt;
			com.c35.ad.filter.HibernateSessionFilter
		&lt;/filter-class&gt;
	&lt;/filter&gt;
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;hibernateSession&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;&lt;!-- 过滤所有发回服务器的请求--&gt;
	&lt;/filter-mapping&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp; 4.dao(demo中的UserDao)</p>
<p>&nbsp;</p>
<pre name="code" class="java">public class UserDao  implements BaseDao {

	private static final Logger log = Logger.getLogger(UserDao.class);
    
	private  Session session  ;
   
	public UserDao(){
       log.info(&quot;UserDao construct is running&quot;) ;    
    	   session = SessionFactory.getSession() ;
    }
    

	@Override
	public boolean save(Object o) {
		log.info(&quot;UserDao save is running &quot;);
		boolean flag = false ;	
		Transaction tran = null;	
		try {		
			tran = session.beginTransaction();
			session.save(o);
			tran.commit();
			flag = true ;
		} catch (Exception e) {
			log.error(&quot;error save user&quot;);
			flag = false ;
			if (tran != null) {
				try {
					tran.rollback();
				} catch (HibernateException e1) {
					log.error(&quot;save Transaction rollback is error &quot;+e1.getMessage()) ;
				}
			}
			e.printStackTrace();
		}finally{
			//session.close() ;//这里就不需要在关闭session直接交给filter来处理
		}
		return flag ;
	}
}</pre>
<p>&nbsp;&nbsp;&nbsp; 以上是本人的学习总结，有误之处请多多指教，希望对刚学hibernate的同志们有所帮助。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://yushan.javaeye.com/blog/252167#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 14:12:23 +0800</pubDate>
        <link>http://yushan.javaeye.com/blog/252167</link>
        <guid>http://yushan.javaeye.com/blog/252167</guid>
      </item>
          <item>
        <title>jQuery +UI + flexgrid做的一个用户管理界面,</title>
        <author>rikugun</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rikugun.javaeye.com">rikugun</a>&nbsp;
                    链接：<a href="http://rikugun.javaeye.com/blog/252165" style="color:red;">http://rikugun.javaeye.com/blog/252165</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          list.html<br /><pre name="code" class="html">
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>会员管理&lt;/title>
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      &lt;link rel="stylesheet" type="text/css" href="../resources/css/jq/default/ui.all.css">
    &lt;link rel="stylesheet" type="text/css" href="../resources/css/flexigrid/flexigrid.css">
    &lt;script type="text/javascript" src="../resources/js/jquery.js">&lt;/script>
    &lt;script type="text/javascript" src="../resources/js/jquery.ui.all.js">&lt;/script>
    &lt;script type="text/javascript" src="../resources/js/jquery.form.js">&lt;/script>
    &lt;script type="text/javascript" src="../resources/js/flexigrid.js">&lt;/script>
    &lt;script type="text/javascript" src="../resources/js/manage_user.js">&lt;/script>
    &lt;style>

              .flexigrid div.fbutton .add
              {
                background: url(../resources/css/images/add.png) no-repeat center left;
              }

              .flexigrid div.fbutton .delete
              {
                background: url(../resources/css/images/close.png) no-repeat center left;
              }

    &lt;/style>
  &lt;/head>
  &lt;body>
    &lt;div id="grid">&lt;/div>
    &lt;div id="panle" style="display:none;">
      &lt;div id="dialog_div">
        &lt;form action="?module=user&amp;act=insertorupdate" id="dialog_form">
          &lt;input type="hidden" name="MemberID"/>
          登录名:&lt;input type="text" name="UserName"/>&lt;br/>
          密码:&lt;input type="password" name="PassWord"/>&lt;br/>
          真实名称:&lt;input type="text" name="LinkMan"/>&lt;br/>
          联系电话:&lt;input type="text" name="OperateTel"/>&lt;br/>
          Email:&lt;input type="text" name="Email"/>&lt;br/>
        &lt;/form>
      &lt;/div>
    &lt;/div>
  &lt;/body>
&lt;/html>

</pre><br /><br />manage_user.js<br /><pre name="code" class="js">
$(function(){
    $('#dialog_div').dialog({
        hide:'',    //点击关闭是隐藏,如果不加这项,关闭弹窗后再点就会出错.
        autoOpen:false,
        height:250,
        modal:true, //蒙层
        title:'个人用户管理',
        overlay: {
            opacity: 0.5,
            background: "black"
        },
        buttons:{
            '提交':function(){
                addUser();
            },
            '取消':function(){
                $(this).dialog("close");
            },
            '重置':function(){
                $(this).children('form')[0].reset();
            }
        }
    });
    $('#grid').flexigrid({
        url: '?module=user&amp;act=list&amp;isajax=1',
        dataType: 'json',
        colModel : [
        {
        display: 'id',
        name : 'MemberID',
        hide:true
        },
        {
        display: '登录名',
        name : 'UserName',
        width : 150,
        sortable : true,
        align: 'center'
        },
        {
        display: '密码',
        name : 'PassWord',
        width : 150,
        hide:true
        },
        {
        display: '真实姓名',
        name : 'LinkMan',
        width : 100,
        sortable : true,
        align: 'left'
        },

        {
        display: '联系电话',
        name : 'OperateTel',
        width : 150,
        sortable : true,
        align: 'left'
        },

        {
        display: 'Email',
        name : 'Email',
        width : 250,
        sortable : true,
        align: 'left'
        }
        ],
        buttons : [
        {
        name: '添加',
        bclass: 'add',
        onpress : call
        },
        {
        name: '修改',
        bclass: 'add',
        onpress : call
        },
        {
        name: '删除',
        bclass: 'delete',
        onpress : call
        },

        {
            separator: true
    }
    ],
    searchitems : [
    {
    display: '登录名',
    name : 'UserName'
    },

    {
    display: 'Email',
    name : 'Email'
    }
    ],
    sortname: "memberid",
    sortorder: "asc",
    usepager: true,
    title: '用户管理',
    useRp: true,
    rp: 20,
    showTableToggleBtn: true,
    width: 750,
    height: 400
    
    });

});

/**
 * 更新用户
 */
function call(com,grid) {
    switch (com) {
        case '添加':
            $('#dialog_div').dialog('open').children('form')[0].reset();
            break;
        case '修改':
            selected_count=$('.trSelected',grid).length;
            if (selected_count==0) {
                alert('请选择一条记录');
                return;
            }
            if(selected_count>1){
                alert('抱歉只能同时修改一条');
                return;
            }
            data=new Array();
            $('.trSelected td',grid).each(function(i){
                data[i]=$(this).children('div').text();
            });
            form=$('#dialog_div').dialog('open').children('form');
            form.children('input[name=MemberID]').val(data[0]);
            form.children('input[name=UserName]').val(data[1]);
            form.children('input[name=PassWord]').val(data[2]);
            form.children('input[name=LinkMan]').val(data[3]);
            form.children('input[name=OperateTel]').val(data[4]);
            form.children('input[name=Email]').val(data[5]);
            $('#dialog_div').dialog('open');
            break;
        case '删除':
            names='';
            $('.trSelected td:nth-child(2) div',grid).each(function(i){
                if(i)names+=',';
                names+=$(this).text();
            });
            ids='';
            $('.trSelected td:nth-child(1) div',grid).each(function(i){
                if(i)ids+=',';
                ids+=$(this).text();
            })
            if(confirm("确定删除用户["+names+"]?")){
                delUser(ids);
            }
            break;
        
    }
    
}

function addUser(){
    $('#dialog_form').ajaxSubmit({
        type:'POST',
        dataType:'json',
        resetForm:true,
        success:function(){
        $('#grid').flexReload();
        }
    });
    
}
function delUser(ids){
    $.ajax({
        url:'?module=user&amp;act=delete',
        data:{
            MemberID:ids
        },
        type:'POST',
        dataType:'json',
        success:function(){
           $('#grid').flexReload();
        }
    });
     
}
</pre><br /><br />user.php 的部分<br /><pre name="code" class="php">
function  onList(){
        $in     = &amp;$this->in;
        $tpl     = &amp;$this->tpl;
        $dataset = &amp;$this->objDataSet;
        $isAjax = $in['isajax'];
        $page = $_POST['page'];
        $rp = $_POST['rp'];
        $sortname = $_POST['sortname'];
        $sortorder = $_POST['sortorder'];

        if (!$sortname) $sortname = 'MemberID';
        if (!$sortorder) $sortorder = 'desc';

        $sort = "ORDER BY $sortname $sortorder";

        if (!$page) $page = 1;
        if (!$rp) $rp = 10;

        $start = (($page-1) * $rp);

        $limit = "LIMIT $start, $rp ";

        $sql="select MemberID,UserName,PassWord,LinkMan,OperateTel,Email from user $sort";

        $total=$dataset->runSql("select count(*) as total from user");
        $total=(int)$total['total'];

        $result=$dataset->getLista($sql,$rp,$start);
        //        $this->fp->fb($result);
        $ret="{'page':$page,'total':$total,'rows':[";
        foreach($result as $key=>$row){
            if($key>0)$ret.=",";
            $ret.="{'id':".$row[MemberID].",";
            $ret.="'cell':[";
            $i=0;
            foreach($row as $k=>$val){
                if($i)$ret.=",";
                $ret.="'".$val."'";
                $i++;
            }
            $ret.="]}";
        }
        $ret.="]}";
        if($isAjax){
            $tpl->assign('ret',$ret);
            $tpl->display('./rep.json');
        }else{
            //            $tpl->assign('entities',$result);
            $tpl->display(SKIN_FILE.'user/list.html');
        }
    }

    //会员添加
    function onInsertOrUpdate(){
        $in      = &amp;$this->in;
        $tpl     = &amp;$this->tpl;
        $dataset = &amp;$this->objDataSet;

        $data = array(
            UserName       => trim($in[UserName]),
            PassWord       => $in[PassWord],
            Email          => trim($in[Email]),
            OperateTel     => trim($in[OperateTel]),
            LinkMan        => trim($in[LinkMan]),
            CreateTime     => time(),
        );
        if(!empty($in['MemberID'])){
            $MemberID = $dataset->update($data,"MemberID=".$in['MemberID'],"user");
        }else{
            $data['PassWord']=md5($data['PassWord']);
            $MemberID = $dataset->insert($data,"user");
        }

        $ret=json_encode(array('succees'=>true,'msg'=>'更新成功!'));
        $tpl->assign('ret',$ret);
        $tpl->display('./rep.json');
    }

    function onDelete(){
        $in = &amp;$this->in;
        $tpl = &amp;$this->tpl;
        $dataset = &amp;$this->objDataSet;
        $dataset->delete("MemberID in(0,".$in['MemberID'].")",'user');
        $ret=json_encode(array('succees'=>true,'msg'=>'删除成功!'));
        $tpl->assign('ret',$ret);
        $tpl->display('./rep.json');
    }
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://rikugun.javaeye.com/blog/252165#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 14:10:53 +0800</pubDate>
        <link>http://rikugun.javaeye.com/blog/252165</link>
        <guid>http://rikugun.javaeye.com/blog/252165</guid>
      </item>
          <item>
        <title>工作中的sql</title>
        <author>qmug</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qmug.javaeye.com">qmug</a>&nbsp;
                    链接：<a href="http://qmug.javaeye.com/blog/252152" style="color:red;">http://qmug.javaeye.com/blog/252152</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Isnull、like、top、order by desc、convert、substring、as<br /><br />工作中的例子<br /><br />1.<br />select top 1 convert(float,isnull(gryjce,0.001))*2 as gryjce from vet_gryjce_zgzt&nbsp; where kh=convert(int,'%v') order by gryjce desc<br /><br />其中 <br />kh=convert(int,'%v')&nbsp; ‘%v’对应的是userId字符型&nbsp; 这里的convert的用法是int和字符型相互转化，实现的是如果输入的是以0开头的卡号就去掉0。<br /><br />convert(float,isnull(gryjce,0.001))*2是把缴存额乘以2得出的结果<br /><br />top 1是查询出来的1条结果<br /><br />isnull(gryjce,0.001) 如果查询出来gryjce的结果是null 就赋值为0.001<br /><br />order by gryjce desc 是按照 gryjce 降幂排序，如果用升序（ASC）默认为升序。<br /><br />select * from vet_gryjce_zgzt where sfzh like '%x%'<br />like模糊查询<br /><br />2.<br />select top 1 convert(float,isnull(gryjce,0.001))*2 as gryjce <br />from vet_gryjce_zgzt <br />where kh=convert(int,'%v') and convert(int,qsyf)&lt;='%v' and '%v'&lt;=convert(int,zzyf)<br /><br />你想查询出来的结果是在qsyf 和 zzyf 字段之间 第一个'%v'是卡号，后二个'%v'是输入的日期 <br /><br /><br />3.<br />select * from vet_gryjce_zgzt where sfzh=left('21010219660416575*',17)+'x' or sfzh='21010219660416575*' <br />把*替换X的功能 <br /><br /><br /><br />4.<br />select top 1 isnull(bjye,0.001) as bjye from vet_bjye_qsrq where kh=convert(int,'%v') order by qsrq desc<br />As是重新命名<br />select bjye from vet_bjye_qsrq where sfzh=left('%v',17)+'x' or sfzh='%v' and substring(qsrq,1,6)='%v'<br /><br />第一个’%v’是身份证号<br />substring(qsrq,1,6)='%v' 是输入6位所查询时间的年月（如200808）。
          <br/>
          <span style="color:red;">
            <a href="http://qmug.javaeye.com/blog/252152#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 14:00:20 +0800</pubDate>
        <link>http://qmug.javaeye.com/blog/252152</link>
        <guid>http://qmug.javaeye.com/blog/252152</guid>
      </item>
          <item>
        <title>网站优化二 数据库的访问</title>
        <author>east_java</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://japi.javaeye.com">east_java</a>&nbsp;
                    链接：<a href="http://japi.javaeye.com/blog/252138" style="color:red;">http://japi.javaeye.com/blog/252138</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于数据库的优化有几个方法<br />第一:SQL的优化<br />第二:设置连接池<br />第三:二级缓存<br /><br />对于SQL的优化,关键一点就是能一条语句搞定的就一次性搞定.不可用循环查了一次又一次.<br /><br />连接池,现在JAVA中一般使用C3P0,Proxool...<br />经过一段时间的使用<br />Proxool从开始就没有使用成功,本地机可以,发布到远程机就失败.<br />C3P0使用,经常出现各种错误,最常见的是死锁.占用资源也比较大.<br /><br /><br />对于二级缓存,使用ehcache<br /><div class="quote_title">引用</div><div class="quote_div"><br />连接池的性能在整个JavaEE性能中只占很小的比重，重要的是使用cache，避免对数据库的访问，这才对性能有几倍甚至10倍提高，而一旦对数据库产生访问，连接池的性能对整体性能来讲只是车水杯薪，所以，我一直建议不要在连接池上花费时间，而且这种比较没有意义，浪费时间精力。</div>
          <br/>
          <span style="color:red;">
            <a href="http://japi.javaeye.com/blog/252138#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 13:39:55 +0800</pubDate>
        <link>http://japi.javaeye.com/blog/252138</link>
        <guid>http://japi.javaeye.com/blog/252138</guid>
      </item>
          <item>
        <title>Javascript常用的操作（1）</title>
        <author>zhuzhsh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhuzhsh.javaeye.com">zhuzhsh</a>&nbsp;
                    链接：<a href="http://zhuzhsh.javaeye.com/blog/252137" style="color:red;">http://zhuzhsh.javaeye.com/blog/252137</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.小数取整</strong></p>
<p>&nbsp; Math.round(num)四舍五入 &nbsp; <br />&nbsp; Math.floor(num)小于等于num的整数 &nbsp; <br />&nbsp; Math.ceil()大于等于num的整数(多用于翻页计算等)</p>
<p><strong>2.获取含双字节字符的字符串的实际长度(多用于数据列表时剪切掉过长字符串的问题)</strong></p>
<p>一般情况的直接获取的字符串的长度都把双字节的字符看作一个字节，这时计算出来的长度是不正确的。这个时候可以进行一下转换，把双字节的字符用单字节的字符代替如下所示：</p>
<p>&nbsp;var s="thisis中文";</p>
<p>&nbsp;alert(s.length)；//这时显示的数字是8</p>
<p>&nbsp;alert(s.replace(/[^\x00-\xff]/g,"**").length);//这时显示的数字是10</p>
<p><strong>3.&nbsp;把字符串两边的空格剪切掉</strong></p>
<p>&nbsp;&nbsp;var s="&nbsp; 你好啊&nbsp; ";&nbsp;</p>
<p>&nbsp; alert(s.replace(/(^\s*)|(\s*$)/g,""));&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://zhuzhsh.javaeye.com/blog/252137#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 13:37:38 +0800</pubDate>
        <link>http://zhuzhsh.javaeye.com/blog/252137</link>
        <guid>http://zhuzhsh.javaeye.com/blog/252137</guid>
      </item>
          <item>
        <title>将Eclipse RCP与Java Web Start结合发布为web应用(1)</title>
        <author>defrag_sly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://defrag-sly.javaeye.com">defrag_sly</a>&nbsp;
                    链接：<a href="http://defrag-sly.javaeye.com/blog/252136" style="color:red;">http://defrag-sly.javaeye.com/blog/252136</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          将Eclipse RCP与Java Web Start结合发布为web应用，可以替代原有的java Applet提供一个更易扩展，更新，组件间耦合度更低，功能更强的应用程序。可以为web上的特定应用提供解决方案。B/S结构的应用程序客户端不再局限于浏览器。<br />1、	创建RCP工程：<br />&nbsp;&nbsp;&nbsp; 使用插件工程创建向导，创建一个插件工程，名为org.rufus.javaeye.jws.eclipse。<br />&nbsp;&nbsp;&nbsp; 选择Rich Client Application为yes。<br />Templates选择页面，选择一个例子，view或者Hello RCP。<br />2、	为RCP工程创建feature：<br />&nbsp;&nbsp;&nbsp; 创建一个feature-project，名为org.rufus.javaeye.jws.eclipse.feature。<br />&nbsp;&nbsp;&nbsp; 打开feature.xml：<br />&nbsp;&nbsp;&nbsp; plug-ins标签，加入工程：org.rufus.javaeye.jws.eclipse。<br />&nbsp;&nbsp;&nbsp; included features标签，加入feature：org.eclipse.rcp。<br />&nbsp;&nbsp;&nbsp; build.properties标签，输入“root=webroot”。<br />&nbsp;&nbsp;&nbsp; 在feature工程下创建目录webroot。<br />3、	创建数字签名：<br />&nbsp;&nbsp;&nbsp; 由于java安全控制的关系，所有下载到客户端的jar包都应该具有数字签名。<br />&nbsp;&nbsp;&nbsp; Java命令：keytool -genkey -keystore myKeystore -alias mykeystore。<br />&nbsp;&nbsp;&nbsp; 将startup.jar用数字签名（如果使用的是eclipse3.3，请拷贝3.2根目录下startup.jar）<br />&nbsp;&nbsp;&nbsp; Java命令：jarsigner -keystore myKeystore startup.jar mykeystore<br />&nbsp;&nbsp;&nbsp; 将过签名的startup.jar拷贝到webroot目录下。<br />4、	创建jnlp文件：<br />&nbsp;&nbsp;&nbsp; 在webroot目录下创建jnlp文件，取名为test.jnlp<br />文件内容：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;jnlp spec="1.0+" codebase="http://192.168.0.190:8888/mysite（需要修改为http://serverIP:port/appName" href="test.jnlp">
    &lt;information>
        &lt;title>Test&lt;/title>
        &lt;vendor>sly&lt;/vendor>
        &lt;icon kind="splash" href="splash.gif"/>
        &lt;offline-allowed/>
    &lt;/information>
    &lt;security>
        &lt;all-permissions/>
    &lt;/security>
    &lt;application-desc main-class="org.eclipse.core.launcher.WebStartMain">
        &lt;argument>-nosplash &lt;/argument>
    &lt;/application-desc>
    &lt;resources>
        &lt;j2se version="1.4+" />
        &lt;jar href="startup.jar"/>
        &lt;extension name="the feature" href="features/org.rufus.javaeye.jws.eclipse.feature_1.0.0.jnlp"/>
	
	  &lt;property name="eclipse.application" value="org.rufus.javaeye.jws.eclipse.application"/>
	  &lt;!--        &lt;property name="eclipse.product" value="org.rufus.javaeye.jws.eclipse.product"/>-->

    &lt;/resources>
    
    &lt;resources os="Windows">
        &lt;property name="osgi.instance.area" value="@user.home/Application Data/test"/>
        &lt;property name="osgi.configuration.area" value="@user.home/Application Data/test"/>
    &lt;/resources>
&lt;/jnlp>
</pre><br />5、	导出RCP工程：<br />&nbsp;&nbsp;&nbsp; 打开feature.xml，<br />&nbsp;&nbsp;&nbsp; overview标签，选择export wizard。<br />&nbsp;&nbsp;&nbsp; Destination标签，选择一个导出的路径。<br />&nbsp;&nbsp;&nbsp; Options标签，选择package as individual jar archives（required for JNLP and update site）。<br />&nbsp;&nbsp;&nbsp; Jar signing标签，选择刚刚创建的key store，输入别名（alias），密码。<br />&nbsp;&nbsp;&nbsp; Java Web Start标签，输入站点的ip和地址（http://serverIP:port/appName），jre版 本：1.4+。<br />&nbsp;&nbsp;&nbsp; Finish，将导出的文件拷贝到站点的根目录下。<br />6、	测试：启动服务器，在站点根目录下，双击运行test.jnlp。<br />7、	以上在win2003，jdk1.5，eclipse3.3测试通过。
          <br/>
          <span style="color:red;">
            <a href="http://defrag-sly.javaeye.com/blog/252136#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 13:34:59 +0800</pubDate>
        <link>http://defrag-sly.javaeye.com/blog/252136</link>
        <guid>http://defrag-sly.javaeye.com/blog/252136</guid>
      </item>
          <item>
        <title>Thoughtworks—向往</title>
        <author>jyw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jyw.javaeye.com">jyw</a>&nbsp;
                    链接：<a href="http://jyw.javaeye.com/blog/252124" style="color:red;">http://jyw.javaeye.com/blog/252124</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; Thoughtworks</p>
<p>&nbsp;&nbsp;&nbsp; 这是一家什么样的公司呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;企业简介：ThoughtWorks是一家跨国公司，总部位于美国芝加哥，目前在6个<span class="t_tag" onclick="tagshow(event)">国家</span>设有分公司，为客户提供IT咨询和交付项目的服务。ThoughtWorks是敏捷方法领域的领头羊，他们不断完善自身的实践并将其融入到客户的环境和团队中，其工作的方式始终以协作和沟通为基础。凭借高速开发、持续测试和循环反馈，确保软件是可用的并满足业务需求。<br /><strong>&nbsp;&nbsp;&nbsp; </strong>除了有竞争力的薪水标准之外，ThoughtWorks还为员工提供开放式的工作环境以及丰富多彩的文娱活动，力求营造一种家的感觉，自由的享受工作带来的乐趣。扁平的组织结构是公司的特别之处，在公司内部只有分工的不同而没有等级的差别，没有领导的办公室，人人平等、互相尊重是ThoughtWorks信奉的价值观之一。<br /><span style="display: none;">&nbsp;&nbsp;&nbsp; </span>公司独特的Sponsor项目为员工的内部沟通、业绩评估、晋升、发展提供持续的支持。员工有机会去<span class="t_tag" onclick="tagshow(event)">世界</span>各地经历各种不同的实践，并与来自不同背景的咨询师一起工作。几乎所有的员工都认为公司全球化为他们提供了绝佳<span class="t_tag" onclick="tagshow(event)">学习</span>机会，多元的文化也为他们的<span class="t_tag" onclick="tagshow(event)">生活</span>增添了亮色。公司希望员工能胜任不同的角色，并且为他们提供锻炼的机会，鼓励员工多方面拓展技能。<br /><span style="font-size: 0px;">; h&nbsp;&nbsp;T9 d- L3 A! s% @$ z. u</span><br /><strong>&nbsp;&nbsp;&nbsp; </strong>专家<span class="t_tag" onclick="tagshow(event)">点评</span>：1、聪明(Smart)是第一要素：公司的HR对猎头寻访候选人的最根本要求就是Smart。ThoughtWorks是聪明人聚集的地方，即使工作经验再丰富、背景再好，如果不聪明，也不是他们所要的。聪明人在一起才会碰撞火花产生智慧。<br />&nbsp;&nbsp;&nbsp; 2、平等沟通：ThoughtWorks管理扁平，每位员工都能充分发挥积极性。平等的沟通氛围是难得一求的。没有高管独立办公室就很能说明问题。<br /><span style="display: none;">&nbsp;&nbsp;&nbsp; 3</span>、钱不是问题：不像一些软件企业&ldquo;既希望马儿跑，又想马儿不吃草&rdquo;。ThoughtWorks提供了极具吸引力的<span class="t_tag" onclick="tagshow(event)">薪酬</span>和福利政策。解决了员工的后顾之忧。<br />&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp; 这是CSDN对Thoughtworks的介绍和评价。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 对我来说，最吸引我的地方，是他的人人平等和互相尊重的价值观。</p>
<p>&nbsp;&nbsp; 但凡做程序员的，也许都希望别人能对自己的工作和成果给予尊重和理解。一个高薪但不被认可的工作是无趣的，那只是为了钱而工作。为了工作而工作只是比前一种的痛苦要少点吧。</p>
<p>&nbsp;&nbsp; 随便Google下，发现了这样一篇blog:</p>
<p style="margin: 0in 0in 0pt;"><strong><span lang="ZH-CN" style="font-size: 10pt; font-family: 宋体;">&nbsp; 和全球老大抢座位</span></strong><strong></strong> </p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; <span style="font-size: 10pt; font-family: 宋体;">ThoughtWorks<span lang="ZH-CN">是一个无等级化的公司，有句话说&ldquo;没有地位的差别，只有分工的不同&rdquo;，而在</span>ThoughtWorks<span lang="ZH-CN">就真的可以看到这种情况。在西安</span>office<span lang="ZH-CN">，没有总裁、总监和经理办公室，所以陌生人来访时，根本就分不出谁是</span>Boss<span lang="ZH-CN">，反正</span>Boss<span lang="ZH-CN">也跟大家一样坐在大桌前，一身休闲运动打扮，偶尔也会帮着给饮水机换桶水，自己喝咖啡的时候，顺道也替别的同事煮几杯，休息时间也和员工们一起奋战在</span>PS2<span lang="ZH-CN">上</span>......<span lang="ZH-CN">也许很多人会感到难已置信，而如果你来到伦敦</span>office<span lang="ZH-CN">，就更加能够看到这种文化的体现了。为了工作的方便，许多全球老大们很多时间都会呆在伦敦</span>office<span lang="ZH-CN">里，而他们同样没有任何独立的办公室，跟大家一样，先来办公室先挑座位。不经意哪天你的背后就坐着全球</span>CFO<span lang="ZH-CN">或</span>CTO<span lang="ZH-CN">。而更有趣的是有天我刚开了个会回来就发现自己的座位被全球</span>CEO<span lang="ZH-CN">给占了，不但占了座位还占了我的电源和网线，没天理啊。。。。。。我先占的座位啊，于是只能恶狠狠地跟他要回来<img title="吐舌" src="http://shared.live.com/QGncRMHLLpIcOfCh--4aMA/emoticons/smile_tongue.gif" height="19" alt="吐舌" style="vertical-align: middle;" width="19" />。比起很多公司见了总裁都要点头哈腰，这种生活简直就是天堂。</span></span> (来自Jessie&mdash;jessie2730.spaces.live.com)</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 看了这样的Blog，你会想些什么呢？</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 那真是实实在在的诱惑啊！似乎有点像是《缥缈录》中的天驱，没有原因而战斗。回头在看看专家对Thoughtworks的评价，在想想自己。Am I smart?I don't konw ,maybe I never thought this.</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 这是一家外企，对外语的要求是很高的。而我的英语水平。。。只能算是哑巴英语吧。</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 当想到这个时候，那种向往真的是成了心中的阻塞。把它做为动力吧，也许有一天。我会成为其中的一员。</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 马上就要研究生毕业了，看到了Thoughtworks。思绪就想水一样的流开来。</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 吕归尘从他的坎肩的夹层中抠出他的指套：珍而重之的吧它套在自己的右拇指上，铁青色的光点亮了他的眼睛，他对着天空高高握刀的手：&ldquo;依然&hellip;&hellip;在！&rdquo;</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; 一点了，上班。。。</p>
<p style="margin: 0in 0in 0pt;">&nbsp;&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://jyw.javaeye.com/blog/252124#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 13:04:57 +0800</pubDate>
        <link>http://jyw.javaeye.com/blog/252124</link>
        <guid>http://jyw.javaeye.com/blog/252124</guid>
      </item>
          <item>
        <title>使用Web-Harvest抓取数据并保存到数据库(一)</title>
        <author>scnujie</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://scnujie.javaeye.com">scnujie</a>&nbsp;
                    链接：<a href="http://scnujie.javaeye.com/blog/252114" style="color:red;">http://scnujie.javaeye.com/blog/252114</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. 从其官网：http://web-harvest.sourceforge.net/上下载所需工具并把其工程部署到eclipse里面这自不必说，我下载的是1.0版本的。<br /><br />2. 看看并运行一下其自带的例子，这个步骤还是比较重要的，不过由于任务较紧，所以我只看了其中几个而已。<br /><br />3. 开始我的工作：<br /><br />&nbsp;&nbsp; a. 这里我要分析并抓取的页面：http://www.ctsgz.cn/tpl/index/search_more_label.do?xxk_name=%E6%B5%B7%E5%8D%97，我要的是里面前两个表里面的数据,<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要先仔细分析一下页面的结构，看看怎样抓取比较好。<br /><br />&nbsp;&nbsp; b. 从例子可以看出要选取其里面的数据应该是要在配置文件里面进行配置的而且要用到xpath的知识，不熟，所以还要进行xpath相关知识的学习（我也是临时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抱佛脚，看了一下），然后对着例子来看，经过多翻测试终于得出下面的配置，可以选出第一个表格里面的所有tr,并且返回的是一个list:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <pre name="code" class="xml">&lt;var-def name="trlist">
           &lt;xpath expression="//table[@background='../images/dotline.gif'][1]/tbody/*[1]/following-sibling::*">  //xpath的语法要稍微看一下才行
              &lt;html-to-xml>
                 &lt;http url="${targetUrl}"/>
              &lt;/html-to-xml>
            &lt;/xpath>
          &lt;/var-def></pre><br /><br />&nbsp;&nbsp;&nbsp; c. 然后再根据这个list在下面进行循环读取并写入文件：<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <pre name="code" class="xml">&lt;file action="write" path="test_ctsgz_${surf_name}.xml">
       
       &lt;template>
           &lt;![CDATA[ &lt;root> ]]&gt;
       &lt;/template>
       
       &lt;loop item="item" index="i">
          &lt;list>
            &lt;var name="trlist"/>
          &lt;/list>
          &lt;body>
             &lt;xquery>
                    &lt;xq-param name="item">
                        &lt;var name="item"/>
                    &lt;/xq-param>
                    &lt;xq-expression>&lt;![CDATA[
                        declare variable $item as node() external;
                        
                        let $order := data($item//td[1])
                        let $pathName := data($item//td[2])
                        let $startDate := data($item//td[3])
                        let $days := data($item//td[4])
                        let $travelTools := data($item//td[5])
                        let $price := data($item//td[6])
                            return
                                &lt;city>
                                    &lt;order>{data($order)}&lt;/order>
                                    &lt;pathName>{data($pathName)}&lt;/pathName>
                                    &lt;startDate>{data($startDate)}&lt;/startDate>
                                    &lt;days>{data($days)}&lt;/days>
                                    &lt;travelTools>{data($travelTools)}&lt;/travelTools>
                                    &lt;price>{data($price)}&lt;/price>
                                &lt;/city>
                    ]]&gt;&lt;/xq-expression>
                &lt;/xquery>
          &lt;/body>
       &lt;/loop>
       &lt;![CDATA[ &lt;/root> ]]&gt;
     &lt;/file>  </pre>
          <br/>
          <span style="color:red;">
            <a href="http://scnujie.javaeye.com/blog/252114#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 12:23:02 +0800</pubDate>
        <link>http://scnujie.javaeye.com/blog/252114</link>
        <guid>http://scnujie.javaeye.com/blog/252114</guid>
      </item>
          <item>
        <title>第二章 Java基础语法（3）</title>
        <author>tangqs</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tangqs.javaeye.com">tangqs</a>&nbsp;
                    链接：<a href="http://tangqs.javaeye.com/blog/252113" style="color:red;">http://tangqs.javaeye.com/blog/252113</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h4><a name="_Toc208338943"><span style="color: #336699;">2.4 数据类</span></a>型和常量</h4>
<p>Java的数据类型和C语言的比起来，可算的上是简单了许多，而且更为重要的一点是Java的基本数据类型不论在什么平台上，都具有统一的长度&mdash;&mdash;这一点是Java实现跨平台性的一个必要的技术准备。</p>
<p>在Java中，数据类型分了两大类：基本数据类型以及引用类型。引用类型放在以后讲，这一节的主角是基本数据类型。</p>
<p>Java中的基本数据类型一共有八个：boolean、byte、short、int、long、float、double、char。这八个基本数据类型从特征上又分为4大类：布尔型、整型、浮点型以及字符型。下面我们分类开始给大家介绍。</p>
<h5><a name="_Toc208338944"><span style="text-decoration: underline;"><span style="color: #336699;">2.4.1 布尔型</span></span></a></h5>
<p>Java中的布尔型其实指的就是boolean类型，为什么取了个这么怪的名字？原来100多年前，英国数学家布尔发表论文，利用代数研究逻辑问题，并奠定了数理逻辑的基础。由此，我们一般将用于数理逻辑运算的数据对象称为&ldquo;布尔型&rdquo;数据。数理逻辑是个非常复杂的东西，我在大学时学的那是晕头转向，不过很讽刺的是，布尔型数据只有区区两个值：&ldquo;真&rdquo;和&ldquo;假&rdquo;。与之对应，Java中的boolean类型只包含两个常量：true、false。</p>
<p>这里顺带介绍几句关于常量的知识。常量分了两大类，一类是字面常量（英文是literal），一类是符号常量。符号常量我们放在和final关键字一起讲。而所谓的字面常量指的是相应类型的字面表达形式。例如，我们用&ldquo;true&rdquo;表示boolean类型中的&ldquo;真&rdquo;的含义，一目了然，不需要拐几个弯才能想到。</p>
<h5><a name="_Toc208338945"><span style="text-decoration: underline;"><span style="color: #336699;">2.4.2 整型</span></span></a></h5>
<p>Java的整型数据类型一共有四个：分别是byte、short、int、long。整型数据就是我们通常说的&ldquo;整数&rdquo;。如果还有人想接着问&ldquo;什么是整数&rdquo;，那我的回答是&ldquo;面壁三年，复习小学数学，争取达到小学毕业水平&rdquo;，J。</p>
<p>那既然表示整数，为什么会出现4种类型的整型？这主要是因为这四种类型的所占字节数以及取值范围有差异。其中byte类型只占1个字节，取值是<a href="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image002%5B3%5D.gif"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image002%5B3%5D_thumb.gif" border="0" height="20" alt="clip_image002[3]" width="79" /></a>；short类型占2个字节，取值范围<a href="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image004%5B3%5D.gif"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image004%5B3%5D_thumb.gif" border="0" height="20" alt="clip_image004[3]" style="border-width: 0px;" width="85" /></a>；int类型占4个字节，取值范围<a href="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image006%5B3%5D.gif"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image006%5B3%5D_thumb.gif" border="0" height="20" alt="clip_image006[3]" style="border-width: 0px;" width="85" /></a>；而long类型占8个字节，取值范围<a href="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image008%5B3%5D.gif"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image008%5B3%5D_thumb.gif" border="0" height="20" alt="clip_image008[3]" style="border-width: 0px;" width="87" /></a>。取值范围只给出了指数形式，具体的数值就有劳各位自己去算了。每种数据类型都有自己的用途，例如byte型数据经常应用于底层的数据传输；long型经常用于数据库编程中；而int型则是开发中最为常用的整数类型。</p>
<p>接下来我们再看看整型的字面常量如何表示。大多数情况下，我们用十进制表示一个整数，比如85、51、2等；有时候也会使用十六进制表示整数，十六进制以0X（或0x）作为前缀，后面跟着数字或者字母A~F（或a~f），例如0x1、0X25、0xabcd、以及0XCE1F都是十六进制的字面常量；用的最少的是八进制，至少我几乎没有在开发中使用过八进制的字面常量，当你看见一个数字以0开头、而后面跟着几个0到7之间的数字时，说明你看到的是一个八进制的字面常量，如07、017、025都是八进制字面常量。</p>
<p>不过，我们需要注意，上段中所有字面常量，我们都可以认为是int型的常量，如果我们想表示一个long型的常量的话，那么则必须在其后加上大写（或小写）字母L，例如0xABL表示long型的十六进制数0xAB，还有像1193827L，07L等都表示long型的整数，虽然我们也可以使用L的小写形式，不过建议大家最好不好使用，因为很容易和数字1混淆。</p>
<p>可能有些喜欢思考的会问我，如何表示byte和short型的常量呢？这个嘛&hellip;&hellip;，你会在后面看到的。</p>
<h5><a name="_Toc208338946"><span style="text-decoration: underline;"><span style="color: #336699;">2.4.3 浮点型</span></span></a></h5>
<p>浮点型数据是用来表示小数的。计算机使用的是二进制数进行运算，二进制表示整数没有太大的问题，可是在表示小数时，问题就出现了，很多在十进制中的有限小数在二进制体系中却是无限不循环的。由于两种进制之间的差异，因此十进制的小数使用二进制存储时往往只能存储其近似的数值。而且，为了在有限的字节中尽量多的表示更大范围的数值，在计算机内部通常都采用了浮点形式存储小数，这也就是我们将小数类型称为浮点型数据的缘故。浮点型数据有两种类型：float和double，表示了存储小数的两种不同算法，它们的差异主要表现在精度上。</p>
<p>在Java中，float类型的数据占用了4个字节；而double类型的数据占用了8个字节。从它们所占用的字节数中我们也可以看出，double型的数据精度更高。那么浮点型的字面常量如何表示？</p>
<p>先看一下最常用的表示方法，3.1415926、125.8应该都是我们熟悉的形式，不过在Java中，还可以使用指数形式表示一个小数，例如31.4e25表示<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangqs/472570/o_clip_image010%5B3%5D_1.gif" border="0" height="21" alt="clip_image010[3]" style="border-width: 0px;" width="69" />。上面这几个例子都是表示double型数据，而如果我们还需要强调这些数是double型数据的话，那么可以在数值之后加上字母D（大小写都可以），例如3.14d，31.4e5D。如果需要表示float型的常量，则必须在数值之后加上大写或者小写的F，例如3.14f、125.8F。</p>
<h5><a name="_Toc208338947"><span style="text-decoration: underline;"><span style="color: #336699;">2.4.4 字符型</span></span></a></h5>
<p>字符型只包含了char类型，char类型是用来表示字符数据的。C程序员要注意了，在C语言中，也包含了表示字符的char类型。不过Java中的char型与C语言相比，有比较大的区别。在Java中，一个char类型的数值需要占用两个字节，这是因为在Java中使用了Unicode编码表示字符，所以，Java中的字符不仅仅能表示英文字母，还能表示世界上大多数的语言，例如，一个Java字符就可以表示一个汉字，而在C语言中，表示一个汉字需要使用两个字符。同样，对于C语言来说，字符型数据从本质上其实是可以看成一个无符号的整数类型，这一点java也延续了这个做法，在语法上可以把字符型数据看成是整数类型，并且和可以和int，long等整型数据进行转换。</p>
<p>在Java中如果想表示一个字符字面常量，则必须将这个字符常量使用一对单引号将这个字符围起来，例如&lsquo;a&rsquo;和&lsquo;世&rsquo;都是合法的字符。和C语言一样，Java也有转义字符，如&lsquo;\&rdquo;&rsquo;表示一个双引号，&lsquo;\t&rsquo;表示制表符，&lsquo;\n&rsquo;表示换行符，&lsquo;\r&rsquo;表示回车符，&lsquo;\\&rsquo;表示斜杠等，上面这五个都是比较常用的转义字符，希望大家记住它们，以后肯定还能用得上。</p>
<p>除了上面的形式之外，在Java中还可以用字符的Unicode码来表示它。例如字符&lsquo;a&rsquo;可以用&lsquo;\u0061&rsquo;表示，字符&lsquo;张&rsquo;可以用&lsquo;\u5f20&rsquo;表示。使用Unicode码表示字符要注意下列几个规则：</p>
<p>1、必须使用\u作为前缀；</p>
<p>2、必须使用四位十六进制数表示，如果Unicode编码比较小，则前面用0补足四位（看到前面&lsquo;a&rsquo;的例子了？）；</p>
<p>3、当然，别忘记用单引号（&rsquo;）将字符围起来。</p>
<h5><a name="_Toc208338948"></a><a name="_Ref202545850"><span style="text-decoration: underline;"><span style="color: #336699;">2.4.5 字符串</span></span></a></h5>
<p>什么是字符串？所谓的字符串，就是由多个字符组成的一个字符组，程序将把这个字符组作为一个整体。字符串有两个很特殊的性质：一方面，字符串不可能作为一个基本数据类型单独存在；另一方面，字符串在一个应用程序中往往比其他类型使用的更为频繁。由于这两个原因，决定了字符串在任何程序设计语言中都具有特殊地位。在本节中，我们只是简单的介绍字符串的基本知识，在以后的章节中，还将陆续涉及到字符串的其他内容。</p>
<p>首先看看如何表示一个字符串，在Java中，我们使用一对双引号（&ldquo;）将字符串围起来。例如：&ldquo;Hello,world&rdquo;、&ldquo;你好，Java&rdquo;都是字符串。正如我们前面所说&mdash;&mdash;字符串由一组字符组成，所以在字符串中，同样也可以使用转义字符，可以直接内嵌字符的Unicode编码等等。而需要声明一个能指向字符串对象的变量则必须使用String。例如：</p>
<p>String str = "\u0061\u0062\\\'\""; //表示字符串 ab\&rsquo;&rdquo;</p>
<p>在上面这个例子中，String str表示定义了一个变量可以指向一个字符串，而"\u0061\u0062\\\'\""; 则表示定义了一个字符串对象。最后请大家在注意一下：字符串并不是Java中的基本数据类型。好了，字符串就简单介绍到这。</p>
          <br/>
          <span style="color:red;">
            <a href="http://tangqs.javaeye.com/blog/252113#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 12:22:45 +0800</pubDate>
        <link>http://tangqs.javaeye.com/blog/252113</link>
        <guid>http://tangqs.javaeye.com/blog/252113</guid>
      </item>
          <item>
        <title>flex button上新建弹出框以及关闭事件</title>
        <author>wuyuping66</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wuyuping66.javaeye.com">wuyuping66</a>&nbsp;
                    链接：<a href="http://wuyuping66.javaeye.com/blog/252105" style="color:red;">http://wuyuping66.javaeye.com/blog/252105</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原来做得流程呈现上面，弹出框需要加上关闭按钮，因为我的弹出框实现方法是</p>
<p>&nbsp;</p>
<p>public function eventPerform(event:Event):void{<br />&nbsp;&nbsp;&nbsp;var m : Model = getModel();<br />&nbsp;&nbsp;&nbsp;var targetUI : Object = event.currentTarget;<br />&nbsp;&nbsp;&nbsp;if(m != null){<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(event.type){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case MouseEvent.CLICK:</p>
<p>//该button上的garden是否已经有弹出框<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var ui:UIComponent = getGraphRoot().getGarden(GardenList.TIP) as UIComponent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if(targetUI is UIComponent)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if(ui != null){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui.visible == true?ui.visible =false:ui.visible = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var ext : DisplayObject = getGraphRoot().getGarden(GardenList.TIP) as DisplayObject;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var tempx:Number=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var tempy:Number=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ext == null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext = new ColumnTip();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getContainer().addChild(ext);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getGraphRoot().registerGarden(GardenList.TIP, ext);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext.x = targetUI.x+10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext.y = targetUI.y + targetUI.height+14;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//处理信息框因边界问题显示不全的问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;tempx=ext.x+ext.width;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;tempy=ext.y+ext.height;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculate(ext,tempx,tempy);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext.visible = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui=ext as UIComponent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;}</p>
<p>&nbsp;</p>
<p>ColumnTip.mxml如下：</p>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />&lt;mx:Panel xmlns:mx="<a href="http://www.adobe.com/2006/mxml">http://www.adobe.com/2006/mxml</a>" height="200" width="400" alpha="0.8" layout="absolute" color="#FBF81C" headerHeight="0" borderThicknessLeft="0" borderThicknessTop="0" borderThicknessRight="0" borderThicknessBottom="0"&gt;<br />&nbsp; </p>
<p>&nbsp;&lt;mx:Panel id="mainPanel" width="100%" height="100%" borderStyle="solid" themeColor="#052539" backgroundColor="#178FA9" layout="absolute" fontSize="12" title="{model.label}" borderColor="#812B2B" x="0" y="0" backgroundAlpha="0.9" cornerRadius="10" titleIcon="@Embed(source='images/graph/detail.gif')" alpha=".9" headerColors="[d40d0d,444444]" headerHeight="12" shadowDirection="right" &gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Label text="操作的个数：{objects.length}" x="0"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Label text="{model.source.label} -&gt; {model.target.label}" x="100" visible="{model.source != null}"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGrid id="mainGrid" x="0" y="18" scroll="0" rowHeight="{rowHight}" height="98%" width="98%" dataProvider="{this.objects}"&nbsp; backgroundColor="#C31E41" backgroundAlpha="0.5" headerColors="#3FAF3A" liveScrolling="false"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:columns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGridColumn headerText="动作名称" dataField="actionName"&nbsp; visible="{model.source == null}"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGridColumn headerText="执行人" dataField="actor"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGridColumn&nbsp; headerText="执行时间" dataField="actionTime"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:columns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:DataGrid&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;</p>
<p>&lt;mx:Panel&gt;</p>
<p>&nbsp;</p>
<p>首先想到的就是将ColumnTip里面的mainPanel类型改为TitleWindow，并加上属性 showCloseButton="true" close="closefunc()"，但是处理时刚开始想的是继续来触发click事件控制，但是尝试数次失败，最后从</p>
<p>var ui:UIComponent = getGraphRoot().getGarden(GardenList.TIP) as UIComponent;中得到灵感</p>
<p>&nbsp;</p>
<p>&nbsp;public function closefunc():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;var ui:UIComponent=this as UIComponent;<br />&nbsp;&nbsp;&nbsp;&nbsp;ui.visible=false;<br />&nbsp;&nbsp;&nbsp;}</p>
<p>问题解决。还有一个保持唯一性的，原来想将每一个弹出框都保存起来，当一个改变的时候，将其他的visible都改为false，可是这样的循环很复杂，而且因为是getContainer里面包含的不仅仅是弹出框类型，需要保留的内容没有保留，后来想到，其实可以分解为，每次打开一个弹出框，将前一个关闭，于是在container里面定义了一个位置变量</p>
<p>&nbsp;&nbsp;&nbsp;//记录当前弹出窗口在container里的位置<br />&nbsp;&nbsp;&nbsp;public var position:int=0;</p>
<p>&nbsp;</p>
<p>然后写了一个方法如下：</p>
<p>&nbsp;public function keepOne(ext:DisplayObject):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;var position:int=getContainer().getChildIndex(ext);<br />&nbsp;&nbsp;&nbsp;&nbsp;var lastposition:int=Application.application.position;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(lastposition!=0&amp;&amp; lastposition!=position){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getContainer().getChildAt(lastposition).visible=false;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Application.application.position=position;<br />&nbsp;&nbsp;}</p>
<p>每次打开一个弹出框，将原来container里的position位置元素隐藏，修改container里面的position为当前框的位置,</p>
<p>问题解决了。</p>
<p>&nbsp;</p>
<p>实际上第二个问题，原来准备定义一个ArrayCollection来保存所有的弹出框的，循环多次修改值，分解之后问题就变得清晰而且只是简单的变量修改就完成了想要的效果。</p>
          <br/>
          <span style="color:red;">
            <a href="http://wuyuping66.javaeye.com/blog/252105#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 11:53:11 +0800</pubDate>
        <link>http://wuyuping66.javaeye.com/blog/252105</link>
        <guid>http://wuyuping66.javaeye.com/blog/252105</guid>
      </item>
          <item>
        <title>第一次上班坐轻轨</title>
        <author>lijie250</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lijie250.javaeye.com">lijie250</a>&nbsp;
                    链接：<a href="http://lijie250.javaeye.com/blog/252092" style="color:red;">http://lijie250.javaeye.com/blog/252092</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天在上班的路上听到收音机说在宛平南路哪里发生交通事故了，我想完了，这次估计很有可能迟到，因为平时那都很堵车都很厉害，所以决定去坐轻轨了，平时都坐公车上班，轻轨没坐过，不过总在听别人说很多人，没有亲身感受过！</p>
<p>&nbsp;</p>
<p>刚刚到龙漕轻轨站就看到进站的人很多，在电梯上上就听到车进站了，很多人都在电梯上跑起来了，等我上去的时候，看到每个门前都是排队很多的人，没办法只有选择一个稍微人少的地方，结果进去的时候差点被门夹到，真危险！里面状况就是人挨人，真是后悔坐轻轨，挤得我一身汗，幸好我只坐四站就下了！</p>
<p>&nbsp;</p>
<p>看来以后要起早点就不会这样了！</p>
          <br/>
          <span style="color:red;">
            <a href="http://lijie250.javaeye.com/blog/252092#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 11:40:51 +0800</pubDate>
        <link>http://lijie250.javaeye.com/blog/252092</link>
        <guid>http://lijie250.javaeye.com/blog/252092</guid>
      </item>
          <item>
        <title>OrgChart(组织机构图) - Flex</title>
        <author>iMzw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://nealmi.javaeye.com">iMzw</a>&nbsp;
                    链接：<a href="http://nealmi.javaeye.com/blog/252077" style="color:red;">http://nealmi.javaeye.com/blog/252077</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前段时间，用Flex写了个OrgChart，截图如下<br /><img src="http://nealmi.javaeye.com/upload/attachment/42222/0ec77e93-a323-3366-94e4-d71d22d3078c.jpg" /><br /><br />iLog有个很不错的，可是收钱，799美刀。你可以看这里<a href="http://visudemos.ilog.com/webdemos/orgchart/orgchart.html" target="_blank">http://visudemos.ilog.com/webdemos/orgchart/orgchart.html</a>。<br /><br />俺农村来的，比较穷，最终还是自己“创造”了一个。<br /><br />其实算法还是很就简单地，核心就是递归算法。<br /><br />我写的那个是只能接受XML的。<br /><br />核心代码：<br /><pre name="code" class="java">
/**
		 * create nodes,
		 * calculate depth.
		 * */
		private function _createSubNodes(data:ICollectionView, parentNode:IOrgChartNode):void{
			for(var cursor:IViewCursor = data.createCursor(); !cursor.afterLast; cursor.moveNext()){
				
				var node:IOrgChartNode = _createNode(cursor.current, parentNode);
				
				if(_treeDataDesciptor.isBranch(cursor.current, data) 
					&amp;&amp;  _treeDataDesciptor.getChildren(cursor.current, data).length != 0){
					
					var __tmp:ICollectionView = _treeDataDesciptor.getChildren(cursor.current, data);
					_createSubNodes(__tmp, node);
				}
			}	
		}
		private var _maxX:Number=0;
		/**
		 * Wrap data with IOrgChartNode
		 * */
		private function _createNode(data:Object, parentNode:IOrgChartNode):IOrgChartNode{
			
			var node:IOrgChartNode = new DefaultOrgChartNode();
			
			node.addEventListener(MouseEvent.CLICK, nodeClick);
			node.addEventListener(MouseEvent.MOUSE_OVER, nodeMouseOver);
			node.addEventListener(MouseEvent.ROLL_OVER, nodeRollOver);
			node.addEventListener(MouseEvent.MOUSE_OUT, nodeMouseOut);
			
			node.parentNode = parentNode;
			node.data = data;
			
                        node.width = hItemWidth;
			node.height = hItemHeight;
			
			
			//起始时，根节点在最左边
			if(parentNode == null){
				node.x = 0;
				node.y = 0;
				//_maxX = node.width + _horizonalSpacing;
			}else{
				if(node.previousSibling == null){
					//与父节点在同一中轴线上
					//trace(node);
					node.x = parentNode.x + (parentNode.width - node.width)/2;					
					_maxX = node.x + node.width;
				}else{
					
						node.x = _maxX + _horizonalSpacing;	
						_maxX = node.x + node.width;
				}
				//移动父节点
				updateParentNodePosition(node.parentNode );				
				node.y = parentNode.y + parentNode.height + _verticalSpacing;
			}
			
			_nodes.addItem(node);
			
			return node;
		}
		/**
		 * 递归移动所有父节点的位置。
		 * */
		private function updateParentNodePosition(node:IOrgChartNode):void{
			if(node != null){
				var subs:ArrayCollection = node.subNodes;
				var lastChild:IOrgChartNode = subs.getItemAt(subs.length - 1 ) as IOrgChartNode;
				var firstChild:IOrgChartNode = subs.getItemAt(0) as IOrgChartNode;
				
				node.x = firstChild.x + ( lastChild.x - firstChild.x + lastChild.width - node.width) / 2;
					
				//递归更新直到根节点
				updateParentNodePosition(node.parentNode); 
			}
		}
</pre><br /><br />基本就是一个递归右移父节点的算法。<br /><br />然后把所有的节点统一的Render就OK了。
          <br/>
          <span style="color:red;">
            <a href="http://nealmi.javaeye.com/blog/252077#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 13 Oct 2008 11:29:43 +0800</pubDate>
        <link>http://nealmi.javaeye.com/blog/252077</link>
        <guid>http://nealmi.javaeye.com/blog/252077</guid>
      </item>
          <item>
        <title>java数据类型，hibernate数据类型，标准sql数据类型之间的对应表</title>
        <author>tgyd2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tgyd2006.javaeye.com">tgyd2006</a>&nbsp;
                    链接：<a href="http://tgyd2006.javaeye.com/blog/252048" style="color:red;">http://tgyd2006.javaeye.com/blog/252048</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>
<div><strong><span style="font-size: medium;">Hibernate&nbsp;API简介</span></strong></div>
<div>其接口分为以下几类：</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>提供访问数据库的操作的接口；</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>用于配置Hibernate的接口；</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>回调接口</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>扩展Hibernate的功能的接口。</div>
<div>这些接口大多数位于net.sf.hibernate包中</div>
<div><strong><span style="font-size: medium;"><span style="font-size: 12pt;">Hibernate</span><span style="font-size: 12pt;">的核心接口</span></span></strong></div>
<div>5个核心接口：</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Configuration接口：配置Hibernate,根启动Hibernate，创建SessionFactory对象。</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>SessionFactory接口：初始化Hibernate，充当数据存储源的代理，创建Session对象。</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Session接口：负责保存、更新、删除、加载和查询对象。</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Transaction：管理事务。</div>
<div style="margin-left: 21pt; text-indent: -21pt;">l<span style="font: 7pt -Times New Roman-; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Query和Criteria接口：执行数据库查询。</div>
<div>SessionFactory实例对应一个数据存储源，特点：</div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>线程安全的，重量级。</div>
<div>Session：是Hibernate应用最广泛的接口，特点：</div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>不是线程安全的，轻量级。</div>
<div><strong>java</strong><strong>数据类型，hibernate</strong><strong>数据类型，标准sql</strong><strong>数据类型之间的对应表</strong></div>
<table cellspacing="0" border="1" cellpadding="0" style="border: #999999 0.75pt outset;">
<tbody>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>Java数据类型</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>Hibernate数据类型</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>标准SQL数据类型<br />(PS:对于不同的DB可能有所差异)</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>byte、java.lang.Byte</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>byte</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>TINYINT</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>short、java.lang.Short</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>short</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>SMALLINT</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>int、java.lang.Integer</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>integer</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>INGEGER</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>long、java.lang.Long</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>long</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>BIGINT</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>float、java.lang.Float</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>float</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>FLOAT</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>double、java.lang.Double</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>double</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>DOUBLE</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.math.BigDecimal</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>big_decimal</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>NUMERIC</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>char、java.lang.Character</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>character</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>CHAR(1)</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>boolean、java.lang.Boolean</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>boolean</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>BIT</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.lang.String</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>string</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARCHAR</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>boolean、java.lang.Boolean</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>yes_no</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>CHAR(1)('Y'或'N')</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>boolean、java.lang.Boolean</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>true_false</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>CHAR(1)('Y'或'N')</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Date、java.sql.Date</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>date</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>DATE</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Date、java.sql.Time</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>time</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>TIME</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Date、java.sql.Timestamp</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>timestamp</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>TIMESTAMP</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Calendar</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>calendar</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>TIMESTAMP</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Calendar</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>calendar_date</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>DATE</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>byte[]</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>binary</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARBINARY、BLOB</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.lang.String</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>text</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>CLOB</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.io.Serializable</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>serializable</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARBINARY、BLOB</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.sql.Clob</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>clob</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>CLOB</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.sql.Blob</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>blob</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>BLOB</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.lang.Class</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>class</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARCHAR</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Locale</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>locale</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARCHAR</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.TimeZone</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>timezone</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARCHAR</div>
</td>
</tr>
<tr>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>java.util.Currency</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>currency</div>
</td>
<td style="border: #999999 0.75pt inset; padding: 0cm;">
<div>VARCHAR</div>
</td>
</tr>
</tbody>
</table>
<a href="http://maomao.blog.51cto.com/115985/55701" class="hidden">本文出自 51CTO.COM技术博客</a></div>
          <br/>
          <span style="color:red;">
            <a href="http://tgyd2006.javaeye.com/blog/252048#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 10:58:22 +0800</pubDate>
        <link>http://tgyd2006.javaeye.com/blog/252048</link>
        <guid>http://tgyd2006.javaeye.com/blog/252048</guid>
      </item>
          <item>
        <title>Java Web 开发常用函数</title>
        <author>oxidy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://oxidy.javaeye.com">oxidy</a>&nbsp;
                    链接：<a href="http://oxidy.javaeye.com/blog/252027" style="color:red;">http://oxidy.javaeye.com/blog/252027</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">String s = 'abcdef';
s.substring(0,2);

输出结果为：'abc'

substring(开始，结束)  从第几个字符开始截取，截取到第几个字符</pre>
<p>&nbsp;</p>
<pre name="code" class="java">String.valueOf(需要转换的字符、数字等)

转换结果为，括号中的值转换为字符串格式了</pre>
<p>&nbsp;</p>
<pre name="code" class="java">比较相等：

数字比较：

1== 1

字符串比较：

&quot;1&quot;.equals(字符串)
</pre>
<p>&nbsp;</p>
<p>随着项目进展，陆续更新</p>
          <br/>
          <span style="color:red;">
            <a href="http://oxidy.javaeye.com/blog/252027#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 10:10:38 +0800</pubDate>
        <link>http://oxidy.javaeye.com/blog/252027</link>
        <guid>http://oxidy.javaeye.com/blog/252027</guid>
      </item>
          <item>
        <title>关于ibatis与Hibernate我的一点意见</title>
        <author>lovpg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovpg.javaeye.com">lovpg</a>&nbsp;
                    链接：<a href="http://lovpg.javaeye.com/blog/252026" style="color:red;">http://lovpg.javaeye.com/blog/252026</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先,个人认为ibatis是一个半自动的OR Maping工具,而Hibernate却是一个全自动,对于照相机来说,像我这种半路出身的来说,更推崇全自动的,因为它的一站式解决方案,然而,很多对专业人式看业,我并不能算是一个会照相的,顶多的是一个能按快门的而已,全自动有它的好,那就是不需要培训也可以入门,很爽!<br />&nbsp;&nbsp; 对比于Hibernate这个强大的工具,我曾经很欣然地使用过它,并以它的一站式解决方案而庆幸自已在选择数据库编程方面选择了强大的工具,我不再需要写我最讨厌的SQL,也可以直接将Bean注入到SQL中,然而好景不长,正因为我只是入门级的体验,我缺乏全局性的解决方案,系统日渐宠大的时候,我才发现自已没有驾驭它的能力,比如如何控制字段的输出,而不是用select * from table这样的形式(后来用了很久才找到了相关的解决方案),还有缓存,Session管理,JDBC,JTA的事务管理,后面的时间,我一直都在痛苦地学习,至今未果,好在系统用的人不多,后来还是可以顶上.<br />&nbsp;&nbsp; 以后我就慢慢地忘记了Hibernate,采用了传统的JDBC解决方案,我一直认为自已动手写SQL这才是王道,Ibatis是后来才用上的(当然不是在同一个系统当中),看很多人都用上Struts,特别是看了Struts强大的功能,我有点把持不住,最终用上了它,果然很好,但是由于自已写的JDBC,放着这么好的formbean不用那岂不是浪费,于是自已写了一个Bean解析成SQL,执行查询SQL生成Bean的方案,感觉良好,当时就在想如果Hibernate可以让随心所欲地控制那该有多好啊,很庆幸,我看到了很多人都在推荐Ibatis,赶紧地看一下,说不定地比较好的解决方案,匆匆地看了一下ibatis的官方文档,感觉良好,Ibatis这个半自动的O/R工具对于SQL控制提供了一个很好的解决方案,自已动手写SQL,更方便调试,至于驾驭它,也比Hibernate轻松多了!<br />&nbsp;&nbsp;&nbsp; 与Ibatis相比,我更喜欢学习Hibernate的源代码,因为它的实现确实记人兴奋!
          <br/>
          <span style="color:red;">
            <a href="http://lovpg.javaeye.com/blog/252026#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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, 13 Oct 2008 10:08:01 +0800</pubDate>
        <link>http://lovpg.javaeye.com/blog/252026</link>
        <guid>http://lovpg.javaeye.com/blog/252026</guid>
      </item>
          <item>
        <title>一个关于随机密码的问题</title>
        <author>phoenix007</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phoenix007.javaeye.com">phoenix007</a>&nbsp;
                    链接：<a href="http://phoenix007.javaeye.com/blog/252004" style="color:red;">http://phoenix007.javaeye.com/blog/252004</a>&nbsp;
          发表时间: 2008年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下边是一个生成随机密码的代码， 在main函数中，用循环生成10个不一样的随机密码，可不知道为什么，生成的随机密码都是一样的，真是奇怪了，大家帮着看看吧。<br /><br />package test;<br /><br />import java.util.Random;<br /><br />public class RandomPassword {<br /><br />&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i &lt; 10)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 	<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 	System.out.println(getRandomNum(8));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;	<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; /*<br />&nbsp;&nbsp;&nbsp; * 生成随机密码<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param length<br />&nbsp;&nbsp;&nbsp; * @return<br />&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp; public static String getRandomString(int length) { <br />