<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>ispring</title>
    <description>I am just a student, and a designer, and also a programmmer, that's all.</description>
    <link>http://ispring.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>MSComm控件使用详解</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/218567" style="color:red;">http://ispring.javaeye.com/blog/218567</a>&nbsp;
          发表时间: 2008年07月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>本文主要包含以下内容：</strong></p>
<p>&nbsp;</p>
<p><em>MSComm控件两种处理通讯的方式<br />CommPort属性<br />RThreshold 属性<br />CTSHolding 属性<br />SThreshold 属性<br />CDHolding 属性<br />DSRHolding 属性<br />Settings 属性<br />InputLen 属性<br />EOFEnable 属性<br /><br />Handshake 常数<br />OnComm 常数<br />InputMode 常数<br />错误消息<br /><br /><br /></em>&nbsp;&nbsp;&nbsp;&nbsp; MSComm 控件通过串行端口传输和接收数据，为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便，程序员不必去花时间去了解较为复杂的API函数，而且在VC、VB、Delphi等语言中均可使用。<span style="color: #040484;">&nbsp;</span>Microsoft Communications Control（以下简称MSComm）是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件，它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说，它提供了两种处理通信问题的方法：一是事件驱动(Event－driven)方法，一是查询法。</p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><a name="1.MSComm控件两种处理通讯的方式"><span style="color: #000000;">1.MSComm控件两种处理通讯的方式</span></a></p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><span style="color: #000000;">MSComm控件提供下列两种处理通讯的方式：事件驱动方式和查询方式。&nbsp;<br />1.1 事件驱动方式</span></p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><span style="color: #000000;">事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下，在事件发生时需要得到通知，例如，在串口接收缓冲区中有字符，或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下，可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表，参阅 CommEvent 属性。在编程过程中，就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时，可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口，必须使用多个 MSComm 控件。</span></p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><span style="color: #000000;">1.2 查询方式&nbsp;</span></p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><span style="color: #000000;">查询方式实质上还是事件驱动，但在有些情况下，这种方式显得更为便捷。在程序的每个关键功能之后，可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小，并且是自保持的，这种方法可能是更可取的。例如，如果写一个简单的电话拨号程序，则没有必要对每接收一个字符都产生事件，因为唯一等待接收的字符是调制解调器的&ldquo;确定&rdquo;响应。&nbsp;</span></p>
<p align="left" style="margin-top: 8px; margin-bottom: 8px; margin-left: 0px;"><span style="color: #000000;">2.MSComm 控件的常用属性<br />MSComm 控件有很多重要的属性，但首先必须熟悉几个属性。<br />CommPort 设置并返回通讯端口号。&nbsp;<br />Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。&nbsp;<br />PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。&nbsp;<br />Input 从接收缓冲区返回和删除字符。&nbsp;<br />Output 向传输缓冲区写一个字符串。<br /><br />下面分别描述：&nbsp;<br /><br /><a name="CommPort属性"><strong>CommPort属性</strong></a> 设置并返回通讯端口号。<br />语法 object.CommPort[value ] (value 一整型值，说明端口号。)&nbsp;<br />说明 在设计时，value 可以设置成从 1 到 16 的任何数（缺省值为 1）。但是如果用 PortOpen 属性打开一个并不存在的端口时，MSComm 控件会产生错误 68（设备无效）。<br />注意：必须在打开端口之前设置 CommPort 属性。<br /><br /><a name="RThreshold 属性"><strong>RThreshold 属性</strong></a>：在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前，设置并返回的要接收的字符数。<br />语法 object.Rthreshold [ = value ]（value 整型表达式，说明在产生 OnComm 事件之前要接收的字符数。 ）<br />说明 当接收字符后，若 Rthreshold 属性设置为 0（缺省值）则不产生 OnComm 事件。例如，设置 Rthreshold 为 1，接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。<br /><br /><a name="CTSHolding 属性"><strong>CTSHolding 属性</strong></a>：确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号，指示传输可以进行。该属性在设计时无效，在运行时为只读。<br />语法： object.CTSHolding（Boolean）<br /><br />Mscomm 控件的 CTSHolding 属性设置值：<br />True Clear To Send 线为高电平。&nbsp;<br />False Clear To Send 线为低电平。&nbsp;<br /><br />说明：如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时，MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 OnComm 事件。<br /><br />Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态，CTSHolding 属性给出一种手工查询的方法。<br /><br />详细信息 有关握手协议，请参阅 Handshaking 属性。<br /><br /><strong><a name="SThreshold 属性">SThreshold 属性</a></strong>： MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前，设置并返回传输缓冲区中允许的最小字符数。<br /><br />语法 object.SThreshold [ = value ]<br />value 整形表达式，代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。&nbsp;<br /><br />说明：若设置 Sthreshold 属性为 0（缺省值），数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1，当传输缓冲区完全空时，MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 value，CommEvent 属性设置为 comEvSend，并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如，如果 Sthreshold 等于 5，仅当在输出队列中字符数从 5 降到 4 时，comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符，comEvSend 事件将绝不会发生。<br /><br /><br /><strong><a name="Handshake 常数">Handshake 常数<br /></a></strong><br />常数 值 描述&nbsp;<br />comNone 0 无握手。&nbsp;<br />comXonXoff 1 XOn/Xoff 握手。&nbsp;<br />comRTS 2 Request-to-send/clear-to-send 握手。&nbsp;<br />comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。&nbsp;<br /><br /><br /><strong><a name="OnComm 常数">OnComm 常数<br /></a></strong><br />常数 值 描述&nbsp;<br />comEvSend 1 发送事件。&nbsp;<br />comEvReceive 2 接收事件。&nbsp;<br />comEvCTS 3 clear-to-send 线变化。&nbsp;<br />comEvDSR 4 data-set ready 线变化。&nbsp;<br />comEvCD 5 carrier detect 线变化。&nbsp;<br />comEvRing 6 振铃检测。&nbsp;<br />comEvEOF 7 文件结束。&nbsp;<br /><br /><br /><strong><a name="Error 常数">Error 常数<br /></a></strong><br />常数 值 描述&nbsp;<br />comEventBreak 1001 接收到中断信号&nbsp;<br />comEventCTSTO 1002 Clear-to-send 超时&nbsp;<br />comEventDSRTO 1003 Data-set ready 超时&nbsp;<br />comEventFrame 1004 帧错误&nbsp;<br />comEventOverrun 1006 端口超速&nbsp;<br />comEventCDTO 1007 Carrier detect 超时&nbsp;<br />comEventRxOver 1008 接收缓冲区溢出&nbsp;<br />comEventRxParity 1009 Parity 错误&nbsp;<br />comEventTxFull 1010 传输缓冲区满&nbsp;<br />comEventDCB 1011 检索端口 设备控制块 (DCB) 时的意外错误&nbsp;<br /><br /><a name="InputMode 常数"><strong>InputMode 常数<br /></strong></a>常数 值 描述&nbsp;<br />comInputModeText 0 （缺省）通过 Input 属性以文本方式取回数据。&nbsp;<br />comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。&nbsp;<br /><br /><br /><br /><br /><br /><a name="CDHolding 属性"><strong>CDHolding 属性</strong></a>：通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号，指示调制解调器正在联机。该属性在设计时无效，在运行时为只读。<br /><br />语法 object.CDHolding<br />设置值：CDHolding 属性的设置值为：&nbsp;<br />设置 描述&nbsp;<br />True Carrier Detect 线为高电平&nbsp;<br />False Carrier Detect 线为低电平&nbsp;<br />说明：注意当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时，MSComm 控件设置CommEvent 属性为 comEventCDTO（Carrier Detect 超时错误），并产生 OnComm 事件。<br />注意 在主机应用程序中捕获一个丢失的传输是特别重要的，例如一个公告板，因为呼叫者可以随时挂起（放弃传输）。<br />Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。<br />数据类型 Boolean<br /><br /><strong><a name="DSRHolding 属性">DSRHolding 属性</a></strong>：确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机，指示作好操作准备。该属性在设计时无效，在运行时为只读。<br />语法：object.DSRHolding<br />object 所在处表示对象表达式，其值是&ldquo;应用于&rdquo;列表中的对象。<br />DSRHolding 属性返回以下值：<br />值 描述&nbsp;<br />True Data Set Ready 线高&nbsp;<br />False Data Set Ready 线低&nbsp;<br />说明：当 Data Set Ready 线为高电平 (DSRHolding = True) 且超时时，MSComm 控件设置 CommEvent 属性为 comEventDSRTO（数据准备超时）并产生 OnComm 事件。<br />当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。<br />数据类型：Boolean<br /><br /><br /><a name="Settings 属性"><strong>Settings 属性</strong></a>: 设置并返回波特率、奇偶校验、数据位、停止位参数。<br /><br />语法: object.Settings[ = value]<br />说明：当端口打开时，如果 value 非法，则 MSComm 控件产生错误 380（非法属性值）。<br />Value 由四个设置值组成，有如下的格式：<br />"BBBB,P,D,S"<br />BBBB 为波特率，P 为奇偶校验，D 为数据位数，S 为停止位数。value 的缺省值是：<br />"9600,N,8,1"<br /><br /><br /><strong><a name="InputLen 属性">InputLen 属性</a></strong>：设置并返回 Input 属性从接收缓冲区读取的字符数。<br /><br />语法 object.InputLen [ = value]<br />InputLen 属性语法包括下列部分：<br />value 整型表达式，说明 Input 属性从接收缓冲区中读取的字符数。&nbsp;<br />说明：InputLen 属性的缺省值是 0。设置 InputLen 为 0 时，使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。<br /><br />若接收缓冲区中 InputLen 字符无效，Input 属性返回一个零长度字符串 ("")。在使用 Input 前，用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。<br /><br /><br /><strong><a name="EOFEnable 属性">EOFEnable 属性</a></strong>：确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符，将停止输入并激活 OnComm 事件，此时 CommEvent 属性设置为 comEvEOF，<br />语法：object.EOFEnable [ = value ]<br />EOFEnable 属性语法包括下列部分：<br />value 布尔表达式，确定当找到 EOF 字符时，OnComm 事件是否被激活，如&ldquo;设置值&rdquo;中所描述。&nbsp;<br />value 的设置值：<br />True 当 EOF 字符找到时 OnComm 事件被激活。&nbsp;<br />False （缺省）当 EOF 字符找到时 OnComm 事件不被激活。&nbsp;<br />说明：当 EOFEnable 属性设置为 False，OnComm 控件将不在输入流中寻找 EOF 字符。<br /><br /><br /><a name="错误消息"><strong>错误消息</strong></a>（MS Comm 控件）<br /><br /><br />下表列出 MSComm 控件可以捕获的错误：<br /><br />值 描述&nbsp;<br />380 无效属性值 comInvalidPropertyValue<br />383 属性为只读 comSetNotSupported<br />394 属性为只读 comGetNotSupported&nbsp;<br />8000 端口打开时操作不合法 comPortOpen<br />8001 超时值必须大于 0&nbsp;<br />8002 无效端口号 comPortInvalid<br />8003 属性只在运行时有效&nbsp;<br />8004 属性在运行时为只读&nbsp;<br />8005 端口已经打开 comPortAlreadyOpen<br />8006 设备标识符无效或不支持该标识符&nbsp;<br />8007 不支持设备的波特率&nbsp;<br />8008 指定的字节大小无效&nbsp;<br />8009 缺省参数错误&nbsp;<br />8010 硬件不可用（被其它设备锁定）&nbsp;<br />8011 函数不能分配队列&nbsp;<br />8012 设备没有打开 comNoOpen&nbsp;<br />8013 设备已经打开&nbsp;<br />8014 不能使用 comm 通知&nbsp;<br />8015 不能设置 comm 状态 comSetCommStateFailed<br />8016 不能设置 comm 事件屏蔽&nbsp;<br />8018 仅当端口打开时操作才有效 comPortNotOpen&nbsp;<br />8019 设备忙&nbsp;<br />8020 读 comm 设备错误 comReadError<br />8021 为该端口检索设备控制块时的内部错误 comDCBError&nbsp;</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/218567#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 14:11:36 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/218567</link>
        <guid>http://ispring.javaeye.com/blog/218567</guid>
      </item>
      <item>
        <title>关于MySQL select into 和 SQLServer select into</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/218390" style="color:red;">http://ispring.javaeye.com/blog/218390</a>&nbsp;
          发表时间: 2008年07月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>关于MySQL select into 和 SQLServer select into</p>
<p><br />一.MySQL不支持Select Into语句直接备份表结构和数据,由于工作中的需要在网上找到一种方法可以代替, 也有其它方法可以处理,总结如下:</p>
<p>方法1: <br />&nbsp;&nbsp;&nbsp;&nbsp; MYSQL不支持: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select * Into new_table_name from old_table_name;<br />&nbsp;&nbsp;&nbsp;&nbsp; 替代方法: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Create table new_table_name (Select * from old_table_name);</p>
<p><br />方法2:<br />&nbsp;&nbsp;&nbsp;&nbsp; 1.先备份表结构和数据<br />#导出命令 -u用户名 -p密码 -h主机IP地址 数据库名 表名1&nbsp;&nbsp; &gt; 导出文件.sql<br />mysqldump -uroot -proot -h192.168.0.88 ok_db oktable2 &gt; ok_db.sql</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 2.修改备份表的名字<br />&nbsp;&nbsp;&nbsp;&nbsp; 3.登录MySQL<br />&nbsp;&nbsp;&nbsp;&nbsp; 4.选择数据库<br />&nbsp;&nbsp;&nbsp;&nbsp; 5.执行: Source 备份表的路径 如:Source d:\ok_db.sql 回车即可。<br />&nbsp;&nbsp;&nbsp;&nbsp; 6.完成.</p>
<p><br />二. SQLServer支持 Select into语句<br />&nbsp;&nbsp; 1.备份表直接执行如下就可以了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select * Into new_table_name from old_table_name;</p>
<p><br />三. MySQL Select into outfile用于导出指定的查询数据到文件如下：</p>
<p>1.导出表中所有数据到C盘根目录outfile.txt中如下：<br />&nbsp;&nbsp;&nbsp;&nbsp; Select * into outfile 'c:\\outfile.txt' from test;</p>
<p>&nbsp;&nbsp; <br />2.导出表中指定查询条件2005-06-08号的数据到C盘根目录outfile1.txt中如下：<br />&nbsp;&nbsp;&nbsp;&nbsp; Select * into outfile 'c:\\outfile.txt' from test where beginDate='2008-06-08';</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/218390#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 21:59:22 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/218390</link>
        <guid>http://ispring.javaeye.com/blog/218390</guid>
      </item>
      <item>
        <title>DomQuery基础</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/217164" style="color:red;">http://ispring.javaeye.com/blog/217164</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>文中使用函数&ldquo;Ext.query&rdquo;但须谨记它是&ldquo;Ext.DomQuery.select()&rdquo;的简写方式。<br /><span style="text-decoration: underline;">HTML源码:</span></p>
<div>
<div style="font-size: 12px; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: verdana; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre><span style="color: #606060;">   1:</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   2:</span>  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   3:</span>  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   4:</span>  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   5:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../ext/ext-base.js"</span><span style="color: #0000ff;">&gt;&lt;/script&gt;</span></pre>
<pre><span style="color: #606060;">   6:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../ext/ext-core.js"</span><span style="color: #0000ff;">&gt;&lt;/script&gt;</span></pre>
<pre><span style="color: #606060;">   7:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div</span> <span style="color: #ff0000;">id</span><span style="color: #0000ff;">="bar"</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="foo"</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   8:</span>    I'm a div ==<span style="color: #0000ff;">&gt;</span> my id: bar, my class: foo</pre>
<pre><span style="color: #606060;">   9:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span><span style="color: #0000ff;">&gt;</span>I'm a span within the div with a foo class<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  10:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="http://www.extjs.com"</span> <span style="color: #ff0000;">target</span><span style="color: #0000ff;">="_blank"</span><span style="color: #0000ff;">&gt;</span>An ExtJs link<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  11:</span>   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  12:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div</span> <span style="color: #ff0000;">id</span><span style="color: #0000ff;">="foo"</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  13:</span>    my id: foo, my class: bar</pre>
<pre><span style="color: #606060;">  14:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span>I'm a P tag within the foo div<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  15:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span><span style="color: #0000ff;">&gt;</span>I'm a span within the div with a bar class<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  16:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="#"</span><span style="color: #0000ff;">&gt;</span>An internal link<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  17:</span>   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  18:</span>  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  19:</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<strong>第一部分：元素选择符Selector</strong><span style="text-decoration: underline;"><br />JS源码:</span>
<div>
<div style="font-size: 12px; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: verdana; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre><span style="color: #606060;">   1:</span> <span style="color: #008000;">// 这个查询会返回有两个元素的数组因为查询选中对整个文档的所有span标签。</span></pre>
<pre><span style="color: #606060;">  2:</span> Ext.query(<span style="color: #006080;">"span"</span>); </pre>
<pre><span style="color: #606060;">   3:</span> <span style="color: #008000;">// 这个查询会返回有一个元素的数组因为查询顾及到了foo这个id。</span></pre>
<pre><span style="color: #606060;">  4:</span> Ext.query(<span style="color: #006080;">"span"</span>, <span style="color: #006080;">"foo"</span>);</pre>
<pre><span style="color: #606060;">   5:</span> <span style="color: #008000;">// 这个查询会返回包含我们foo div一个元素的数组！</span></pre>
<pre><span style="color: #606060;">  6:</span> Ext.query(<span style="color: #006080;">"#foo"</span>);</pre>
<pre><span style="color: #606060;">   7:</span> <span style="color: #008000;">/*这个查询会返回有一个元素的数组，包含与之前例子一样的div但是我们使用了class name来获取*/</span></pre>
<pre><span style="color: #606060;">   8:</span> Ext.query(<span style="color: #006080;">".foo"</span>);</pre>
<pre><span style="color: #606060;">   9:</span> <span style="color: #008000;">// 这会返回一个数组，包含文档的所有元素。</span></pre>
<pre><span style="color: #606060;"> 10:</span> Ext.query(<span style="color: #006080;">"*"</span>);</pre>
<pre><span style="color: #606060;">  11:</span> <span style="color: #008000;">// 这会返回有一个元素的数组，包含p标签的div标签 </span></pre>
<pre><span style="color: #606060;"> 12:</span> Ext.query(<span style="color: #006080;">"div p"</span>);</pre>
<pre><span style="color: #606060;">  13:</span> <span style="color: #008000;">// 这会返回有两个元素的数组，包含span标签的div标签 </span></pre>
<pre><span style="color: #606060;"> 14:</span> Ext.query(<span style="color: #006080;">"div span"</span>);</pre>
</div>
</div>
</div>
<div style="font-size: 14px; color: #000000; font-family: verdana;"><strong>第二部分：属性选择符Attributes selectors</strong><br />这些选择符可让你得到基于一些属性值的元素。属性指的是html元素中的<strong>href</strong>, <strong>id</strong> 或 <strong>class</strong>。<br /><span style="text-decoration: underline;">JS源码:</span></div>
<div style="font-size: 14px; color: #000000; font-family: verdana;">
<div style="font-size: 12px; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: verdana; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre><span style="color: #606060;">   1:</span> <span style="color: #008000;">// 我们检查出任何存在有class属性的元素。</span></pre>
<pre><span style="color: #606060;">  2:</span> <span style="color: #008000;">// 这个查询会返回5个元素的数组。</span></pre>
<pre><span style="color: #606060;">  3:</span> <span style="color: #008000;">// -[body#ext-gen2.ext-gecko, div#bar.foo, span.bar, div#foo.bar, span.bar]</span></pre>
<pre><span style="color: #606060;">   4:</span> Ext.query(<span style="color: #006080;">"*[class]"</span>); </pre>
<pre><span style="color: #606060;">   5:</span> <span style="color: #008000;">// 这会得到class等于“bar”的所有元素</span></pre>
<pre><span style="color: #606060;">  6:</span> Ext.query(<span style="color: #006080;">"*[class=bar]"</span>);</pre>
<pre><span style="color: #606060;">   7:</span> <span style="color: #008000;">// 这会得到class不等于“bar”的所有元素</span></pre>
<pre><span style="color: #606060;">  8:</span> Ext.query(<span style="color: #006080;">"*[class!=bar]"</span>);</pre>
<pre><span style="color: #606060;">   9:</span> <span style="color: #008000;">// 这会得到class从“b”字头开始的所有元素</span></pre>
<pre><span style="color: #606060;"> 10:</span> Ext.query(<span style="color: #006080;">"*[class^=b]"</span>);</pre>
<pre><span style="color: #606060;">  11:</span> <span style="color: #008000;">//这会得到class由“r”结尾的所有元素</span></pre>
<pre><span style="color: #606060;"> 12:</span> Ext.query(<span style="color: #006080;">"*[class$=r]"</span>);</pre>
<pre><span style="color: #606060;">  13:</span> <span style="color: #008000;">//这会得到在class中抽出“a”字符的所有元素</span></pre>
<pre><span style="color: #606060;"> 14:</span> Ext.query(<span style="color: #006080;">"*[class*=a]"</span>);</pre>
</div>
</div>
<div style="font-size: 14px; color: #000000; font-family: verdana;"><strong>第三部分： CSS值元素选择符</strong><span style="text-decoration: underline;"><br />HTML源码:</span>
<div>
<div style="font-size: 12px; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: verdana; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre><span style="color: #606060;">   1:</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   2:</span>  <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   3:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../ext/ext-base.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   4:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../ext/ext-core.js"</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   5:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div</span> <span style="color: #ff0000;">id</span><span style="color: #0000ff;">="bar"</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="foo"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:red;"</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   6:</span>    我是一个div ==<span style="color: #0000ff;">&gt;</span> 我的id是： bar, 我的class: foo</pre>
<pre><span style="color: #606060;">   7:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:pink;"</span><span style="color: #0000ff;">&gt;</span>I'm a span within the div with a foo class<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   8:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="http://www.extjs.com"</span> <span style="color: #ff0000;">target</span><span style="color: #0000ff;">="_blank"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:yellow;"</span><span style="color: #0000ff;">&gt;</span>An ExtJs link with a blank target!<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">   9:</span>   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  10:</span>   <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div</span> <span style="color: #ff0000;">id</span><span style="color: #0000ff;">="foo"</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:fushia;"</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  11:</span>    my id: foo, my class: bar</pre>
<pre><span style="color: #606060;">  12:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span>I'm a P tag within the foo div<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  13:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">="bar"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:brown;"</span><span style="color: #0000ff;">&gt;</span>I'm a span within the div with a bar class<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  14:</span>    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="#"</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="color:green;"</span><span style="color: #0000ff;">&gt;</span>An internal link<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  15:</span>   <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  16:</span>  <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span></pre>
<pre><span style="color: #606060;">  17:</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
</div>
</div>
<div style="font-size: 14px; color: #000000; font-family: verdana;"><span style="text-decoration: underline;">JS源码:</span>
<div>
<div style="font-size: 12px; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: verdana; background-color: #f4f4f4; border-style: none; padding: 0px;">
<pre><span style="color: #606060;">   1:</span> <span style="color: #008000;">// 获取所以红色的元素</span></pre>
<pre><span style="color: #606060;">   2:</span> Ext.query(<span style="color: #006080;">"*{color=red}"</span>); <span style="color: #008000;">// [div#bar.foo]</span></pre>
<pre><span style="color: #606060;">   3:</span> <span style="color: #008000;">// 获取所有粉红颜色的并且是有红色子元素的元素</span></pre>
<pre><span style="color: #606060;">   4:</span> Ext.query(<span style="color: #006080;">"*{color=red} *{color=pink}"</span>); <span style="color: #008000;">// [span.bar]</span></pre>
<pre><span style="color: #606060;">   5:</span> <span style="color: #008000;">// 获取所有不是红色文字的元素</span></pre>
<pre><span style="color: #606060;">   6:</span> Ext.query(<span style="color: #006080;">"*{color!=red}"</span>);  </pre>
<pre><span style="color: #606060;">   7:</span> <span style="color: #008000;">//[html, head, script firebug.js, link, body#ext-gen2.ext-gecko,</span></pre>
<pre><span style="color: #606060;">   8:</span> <span style="color: #008000;">// script ext-base.js, script ext-core.js, span.bar, </span></pre>
<pre><span style="color: #606060;">   9:</span> <span style="color: #008000;">//a www.extjs.com, div#foo.bar, p, span.bar, a test.html#]</span></pre>
<pre><span style="color: #606060;">  10:</span> <span style="color: #008000;">// 获取所有颜色属性是从“yel”开始的元素</span></pre>
<pre><span style="color: #606060;">  11:</span> Ext.query(<span style="color: #006080;">"*{color^=yel}"</span>); <span style="color: #008000;">// [a www.extjs.com]</span></pre>
<pre><span style="color: #606060;">  12:</span> <span style="color: #008000;">// 获取所有颜色属性是以“ow”结束的元素</span></pre>
<pre><span style="color: #606060;">  13:</span> Ext.query(<span style="color: #006080;">"*{color$=ow}"</span>); <span style="color: #008000;">// [a www.extjs.com]</span></pre>
<pre><span style="color: #606060;">  14:</span> <span style="color: #008000;">// 获取所有颜色属性包含“ow”字符的元素</span></pre>
<pre><span style="color: #606060;">  15:</span> Ext.query(<span style="color: #006080;">"*{color*=ow}"</span>); <span style="color: #008000;">// [a www.extjs.com, span.bar]</span></pre>
</div>
</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/217164#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 17:06:44 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/217164</link>
        <guid>http://ispring.javaeye.com/blog/217164</guid>
      </item>
      <item>
        <title>fireEvent与attachEvent</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/217163" style="color:red;">http://ispring.javaeye.com/blog/217163</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1.fireEvent()是强迫触发某个事件。<br />&nbsp;如：&lt;form onsubmit="a()"&gt;。。。<br />中，如果button的form.submit()的方式提交表单，是不会主动触发onsumbit事件的，如果必须的话，就要在submit前fireEvent("onsubmit")下，这样就会触发该事件了。</p>
<p>attachEvent()是绑定函数到某个事件上(detachEvent是卸载)。</p>
<p>如:&lt;button id=btn&gt;<br />&lt;script&gt;<br />var f =new Function("event","alert('i am attached function')");<br />btn.attachEvent("onclick",f);<br />&lt;/script&gt;<br />下面为fireFox中方法，firefox不支持fireEvent<br />if(&nbsp;&nbsp; document.all&nbsp;&nbsp; )&nbsp;&nbsp; <br />{<br />&nbsp;t.fireEvent(&nbsp;&nbsp; "onchange"&nbsp;&nbsp; );&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />else&nbsp;&nbsp; <br />{&nbsp;&nbsp; <br />&nbsp;var evt = document.createEvent('HTMLEvents');&nbsp;&nbsp; <br />&nbsp;evt.initEvent('change',true,true);&nbsp;&nbsp; <br />&nbsp;t.dispatchEvent(evt);&nbsp;&nbsp; <br />} <br />页面中不能同时出现window.onload=...和&lt;body onload="..."&gt;<br />解决办法就是用attachEvent给onload添加所需运行的函数<br />if (document.all){<br />&nbsp;window.attachEvent('onload',FuncName)<br />}<br />else{<br />&nbsp;window.addEventListener('load',FuncName,false);<br />}[最后编</p>
<p>实例区别：<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt; New Document &lt;/TITLE&gt;<br />&lt;META NAME="Generator" CONTENT="EditPlus"&gt;<br />&lt;META NAME="Author" CONTENT=""&gt;<br />&lt;META NAME="Keywords" CONTENT=""&gt;<br />&lt;META NAME="Description" CONTENT=""&gt;<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />function a()<br />{<br />&nbsp;var newEvt = document.createEventObject()<br />&nbsp;&nbsp;&nbsp; newEvt.button = 3<br />&nbsp;&nbsp;&nbsp; document.all.aa.fireEvent("onkeydown", newEvt)<br />&nbsp;&nbsp;&nbsp; //document.all.aa.click()<br />}</p>
<p>function b()<br />{<br />&nbsp;document.all.bb.onkeypress=c<br />}</p>
<p>function c()<br />{<br />&nbsp;alert()<br />}<br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;/HEAD&gt;</p>
<p>&lt;BODY onload="a();b()"&gt;<br />&lt;INPUT TYPE="text" id="aa" onkeydown="alert()"&gt;<br />&lt;INPUT TYPE="text" id="bb"&gt;&lt;br&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/217163#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 17:05:36 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/217163</link>
        <guid>http://ispring.javaeye.com/blog/217163</guid>
      </item>
      <item>
        <title>sql里比较时间范围的方式</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/217161" style="color:red;">http://ispring.javaeye.com/blog/217161</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: #000000;">CREATE TABLE #Test<br />(<br />&nbsp;createDate varchar(8)<br />)</span></p>
<p>INSERT INTO #Test<br />SELECT '20080602'<br />UNION ALL<br />SELECT '20080603'<br />UNION ALL<br />SELECT '20080701'</p>
<p><br />SELECT * FROM #Test</p>
<p><span style="color: #0000ff;">-----------------------------------------------</span><br /><span style="color: #0000ff;">SELECT * FROM #Test<br />WHERE <span style="color: #ff0000;">CAST(createDate as datetime)<br /></span>BETWEEN '20080604' AND '20080730'&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #999900;">[查询方式一]</span></p>
<p><span style="color: #0000ff;">-----------------------------------------------</span></p>
<p><span style="color: #0000ff;"><span style="color: #cc3333;">SELECT * FROM #Test1<br />WHERE cast(createDate as datetime)<br />BETWEEN '2008-06-04' AND '2008-07-30'</span></span> <span style="color: #999900;">[查询方式二：与方式一效果一样]</span></p>
<p><span style="color: #0000ff;">------------------------------------------------</span></p>
<p><span style="color: #0000ff;">SELECT * FROM #Test1<br />WHERE cast(createDate as datetime)<br />BETWEEN '2008/06/04' AND '2008/07/30'</span> <span style="color: #999900;">[查询方式三：与方式一，二效果同]</span></p>
<p><span style="color: #0000ff;">-----------------------------------------------</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/217161#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 16:57:59 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/217161</link>
        <guid>http://ispring.javaeye.com/blog/217161</guid>
      </item>
      <item>
        <title>解决Ext2 Form表单项的不正确显示问题 </title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/216729" style="color:red;">http://ispring.javaeye.com/blog/216729</a>&nbsp;
          发表时间: 2008年07月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在使用Ext2 form的过程中，发现了一些表单项在IE下外观显示的问题：<br />1、输入框下边的线消失 <br />2、日期控件及combo控件右侧的图片和左侧输入域垂直方向没有对齐。<br />这让表单看起来极其难受。</p>
<p>今天在JavaEye中找到了解决办法，赶紧贴出来，希望对同样遇到这些问题的朋友有所帮助。<br /><br /><strong>解决办法：</strong></p>
<div class="quote">
<div class="quote-title">引用</div>
<div class="quote-content"><br />在Ext-all.css中找到如下内容：<br />.ext-ie .x-form-text { <br />margin-top:-1px; <br />margin-bottom:-1px; <br />height:22px; <br />line-height:18px; <br />}<br /><br />然后替换 margin-bottom:-1px; 为 margin-bottom:0px;</div>
</div>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/216729#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Jul 2008 20:51:45 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/216729</link>
        <guid>http://ispring.javaeye.com/blog/216729</guid>
      </item>
      <item>
        <title>web上用Activex控件开发步骤(MFC) </title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/215425" style="color:red;">http://ispring.javaeye.com/blog/215425</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>首先要说明的是&nbsp;web上用activex是门被抛弃的技术。为什么这么说，主要基于以下几个原因：1.功能过于强大，强大到一旦安装，他所具有的权限可以做任何事，极易被人利用做坏事（相信大家都有浏览网页后莫名被安装流氓软件的经历，当然流氓软件利用的方式不止控件一种）；2。通过网页下载控件的中间过程受到操作系统、杀毒软件、浏览器等多方面因素限制，这使你的控件产品未必能在所有用户的电脑上正常使用；3。最恶心的一点，未签名没有正规安全证书的控件，在最新的浏览器上（IE7等）默认安全策略是直接屏蔽掉的，而你如果想要获取这个信任，需要向微软等少数单位申请，花费有多少？据说是每年4千多。。。<br />&nbsp;&nbsp;&nbsp;看了以上如果你还是想要知道步骤，如下：<br />一。用Vc++6.0新建工程里的向导创建MFC activeX controlWizard,细节不说了，根据你控件需要了，略有不同，问题不会太大。<br /><br />二。你控件代码的主xx.cpp（非xxCtr.cpp）文件中添加安全接口函数，否则每次运行控件时IE都会给出安全提示，很烦！<br /><em>#include "comcat.h"<br />#include "Objsafe.h"</em></p>
<p><em>// 本控件的CLSID,注册表用<br />const GUID CDECL CLSID_SafeItem ={ 0x7AE7497B, 0xCAD8, 0x4E66,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };<br />// 版本控制<br />const WORD _wVerMajor = 1;<br />// 次版本号<br />const WORD _wVerMinor = 0;</em> </p>
<p><br /><em>/////////////////////////////////////////////////////////////////////<br />// CICCardApp::InitInstance - DLL initialization</em> </p>
<p><em>BOOL CICCardApp::InitInstance()<br />{<br />&nbsp;&nbsp;&nbsp; BOOL bInit = COleControlModule::InitInstance();</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (bInit)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; return bInit;<br />}</em> </p>
<p><br /><em>//////////////////////////////////////////////////////////////////////<br />// CICCardApp::ExitInstance - DLL termination</em> </p>
<p><em>int CICCardApp::ExitInstance()<br />{<br />&nbsp;&nbsp;&nbsp; return COleControlModule::ExitInstance();<br />}</em> </p>
<p><br /><em>//////////////////////////////////////////////////////////////////////</em> </p>
<p><em>// 创建组件种类<br />HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)<br />{<br />&nbsp;&nbsp;&nbsp; ICatRegister* pcr = NULL ;<br />&nbsp;&nbsp;&nbsp; HRESULT hr = S_OK ;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; // Make sure the HKCR\Component Categories\{..catid...}<br />&nbsp;&nbsp;&nbsp; // key is registered.<br />&nbsp;&nbsp;&nbsp; CATEGORYINFO catinfo;<br />&nbsp;&nbsp;&nbsp; catinfo.catid = catid;<br />&nbsp;&nbsp;&nbsp; catinfo.lcid = 0x0409 ; // english</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; // Make sure the provided description is not too long.<br />&nbsp;&nbsp;&nbsp; // Only copy the first 127 characters if it is.<br />&nbsp;&nbsp;&nbsp; int len = wcslen(catDescription);<br />&nbsp;&nbsp;&nbsp; if (len&gt;127)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len = 127;<br />&nbsp;&nbsp;&nbsp; wcsncpy(catinfo.szDescription, catDescription, len);<br />&nbsp;&nbsp;&nbsp; // Make sure the description is null terminated.<br />&nbsp;&nbsp;&nbsp; catinfo.szDescription[len] = '\0';</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; hr = pcr-&gt;RegisterCategories(1, &amp;catinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcr-&gt;Release();</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; return hr;<br />}</em> </p>
<p><em>// 注册组件种类<br />HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)<br />{<br />&nbsp;&nbsp;&nbsp; // Register your component categories information.<br />&nbsp;&nbsp;&nbsp; ICatRegister* pcr = NULL ;<br />&nbsp;&nbsp;&nbsp; HRESULT hr = S_OK ;<br />&nbsp;&nbsp;&nbsp; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);<br />&nbsp;&nbsp;&nbsp; if (SUCCEEDED(hr))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Register this category as being "implemented" by the class.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CATID rgcatid[1] ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgcatid[0] = catid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hr = pcr-&gt;RegisterClassImplCategories(clsid, 1, rgcatid);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; if (pcr != NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcr-&gt;Release();<br />&nbsp;&nbsp;&nbsp; return hr;<br />}<br />// 卸载组件种类<br />HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)<br />{<br />&nbsp;&nbsp;&nbsp; ICatRegister* pcr = NULL ;<br />&nbsp;&nbsp;&nbsp; HRESULT hr = S_OK ;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&amp;pcr);<br />&nbsp;&nbsp;&nbsp; if (SUCCEEDED(hr))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Unregister this category as being "implemented" by the class.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CATID rgcatid[1] ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rgcatid[0] = catid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hr = pcr-&gt;UnRegisterClassImplCategories(clsid, 1, rgcatid);<br />&nbsp;&nbsp;&nbsp; }</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (pcr != NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcr-&gt;Release();</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; return hr;<br />}</em> </p>
<p><br /><em>// DllRegisterServer - Adds entries to the system registry<br />STDAPI DllRegisterServer(void)<br />{<br />&nbsp;&nbsp;&nbsp; HRESULT hr;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; AFX_MANAGE_STATE(_afxModuleAddrThis);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ResultFromScode(SELFREG_E_TYPELIB);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ResultFromScode(SELFREG_E_CLASS);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; // 标记控件初始化安全.<br />&nbsp;&nbsp;&nbsp; // 创建初始化安全组件种类<br />&nbsp;&nbsp;&nbsp; hr = CreateComponentCategory(CATID_SafeForInitializing,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L"Controls safely initializable from persistent data!");<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;<br />&nbsp;&nbsp;&nbsp; // 注册初始化安全<br />&nbsp;&nbsp;&nbsp; hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; // 标记控件脚本安全<br />&nbsp;&nbsp;&nbsp; // 创建脚本安全组件种类 <br />&nbsp;&nbsp;&nbsp; hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;<br />&nbsp;&nbsp;&nbsp; // 注册脚本安全组件种类<br />&nbsp;&nbsp;&nbsp; hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; return NOERROR;<br />}</em> </p>
<p><br /><em>//////////////////////////////////////////////////////////////////<br />// DllUnregisterServer - Removes entries from the system registry</em> </p>
<p><em>STDAPI DllUnregisterServer(void)<br />{<br />&nbsp;&nbsp;&nbsp; HRESULT hr;</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; AFX_MANAGE_STATE(_afxModuleAddrThis);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ResultFromScode(SELFREG_E_TYPELIB);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ResultFromScode(SELFREG_E_CLASS);</em> </p>
<p><em>&nbsp;&nbsp;&nbsp; // 删除控件初始化安全入口.<br />&nbsp;&nbsp;&nbsp; hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;<br />&nbsp;&nbsp;&nbsp; // 删除控件脚本安全入口<br />&nbsp;&nbsp;&nbsp; hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);<br />&nbsp;&nbsp;&nbsp; if (FAILED(hr))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hr;</em> </p>
<p><em>//////////////////////////<br />&nbsp;&nbsp;&nbsp; return NOERROR;<br />} </em></p>
<p>三。添加自己的代码到控件文件xxCtr.cpp中，这里最好通过向导添加View-&gt;ClassWard-&gt;automation。<br /><br />四。编译生成你的xx.ocx控件文件，这个文件其实就是个DLL函数库，只是后缀不同而已。<br /><br />五。制作xx.inf文件用于之后的空间打包压缩。红色部分为需要根据你自己情况修改的地方。<br /><em>[version]&nbsp;&nbsp; <br />signature="$CHICAGO$"&nbsp;&nbsp; <br />AdvancedINF=1.0&nbsp;&nbsp; <br />[Add.Code]&nbsp;&nbsp; <br /><span style="background-color: #ff0000;">xx.ocx=xx.ocx&nbsp;&nbsp; <br />[xx.ocx]</span>&nbsp;&nbsp; <br />file-win32-x86=thiscab&nbsp;&nbsp; <br /><span style="background-color: #ff0000;">clsid={351FC603-D784-4B8D-BA2C-33C212EC5BAA}</span>&nbsp;&nbsp; <br />FileVersion=<span style="background-color: #ff0000;">1,0,0,1</span>&nbsp;&nbsp; <br />RegisterServer=yes</em>&nbsp;&nbsp; <br /><br />六。打包压缩成xx.cab文件。你需要用到给控件签名的一些工具：cabarc.exe、signcode.exe,另外你可能需要用于制作自己试验证书的工具：makecert.exe、cert2spc.exe。<br />制作根证书MyCert.cer和私钥myKey.PVK：<br />makecert -r&nbsp; -sv "myKey.PVK"&nbsp; -n CN="xx Electric Industry Co. Ltd."&nbsp;&nbsp; MyCert.cer<br />CERT2SPC MyOKIcert.cer MyOKIcert.spc<br />打包压缩空间为xx.cab：<br />cabarc -s 6144 n xx.cab xx.ocx xx.inf<br />数字签名cab文件<br />双击signocode.exe文件，图形化签名，注意要通过自定义选择自己的证书和私钥而不是选择系统已有的。<br /><br />七。在你要用空间的Web上添加代码：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="2"&gt;&lt;object id='t1' codeBase=/UserMode/xx.cab#version=1,0,0,1 classid='clsid:F3530445-A287-4A0B-AC3E-C4AF2B63EBA7' height=0 width=0 &gt;&lt;/object&gt;&lt;/td&gt;<br /><br />八。调用控件内方法。通过javascript直接调用控件对象的方法就行了，比如调用空间中存在的一个download()方法： <em>document.getElementByID("t1").download();<br /><br /></em>八。客户端使用，其他人从网上下载到你的控件后，如果是Window XP系统的话，需要先导入证书为可信任（详细到Google上搜索导入证书，很容易），再安装控件，之后才能用；而如果是Window2000用户则只要安装控件就可以使用了。<br /><br />九。控件的删除。Internet选项-〉设定-〉显示对象，直接看到你的xx.cab文件，Del掉就行了，注册表中信息会自动消除掉，当然你也可以直接到注册表中删除对应xx.inf中列出的键值的项。<br /><br />十。升级。只要在源代码中更改xx.rc文件中对应的那些1.0.0.1为你的新版本号，并同时更改你调用控件的web上的版本号就可以了，下一次客户访问这个页面时会自动提示安装新控件，新控件会覆盖就版本的控件。<br /><br />&nbsp;&nbsp;&nbsp;以上仅供参考，本人也是新手，最近工作需要用控件才能完成一些功能，以上包含了我开发过程中碰到的诸多问题，希望对所有人能有所帮助</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/215425#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 15:07:36 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/215425</link>
        <guid>http://ispring.javaeye.com/blog/215425</guid>
      </item>
      <item>
        <title>利用Java实现串口全双工通讯</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/215254" style="color:red;">http://ispring.javaeye.com/blog/215254</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <blockquote>一个嵌入式系统通常需要通过串口与其主控系统进行全双工通讯，譬如一个流水线控制系统需要不断的接受从主控系统发送来的查询和控制信息，并将执行结果或查询结果发送回主控系统。本文介绍了一个简单的通过串口实现全双工通讯的Java类库，该类库大大的简化了对串口进行操作的过程。</blockquote>
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>本类库主要包括：SerialBean.java (与其他应用程序的接口), SerialBuffer.java (用来保存从串口所接收数据的缓冲区), ReadSerial.java (从串口读取数据的程序)。另外本类库还提供了一个例程SerialExample.java 作为示范。在下面的内容中将逐一对这几个部分进行详细介绍。</p>
<p><a name="1"><span class="atitle">SerialBean</span></a></p>
<p>SerialBean是本类库与其他应用程序的接口。该类库中定义了SerialBean的构造方法以及初始化串口，从串口读取数据，往串口写入数据以及关闭串口的函数。具体介绍如下：</p>
<p>public SerialBean(int PortID) <br />本函数构造一个指向特定串口的SerialBean，该串口由参数PortID所指定。PortID = 1 表示COM1，PortID = 2 表示COM2，由此类推。 <br />public int Initialize() <br />本函数初始化所指定的串口并返回初始化结果。如果初始化成功返回1，否则返回-1。初始化的结果是该串口被SerialBean独占性使用，其参数被设置为9600, N, 8, 1。如果串口被成功初始化，则打开一个进程读取从串口传入的数据并将其保存在缓冲区中。 <br />public String ReadPort(int Length) <br />本函数从串口(缓冲区)中读取指定长度的一个字符串。参数Length指定所返回字符串的长度。 <br />public void WritePort(String Msg) <br />本函数向串口发送一个字符串。参数Msg是需要发送的字符串。 <br />public void ClosePort() <br />本函数停止串口检测进程并关闭串口。</p>
<p>SerialBean的源代码如下：</p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">   package serial;
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
    /**
     *
     * This bean provides some basic functions to implement full dulplex
     * information exchange through the srial port.
     *
     */
    public class SerialBean
    {
        static String PortName;
        CommPortIdentifier portId;
        SerialPort serialPort;
        static OutputStream out;
        static InputStream  in;
        SerialBuffer SB;
        ReadSerial   RT;
            /**
             *
             * Constructor
             *
             * @param PortID the ID of the serial to be used. 1 for COM1,
             * 2 for COM2, etc.
             *
             */
            public SerialBean(int PortID)
            {
                PortName = "COM" + PortID;
            }
            /**
             *
             * This function initialize the serial port for communication. It startss a
             * thread which consistently monitors the serial port. Any signal capturred
             * from the serial port is stored into a buffer area.
             *
             */
            public int Initialize()
            {
                int InitSuccess = 1;
                int InitFail    = -1;
            try
            {
                portId = CommPortIdentifier.getPortIdentifier(PortName);
                try
                {
                    serialPort = (SerialPort)
                    portId.open("Serial_Communication", 2000);
                } catch (PortInUseException e)
                {
                    return InitFail;
                }
                //Use InputStream in to read from the serial port, and OutputStream
                //out to write to the serial port.
                try
                {
                    in  = serialPort.getInputStream();
                    out = serialPort.getOutputStream();
                } catch (IOException e)
                {
                    return InitFail;
                }
                //Initialize the communication parameters to 9600, 8, 1, none.
                try
                {
                     serialPort.setSerialPortParams(9600,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                } catch (UnsupportedCommOperationException e)
                {
                    return InitFail;
                }
            } catch (NoSuchPortException e)
            {
                return InitFail;
            }
            // when successfully open the serial port,  create a new serial buffer,
            // then create a thread that consistently accepts incoming signals from
            // the serial port. Incoming signals are stored in the serial buffer.
            SB = new SerialBuffer();
            RT = new ReadSerial(SB, in);
            RT.start();
            // return success information
            return InitSuccess;
            }
            /**
             *
             * This function returns a string with a certain length from the incomin
             * messages.
             *
             * @param Length The length of the string to be returned.
             *
             */
            public String ReadPort(int Length)
            {
                String Msg;
                Msg = SB.GetMsg(Length);
                return Msg;
            }
            /**
             *
             * This function sends a message through the serial port.
             *
             * @param Msg The string to be sent.
             *
             */
            public void WritePort(String Msg)
            {
                int c;
                try
                {
                    for (int i = 0; i &lt; Msg.length(); i++)
                        out.write(Msg.charAt(i));
                } catch (IOException e)  {}
            }
            /**
             *
             * This function closes the serial port in use.
             *
             */
            public void ClosePort()
            {
                RT.stop();
                serialPort.close();
            }
    }
   </pre>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" alt="" width="100%" /><br /><img src="http://www.ibm.com/i/c.gif" border="0" height="6" alt="" width="8" /></td>
</tr>
</tbody>
</table>
<table class="no-print" cellspacing="0" border="0" align="right" cellpadding="0">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" height="4" alt="" width="100%" /><br />
<table cellspacing="0" border="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" alt="" width="16" /><br /></td>
<td align="right" valign="top"><a href="http://ispring.javaeye.com/admin/blogs/#main" class="fbox"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<p><a name="2"><span class="atitle">SerialBuffer</span></a></p>
<p>SerialBuffer是本类库中所定义的串口缓冲区，它定义了往该缓冲区中写入数据和从该缓冲区中读取数据所需要的函数。</p>
<p>public synchronized String GetMsg(int Length) <br />本函数从串口(缓冲区)中读取指定长度的一个字符串。参数Length指定所返回字符串的长度。 <br />public synchronized void PutChar(int c) <br />本函数望串口缓冲区中写入一个字符，参数c 是需要写入的字符。 <br />在往缓冲区写入数据或者是从缓冲区读取数据的时候，必须保证数据的同步，因此GetMsg和PutChar函数均被声明为synchronized并在具体实现中采取措施实现的数据的同步。</p>
<p>SerialBuffer的源代码如下：</p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">   package serial;
    /**
     *
     * This class implements the buffer area to store incoming data from the serial
     * port.
     *
     */
    public class SerialBuffer
    {
        private String Content = "";
        private String CurrentMsg, TempContent;
        private boolean available = false;
        private int LengthNeeded = 1;
            /**
             *
             * This function returns a string with a certain length from the incomin
             * messages.
             *
             * @param Length The length of the string to be returned.
             *
             */
        public synchronized String GetMsg(int Length)
        {
            LengthNeeded = Length;
            notifyAll();
            if (LengthNeeded &gt; Content.length())
            {
                available = false;
                while (available == false)
                {
                    try
                    {
                        wait();
                    } catch (InterruptedException e) { }
                }
            }
            CurrentMsg  = Content.substring(0, LengthNeeded);
            TempContent = Content.substring(LengthNeeded);
            Content = TempContent;
            LengthNeeded = 1;
            notifyAll();
            return CurrentMsg;
        }
            /**
             *
             * This function stores a character captured from the serial port to the
             * buffer area.
             *
             * @param t The char value of the character to be stored.
             *
             */
        public synchronized void PutChar(int c)
        {
            Character d = new Character((char) c);
            Content = Content.concat(d.toString());
            if (LengthNeeded &lt; Content.length())
            {
                available = true;
            }
            notifyAll();
        }
    }
   </pre>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" alt="" width="100%" /><br /><img src="http://www.ibm.com/i/c.gif" border="0" height="6" alt="" width="8" /></td>
</tr>
</tbody>
</table>
<table class="no-print" cellspacing="0" border="0" align="right" cellpadding="0">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" height="4" alt="" width="100%" /><br />
<table cellspacing="0" border="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" alt="" width="16" /><br /></td>
<td align="right" valign="top"><a href="http://ispring.javaeye.com/admin/blogs/#main" class="fbox"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<p><a name="3"><span class="atitle">ReadSerial</span></a></p>
<p>ReadSerial是一个进程，它不断的从指定的串口读取数据并将其存放到缓冲区中。</p>
<p>public ReadSerial(SerialBuffer SB, InputStreamPort) <br />本函数构造一个ReadSerial进程，参数SB指定存放传入数据的缓冲区，参数Port指定从串口所接收的数据流。 <br />public void run() <br />ReadSerial进程的主函数，它不断的从指定的串口读取数据并将其存放到缓冲区中。</p>
<p>ReadSerial的源代码如下：</p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">   package serial;
    import java.io.*;
    /**
     *
     * This class reads message from the specific serial port and save
     * the message to the serial buffer.
     *
     */
    public class ReadSerial extends Thread
    {
        private SerialBuffer ComBuffer;
        private InputStream ComPort;
            /**
             *
             * Constructor
             *
             * @param SB The buffer to save the incoming messages.
             * @param Port The InputStream from the specific serial port.
             *
             */
        public ReadSerial(SerialBuffer SB, InputStream Port)
        {
            ComBuffer = SB;
            ComPort = Port;
        }
        public void run()
        {
            int c;
            try
            {
                while (true)
                {
                    c = ComPort.read();
                    ComBuffer.PutChar(c);
                }
            } catch (IOException e) {}
        }
    }
</pre>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" alt="" width="100%" /><br /><img src="http://www.ibm.com/i/c.gif" border="0" height="6" alt="" width="8" /></td>
</tr>
</tbody>
</table>
<table class="no-print" cellspacing="0" border="0" align="right" cellpadding="0">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" height="4" alt="" width="100%" /><br />
<table cellspacing="0" border="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" alt="" width="16" /><br /></td>
<td align="right" valign="top"><a href="http://ispring.javaeye.com/admin/blogs/#main" class="fbox"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<p><a name="4"><span class="atitle">SerialExample</span></a></p>
<p>SerialExample是本类库所提供的一个例程。它所实现的功能是打开串口COM1，对其进行初始化，从串口读取信息对其进行处理后将处理结果发送到串口。</p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td class="code-outline">
<pre class="displaycode">   import serial.*;
    import java.io.*;
    /**
     *
     * This is an example of how to use the SerialBean. It opens COM1 and reads
     * six messages with different length form the serial port.
     *
     */
    class SerialExample
    {
        public static void main(String[] args)
        {
            //TO DO: Add your JAVA codes here
            SerialBean SB = new SerialBean(1);
            String Msg;
            SB.Initialize();
            for (int i = 5; i &lt;= 10; i++)
            {
                Msg = SB.ReadPort(i);
                SB.WritePort("Reply: " + Msg);
            }
            SB.ClosePort();
        }
    }
</pre>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr>
<td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" alt="" width="100%" /><br /><img src="http://www.ibm.com/i/c.gif" border="0" height="6" alt="" width="8" /></td>
</tr>
</tbody>
</table>
<table class="no-print" cellspacing="0" border="0" align="right" cellpadding="0">
<tbody>
<tr align="right">
<td><img src="http://www.ibm.com/i/c.gif" height="4" alt="" width="100%" /><br />
<table cellspacing="0" border="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" alt="" width="16" /><br /></td>
<td align="right" valign="top"><a href="http://ispring.javaeye.com/admin/blogs/#main" class="fbox"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><br /></p>
<p><a name="5"><span class="atitle">编译与调试</span></a></p>
<p>本类库中使用了Java Communication API (javax.comm)。这是一个Java扩展类库，并不包括在标准的Java SDK当中。如果你尚未安装这个扩展类库的话，你应该从Sun公司的Java站点下载这个类库并将其安装在你的系统上。在所下载的包里面包括一个安装说明，如果你没有正确安装这个类库及其运行环境的话，运行这个程序的时候你会找不到串口。</p>
<p>正确安装Java Communication API并将上述程序编译通过以后，你可以按如下方法测试这个程序。如果你只有一台机器，你可以利用一条RS-232电缆将COM1和COM2连接起来，在COM1上运行SerialExample，在COM2上运行Windows提供的超级终端程序。如果你有两台机器的话，你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来，在一端运行例程，另外一端运行Windows提供的超级终端程序。如果有必要的话，可以对SerialExample中所声明的串口进行相应改动。</p>
<p><strong>本程序在Windows 2000 + Java SDK 1.3环境下编译通过并成功运行。</strong> </p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/215254#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 00:53:08 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/215254</link>
        <guid>http://ispring.javaeye.com/blog/215254</guid>
      </item>
      <item>
        <title>使用JNative对条码打印机进行打印 </title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/215253" style="color:red;">http://ispring.javaeye.com/blog/215253</a>&nbsp;
          发表时间: 2008年07月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>使用JNative对条码打印机进行打印 <br /><br /><br />因项目需要，对Godex EZ2300条码机进行调用打印, 驱动为Ez2000.dll, 用JNI可以实现调用，但比较麻烦, 需 <br /><br />要用到VC6进行DLL封装，改用JNative组件进行调用, 步骤如下: <br /><br />1. 下载JNative-1.3.2.zip组件库 <br /><br />2. 解压出来后有JNative.jar / JNativeCpp.dll / libJNativeCpp.so三个文件，JNative.jar置于%JAVA_HOME%/jre/lib/ext目录下, JNativeCpp.dll置于%SYSTEM%/WINDOWS/SYSTEM32目录下 <br /><br />3.将Ez2000.dll置于%SYSTEM%/WINDOWS/SYSTEM32目录以及%JAVA_HOME%/jdk/bin目录下 <br /><br />4. <br /><br />具体Java代码如下:</p>
<pre name="code" class="java">package com.athens.test;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;

public class Demo {

private static final String PRINTER_DLL = "Ez2000.dll";

public static void main(String [] args) {
Demo demo = new Demo();
System.loadLibrary("Ez2000");
JNative n = null;
try {
n = demo.getJNativeByFunction("isready");
n.setRetVal(Type.INT);
// n.setParameter(1, Type.VOID, "");
n.invoke();
Integer isready = Integer.parseInt(n.getRetVal());
if(isready == 1){

System.out.println("条码机可以开始接收资料!Starting...");
System.out.println("Starting...");
// 打开端口
n = demo.getJNativeByFunction("openport");
n.setParameter(0, Type.STRING, "0");
n.invoke();

// 设定参数
n = demo.getJNativeByFunction("setup");
n.setRetVal(Type.INT);
n.setParameter(0, Type.INT, "30");
n.setParameter(0, Type.INT, "7");
n.setParameter(0, Type.INT, "2");
n.setParameter(0, Type.INT, "1");
n.setParameter(0, Type.INT, "0");
n.setParameter(0, Type.INT, "0");
n.invoke();

// 发出指令
n = demo.getJNativeByFunction("sendcommand");
n.setRetVal(Type.INT);
n.setParameter(0, Type.STRING, "W70");
n.invoke();

n.setRetVal(Type.INT);
n.setParameter(0, Type.STRING, "^P1");
n.invoke();

n.setRetVal(Type.INT);
n.setParameter(0, Type.STRING, "^L");
n.invoke();

n.setRetVal(Type.INT);
n.setParameter(0, Type.STRING, "AC,20,60,1,1,1,0,TEST");
n.invoke();

// 发送条形码
n = demo.getJNativeByFunction("ecTextOut");
n.setParameter(0, Type.INT, "20");
n.setParameter(1, Type.INT, "10");
n.setParameter(2, Type.INT, "34");
n.setParameter(3, Type.STRING, "标楷体");
n.setParameter(4, Type.STRING, "Athens Testing Successlly!!!");
n.invoke();

// 发出指令
n = demo.getJNativeByFunction("sendcommand");
n.setRetVal(Type.INT);
n.setParameter(0, Type.STRING, "E");
n.invoke();

// 关闭端口
n = demo.getJNativeByFunction("closeport");
n.invoke();
System.out.println("Ending...");
}else{
System.out.println("条码机无法接收资料!");
}
}catch(Exception e){
e.printStackTrace();
}finally{
if (n != null){
try {
n.dispose();
} catch (NativeException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}

// 通过方法名取得JNative对象
public JNative getJNativeByFunction(String functionName) throws NativeException{
return new JNative(PRINTER_DLL, functionName);
}
} </pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/215253#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jul 2008 00:50:50 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/215253</link>
        <guid>http://ispring.javaeye.com/blog/215253</guid>
      </item>
      <item>
        <title>Ubuntu 多媒体解决方案</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/214108" style="color:red;">http://ispring.javaeye.com/blog/214108</a>&nbsp;
          发表时间: 2008年07月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>多媒体解决方案是：一般普通的播放任务使用 Totem 电影播放机，如果遇到不能播放的情况或者看大碟时就选用 Mplayer ，播放音乐使用 audacious。  <br />
 装多媒体软件和相应解码器 <br />
 安装audacious&nbsp;&nbsp;Ubuntu中类似千千静听的的播放器， <br />
 支持播放 ogg*, flac*, mp3, wma, wav, 3gp 这些格式。 <br />
 安装 mplayer 和 totem (播放 xvid/divx 编码的 avi 格式 <br />
 视频, rm/rmvb/asf/wmv 等流媒体视频，外加 vcd/dvd  <br />
 和其他 mpeg2/mpeg4 视频。) <br />
  <br />
 为了方便所以来个一键全媒体方案  <br />
sudo&nbsp;&nbsp;apt-get install mplayer mozilla-mplayer totem-xine
libxine1-ffmpeg audacious ffmpeg&nbsp;&nbsp; gstreamer0.10-plugins-ugly
gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-*&nbsp;&nbsp;lame faad
sox mjpegtools&nbsp;&nbsp;w32codecs&nbsp;&nbsp;gstreamer0.10-* totem-xine&nbsp;&nbsp;ffmpeg lame faad
sox mjpegtools&nbsp;&nbsp;libdvdcss2&nbsp;&nbsp;sidplay-base xsidplay libggi-target-x
libggi-target-emu libggi-target-monotext toolame mpeg2dec&nbsp;&nbsp;
avifile-divx-plugin avifile-xvid-plugin mencoder libdivxencore0 drip
libavifile-0.7c2 mpg123-el flac123&nbsp;&nbsp;mpc mpd gmpc sonata gxine
totem-xine kaffeine flac&nbsp;&nbsp;beep-media-player-*&nbsp;&nbsp;xine-ui&nbsp;&nbsp; bmpx&nbsp;&nbsp;
gstreamer0.8*&nbsp;&nbsp;vlc <br />
  <br />
 win32codes下载 <br />
  <br />
<img class="icon" src="http://www.ubfchina.cn/images/filetype/url.gif" alt="" />
<a href="http://archive.ubuntu.org.cn/ubuntu-cn/dists/edgy/main/" target="_blank">http://archive.ubuntu.org.cn/ubuntu-cn/dists/edgy/main/</a>
 <br />
 binary-i386/media/w32codecs_20060611-1plf6.10_i386.deb <br />
 ftp://211.86.156.210/debian-multimedia/pool/main/w/w32codecs/w32codecs_20061022-0.0_i386.deb <br />
  <br />
  <br />
 Totem（或使用xine）播放rmvb没有声音的解决办法 <br />
 打开主文件夹，按Ctrl+H显示所有文件 <br />
 找到并编辑~/.xine/catalog.cache文件 <br />
 [/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so] <br />
 把decoder_priority增加到10 <br />
  <br />
 Audacious的设置 <br />
 1）解决audacious中文乱码现象:在audacious上右键选择&ldquo;首选项&rdquo;，在&ldquo;播放列表&rdquo;中，把标题格式改为&ldquo;Custom&quot;,再把自定格式改为 <br />
 &ldquo;%f&rdquo;（不要引号）。 <br />
 2) 如果要让 audacious 播放 APE 格式的音乐： <br />
 sudo apt-get install audacious-mac <br />
 3) 如果需要把 APE 转换为 FLAC： <br />
 sudo apt-get install mac flac cuetools shntool <br />
 cuebreakpoints xx.cue |shnsplit -o flac -n xx xx.ape <br />
  <br />
  <br />
 Mplayer 的中文字幕设置方法 <br />
 1) 在 Preferences-Font 里面点击 &rdquo;Browse&rdquo; 选择一个中文字体，Encodeing 选择 Unicode。 <br />
 2) 在 Preferences-Subtitle&amp;OSD 里面的 Encoding 选择： <br />
 Simplified Chinese Charset(cp936) <br />
 3) 在 Preferences-Font &ldquo;Text scale&rdquo; 这里调整字幕大小(我调整为 3.8 )。 <br />
 如果播放时提示错误，设置一下： <br />
 Preferences-Video 选择 &ldquo;xv X11/Xv&rdquo; &ldquo;Enable frame dropping&quot; <br />
 Preferences-Codecs&amp;demuxer 选择 &ldquo;FFmpeg/libavcodec audio decoders&rdquo; <br />
 如果要让 Rhythmbox 和 Banshee 这些使用 gstreamer 为后端的播放器，能播放 mp3, wma, ra, ram, wav 等格式音乐，就装上： <br />
 &nbsp;&nbsp;&nbsp;&nbsp;sudo apt-get install gstreamer0.10-plugins-ugly gstreamer0.10-pitfdll gstreamer0.10-ffmpeg <br />
  <br />
 2、安装Realplayer播放器 <br />
 sudo apt-get install realplay <br />
 安装了realplay，如果打不开。可能是因为和SCIM输入法有冲突，可这样处理： <br />
 sudo gedit /usr/bin/realplay <br />
 在第二行也就是&ldquo;#!/bin/sh&rdquo;的下一行加入 CODE代码: <br />
 GTK_IM_MODULE=xim; export GTK_IM_MODULE <br />
  <br />
 3、安装smplayer：一个非常好的播放器！ <br />
 sudo apt-get install smplayer <br />
  <br />
 4、使用 Firefox 在线播放解决办法 <br />
 1) 内嵌播放，可以安装 MediaWrap 这个扩展。 <br />
 2) 如果喜欢调用外部播放器播放，安装 MediaPlayerConnectivity 。 <br />
 播放不了在线的MP3文件的，就像在百度MP3／SOSO，有可能是因 <br />
 为用了totem的插件，因此我们把totem的firefox插件删除就可以了 <br />
 ，使用命令： <br />
 sudo apt-get remove totem-mozilla 这样firefox就会用MPLAYER的 <br />
 播放了 <br />
  <br />
 5、安装LyricZilla （可能CPU占用比较高） <br />
 LyricZilla是为 Linux 下的多款音乐播放器做的插件（现在可插于 beep-media-player 和 audacious）。它能够自动搜索当前播放歌曲的歌词，而且当前行会在播放时滚动。 <br />
 1. 加入APT源： <br />
 sudo wge<img class="icon" src="http://www.ubfchina.cn/images/filetype/url.gif" alt="" />
<a href="http://lyriczilla.googlecode.com/svn/trunk/package/lyriczilla.list" target="_blank">http://lyriczilla.googlecode.com/svn/trunk/package/lyriczilla.list</a>
 -O /etc/apt/sources.list.d/lyriczilla.list <br />
 2. 安装：sudo apt-get update <br />
 sudo apt-get install lyriczilla lyriczilla-plugin-audacious lyriczilla-plugin-bmp <br />
 安装好之后，在beep-media-player或audacious的首选项－插件－常规里面，勾选它。  </p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/214108#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jul 2008 10:28:47 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/214108</link>
        <guid>http://ispring.javaeye.com/blog/214108</guid>
      </item>
      <item>
        <title>Ubuntu 查看ISO文件</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/214034" style="color:red;">http://ispring.javaeye.com/blog/214034</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在Linux系统下要查看ISO文件，可以将ISO文件跟普通的硬盘一样，直接挂载到 Linux 系统下；在linux下默认的ISO挂载点位于&quot;/media&quot;目录，下面是挂载一个ISO文件的方法：<br />
<br />
sudo mkdir /media/cdimage  ＃建立一个文件夹作为ISO挂载点<br />
sudo mount -o loop myfile.iso /media/cdimage   ＃挂载ISO文件，使用参数 -o loop<br />
<br />
使用你想挂载的iso文件代替myfile.iso。<br />
<br />
挂载一个镜像文件使之能被写入，使用下面的命令：<br />
<br />
sudo mkdir /media/cdimage<br />
sudo mount -o rw,loop myfile.iso /media/cdimage<br />
<br />
卸载镜像文件：<br />
<br />
sudo umount /media/cdimage<br />
rmdir /media/cdimage<br />
<br />
其它格式<br />
<br />
其它的CD,DVD镜像文件能被转换成ISO文件以被挂载<br />
<br />
* Nero 镜像（.nrg)文件能使用 nrg2iso 转换成ISO文件，或者使用mount挂载<br />
o 使用mount挂载:<br />
<br />
sudo mkdir /media/cdimage<br />
sudo mount -o loop,offset=307200 myfile.nrg /media/cdimage<br />
<br />
o 安装nrg2iso:<br />
<br />
sudo apt-get install nrg2iso<br />
<br />
o 使用nrg2iso转换成iso文件:<br />
<br />
nrg2iso myfile.nrg myfile.iso<br />
<br />
* Cue/Bin 镜像 (.cue/.bin) 必须转换才能使用. 使用bchunk可以转换.<br />
o 安装bchunk:<br />
<br />
sudo apt-get install bchunk<br />
<br />
o 使用bchunk转换:<br />
<br />
bchunk myfile.bin myfile.cue myfile<br />
<br />
* Clone CD (.ccd/.img/.sub) files must be converted. This can be done
using ccd2iso. The package for this program is extremely unstable and
has been taken from the Ubuntu forums <a href="http://www.ubuntuforums.org/" title="外部链接至 http://www.ubuntuforums.org" target="_blank">http://www.ubuntuforums.org</a>
. It is also only packaged for Pentium (i386) systems. You can also compile from the source using the guide on <a href="http://hi.baidu.com/erwinwang/blog/item/:;" title="'ManageDiscImages' 尚无内容" class="tiddlyLink tiddlyLinkNonExisting">ManageDiscImages</a>
. <br />
<br />
克隆CD (.ccd/.img/.sub)文件必须转换才能使用。可以使用ccd2iso来转换。该软件安装包包含在extremely unstable （不稳定版本），并被Ubuntu论坛（<a href="http://www.ubuntuforums.org/" title="外部链接至 http://www.ubuntuforums.org" target="_blank">http://www.ubuntuforums.org</a>
 ） 采用。它也是仅有的针对Pentium（i386）系统的软件包。你也可以参考 <a href="http://hi.baidu.com/erwinwang/blog/item/:;" title="'ManageDiscImages' 尚无内容" class="tiddlyLink tiddlyLinkNonExisting">ManageDiscImages</a>
 帮助页的指南使用源码来编译该软件。<br />
<br />
o 下载并安装ccd2iso ，下载地址： <a href="http://rarewares.org/debian/packages/unstable/ccd2iso_0.2-0.1_i386.deb" title="外部链接至 http://rarewares.org/debian/packages/unstable/ccd2iso_0.2-0.1_i386.deb" target="_blank">http://rarewares.org/debian/packages/unstable/ccd2iso_0.2-0.1_i386.deb</a>
<br />
o 安装该软件:<br />
<br />
sudo dpkg -i ccd2iso_0.2-0.1_i386.deb<br />
<br />
o 使用ccd2iso 转换：<br />
<br />
ccd2iso myfile.img myfile.iso<br />
<br />
* Alcohol 120% image (.mdf) 文件可以使用mdf2iso 转换成ISO文件或者使用mount挂载。<br />
o 使用mount挂载:<br />
<br />
sudo mkdir /media/cdimage<br />
sudo mount -o loop=/dev/loop0 myfile.iso /media/cdimage<br />
<br />
o 安装mdf2iso:<br />
<br />
sudo apt-get install mdf2iso<br />
<br />
o 使用mdf2iso转换:<br />
<br />
mdf2iso myfile.mdf myfile.iso<br />
<br />
* 其它的镜像格式文件问题可以参考帮助页 <a href="http://hi.baidu.com/erwinwang/blog/item/:;" title="'ManageDiscImages' 尚无内容" class="tiddlyLink tiddlyLinkNonExisting">ManageDiscImages</a>
.<br />
<br />
其他选项<br />
<br />
cdemu是一个直接挂载Cue/Bin文件的内核模块.你需要先安装 linux-headers,编译并挂载该模块.<br />
<br /></p>
<h3><a href="http://windy-valley.blogspot.com/2007/03/linuxcuebin.html">在Linux中如何挂载cue/bin文件</a>
</h3>
<p>
我的系统是Ubuntu Edgy 6.10，思路是将cue/bin文件转换为iso文件先，然后再mount iso文件。<br />
首先安装bchunk：<br />
sudo apt-get install bchunk<br />
然后便是用bchunk转换：<br />
bchunk -v xxx.bin xxx.cue xxx<br />
这样等待一段时间便在同一路径下边生成xxx.iso文件，接下来便是mount iso文件了：<br />
sudo mount -o loop xxx.iso /mnt/temp<br />
<br />
还有一个方法，用cdemu将cue/bin文件模拟成一个虚拟的光驱设备然后再挂载。<br />
sudo cdemu 0<br />
sudo mount -t iso9660 /dev/cdemu/0 /mnt/temp<br />
cdemu在<a href="http://cdemu.sourceforge.net/">这里</a>
可以找到。
	</p>
          <br/>
          <span style="color:red;">
            <a href="http://ispring.javaeye.com/blog/214034#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 18:37:36 +0800</pubDate>
        <link>http://ispring.javaeye.com/blog/214034</link>
        <guid>http://ispring.javaeye.com/blog/214034</guid>
      </item>
      <item>
        <title>在 Linux x86 上安装 Oracle 数据库 10g</title>
        <author>ispring</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ispring.javaeye.com">ispring</a>&nbsp;
          链接：<a href="http://ispring.javaeye.com/blog/214008" style="color:red;">http://ispring.javaeye.com/blog/214008</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="boldbodycopy">目录</span>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#over" class="bodylink">概述</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#linux" class="bodylink">第 1 部分：安装 Linux</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel2" class="bodylink">RHEL 2.1</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel3" class="bodylink">RHEL 3</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#sles" class="bodylink">SLES 8</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#config" class="bodylink">第 2 部分：针对 Oracle 配置 Linux</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#sys" class="bodylink">验证系统要求</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#dir" class="bodylink">创建目录</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#groups" class="bodylink">创建 Oracle 组和用户帐户</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#kernel" class="bodylink">配置 Linux 内核参数</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#shell" class="bodylink">为 Oracle 用户设置 Shell 限制</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#bug" class="bodylink">避免错误！（仅限 SLES 8）</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#enviro" class="bodylink">Oracle 用户的环境变量</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#oracle" class="bodylink">第 3 部分：安装 Oracle</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#softinstall" class="bodylink">安装软件</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#storage" class="bodylink">第 4 部分：配置存储</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#file" class="bodylink">文件系统</a>
<br />
  <a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#asm" class="bodylink">自动存储管理</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#conc" class="bodylink">结论</a>
<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#append" class="bodylink">附录</a></p>
<p>&nbsp;</p>
<hr />
<p><a name="over"></a>
<span class="parahead1">概述</span>
 
</p>
<p><span class="bodycopy">这是在 Linux 上安装 Oracle 10<em>g</em>
 软件主要组件指南系列的第一部分。这些文章详细介绍了 Linux 的所有三个已认证的英语发行套件（未介绍 Asianux），并假设使用廉价的 Intel x86 硬件。同时，还逐步演示了为评估主要 Oracle 10<em>g</em>
 产品而在常见硬件上进行安装和配置的过程。 </span>
</p>
<p><span class="bodycopy">该系列的根本目标是逐步演示如何安装和配置 10<em>g</em>
 网格的所有组件。通过这个系列，您将了解如何安装和配置单实例 Oracle 10<em>g</em>
 数据库（本文）、双节点 Oracle RAC 10<em>g</em>
 数据库、Oracle 应用服务器 10<em>g</em>
 和 Oracle Enterprise Manager 10<em>g</em>
 网格控制的所有主要组件。 </span>
</p>
<p><span class="bodycopy">该系列提供的方法将采用最简单的途径（步骤数最少）来完成任务。该方法通常意味着所选择的配置将只适用于评估。因此，该系列既不适用于构建生产品质的环境，也不反映最佳实践。 </span>
</p>
<p><span class="bodycopy">以下是这些文章所介绍的获得 Oracle 10<em>g</em>
 认证的三个 Linux 发行套件： </span>
                  </p>
<ul class="bodycopy">
<li>Red Hat Enterprise Linux 2.1 
</li>
<li>Red Hat Enterprise Linux 3 
</li>
<li>Novell SUSE Linux Enterprise Server 8 
</li>
</ul>
<p><span class="bodycopy">如果您是初次接触 Linux 和/或 Oracle，那这第一篇文章特适合您。它首先介绍基础知识，然后逐步演示如何从头安装 Oracle 数据库 10<em>g</em>
。 </span>
</p>
<p><span class="bodycopy">本文由四部分组成：第 1 部分介绍了如何安装 Linux 操作系统，第 2 部分介绍了如何针对 Oracle 配置 Linux，第 3 部分介绍了 Oracle 数据库安装的要点，第 4 部分介绍了如何创建其他文件系统并介绍了<a href="http://www.oracle.com/technology/globla/cn/products/database/asm/" class="bodylink">自动存储管理</a>
 (ASM)（Oracle 数据库 10<em>g</em>
 中一个出色的新特性，它显著简化了存储管理）。附录提供了帮助您了解新数据库用法的信息，其中包括如何交互地访问该数据库、如何停止和启动数据库及相关服务。</span>
</p>
<p>&nbsp;</p>
<hr />
<p><a name="linux"></a>
<span class="parahead1">第 1 部分：安装 Linux</span>
 
</p>
<p>本指南采用具有以下硬件配置的服务器： 
                  </p>
<ul>
<li>两个 800MHz Pentium III CPU 
</li>
<li>512MB RAM 
</li>
<li>两个 SCSI 主机适配器 (Ultra SCSI 160)
</li>
<li>八个 SCSI 磁盘驱动器 (2 x 9GB + 6 x 36GB) 
</li>
<li>一个 100Base-T 以太网适配器
</li>
<li>一个 1000Base-T 以太网适配器 </li>
</ul>
<p>对磁盘进行配置，使每个 SCSI 主机适配器连接到一个 9GB 磁盘和三个 36GB 磁盘。 
</p>
<p><span class="bodycopy">请注意，尽管这根本算不上是一个&ldquo;强大&rdquo;的设置，但即便是使用再低的设置也可以完成本指南介绍的大部分任务。基本数据库安装只需要一个 CPU、512MB 内存和一个可用空间至少为 6.5GB 的磁盘驱动器（IDE、SCSI 或 FireWire）。 </span>
</p>
<p><span class="bodycopy">现在，我们将逐步演示在服务器上安装 Linux 操作系统的过程。本文假设进行 Linux 系统全新安装（有别于升级），并假设服务器为 Oracle 所专用，且服务器上没有其他操作系统或数据。</span>
</p>
<p><a name="rehel2"></a>
<span class="parahead1">Red Hat Enterprise Linux 2.1 </span>
 
</p>
<p><span class="bodycopy">Oracle 10<em>g</em>
 经认证可以在 Red Hat Enterprise Linux 2.1（Advanced Server 和 Enterprise Server）(Update 3) 或更高版本上运行。<a href="http://www.redhat.com/software/rhn/" class="bodylink">Red Hat Network</a>
 (RHN) 提供更新，这些更新可以作为用于创建 CD 的 ISO 文件或作为单个程序包更新下载。 </span>
</p>
<p><span class="bodycopy">要对全新 Linux 安装应用更新，最简单、最快速的方法是使用更新 CD 执行安装。如果 Linux 已经安装或 CD 上没有更新，则可以通过 RHN 应用这些更新。由于本指南针对的是全新 Linux 安装，因此您将使用更新 CD。 </span>
                  </p>
<ol class="bodycopy">
<li>使用更新 CD 集中的第一张 CD 启动服务器。 
                    
<ul>
<li>您可能需要更改 BIOS 设置，以允许从 CD 启动。</li>
</ul>
</li>
<li>启动屏幕上出现时在底部显示 <tt>boot:</tt>
。 
                    
<ul>
<li>选择 <strong>Enter</strong>
，从控制台上执行图形安装。（对于其他安装方法和选项，请参阅 <em><a href="https://www.redhat.com/docs/manuals/enterprise/RHEL-AS-2.1-Manual/install-guide/" class="bodylink">Red Hat 安装指南</a>
</em>
。）</li>
</ul>
<ul>
<li>安装程序扫描硬件，短暂显示 Red Hat 闪屏，然后开始显示一系列屏幕提示。</li>
</ul>
</li>
<li>选择语言
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>配置键盘
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>配置鼠标
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>安装类型
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>设置磁盘分区
                    
<ul>
<li>本文不介绍磁盘分区的详细方法，而是假设您熟悉磁盘分区方法。
<p>（警告：对磁盘进行错误分区是<strong>删除硬盘上所有内容</strong>
的最可靠、最快捷的方法之一。如果不确定如何分区，请先停下来，找人帮帮您，否则您将冒丢失数据的危险！） 
</p>
<p>本文使用以下分区方案（文件系统均为 ext3）：<br />
<br />
第一个控制器 (/dev/sda) 上的 9GB 磁盘包含以下分区，用于存放所有 Linux 和 Oracle 软件：<br />
- 100MB /boot 分区（对于 RHEL 2.1，最小为 50MB）<br />
-1,500MB 交换分区 &mdash; 将此分区大小至少设置为系统 RAM 的两倍，但不要超过 2GB（32 位系统不支持大于 2GB 的交换文件）。如果需要大于 2GB 的交换空间，则创建多个交换分区。<br />
-7,150MB 根分区 &mdash; 该分区将用于所有目录，包括 /usr、/tmp、/var、/opt、/home 等。这样做纯粹是为了讲解本指南而简化安装。更可靠的分区方案是将这些目录划分到单独的文件系统。 </p>
</li>
</ul>
</li>
<li>配置启动加载程序
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>配置启动加载程序口令
                    
<ul>
<li>如果要为 GRUB 设置口令，请在此处输入。对于评估系统，无需设置该项。</li>
</ul>
</li>
<li>配置网络
                    
<ul>
<li>通常情况下，最好使用静态 IP 地址配置数据库服务器。为此，取消选中 <strong>Configure using DHCP</strong>
 并输入服务器的网络配置。确保输入了主机名且已选中 <strong>Activate on boot</strong>
。 
</li>
</ul>
</li>
<li>配置防火墙
                    
<ul>
<li>出于本演示的需要，将不配置防火墙。选择 <strong>No firewall</strong>
（安全管理员，请不要生气）。 </li>
</ul>
</li>
<li>其他语言支持
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>选择时区
                    
<ul>
<li>选择适合您区域的时间设置。将系统时钟设置为 UTC 对服务器而言通常是一个很好的做法。为此，单击 <strong>System clock uses UTC</strong>
。 </li>
</ul>
</li>
<li>配置帐户
                    
<ul>
<li>为 root 用户选择一个口令，并将其输入所给的域中。为自己创建一个帐户。（不要在此时创建 oracle 帐户；我们将在稍后创建它。）</li>
</ul>
</li>
<li>选择程序包组
                    
<ul>
<li>选择 Gnome 或 KDE（或两者都选择）图形用户界面（默认为 Gnome）。注意：这两个 GUI 都非常受欢迎，其中 Gnome
在美国使用更普遍。我个人偏爱 KDE，这是因为它的终端模拟器可轻松实现剪切和粘贴，从而可将输入复制到多个连接（例如，当您在多个节点上配置
RAC 时，这将节省键入操作）。 </li>
</ul>
<ul>
<li>选择 <strong>Software Development</strong>
</li>
</ul>
</li>
<li>未解决的相关性
                    
<ul>
<li>如果看到此屏幕，只需选择 <strong>Install packages to satisfy dependencies</strong>
（默认值）并继续操作。</li>
</ul>
</li>
<li>配置图形界面 (X)
                    
<ul>
<li>接受默认值，除非安装程序无法识别您的视频卡。如果您的视频卡无法被识别，则将无法继续操作。 </li>
</ul>
</li>
<li>准备安装
                    
<ul>
<li>单击 <strong>Next</strong>
</li>
</ul>
</li>
<li>安装程序包
                    
<ul>
<li>软件将被复制到硬盘并被安装。根据提示更改磁盘，然后在安装完成时单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>创建启动磁盘
                    
<ul>
<li>如果需要，创建一张启动磁盘，或选择 <strong>Skip boot disk creation</strong>
。</li>
</ul>
</li>
<li>配置监视器
                    
<ul>
<li>如果安装程序正确识别了您的监视器，则接受默认值。否则，从列表中选择一个兼容的监视器。</li>
</ul>
</li>
<li>恭喜
                    
<ul class="bodycopy">
<li>从系统中取出安装介质，然后单击 <strong>Next</strong>
。</li>
</ul>
</li>
</ol>
<p><span class="bodycopy">系统自动重新启动，并显示一个图形登录屏幕。如果您是使用基本产品 CD 而非更新 CD 执行的安装，则在继续操作前必须通过 RHN 应用更新。</span>
</p>
<p><span class="boldbodycopy">验证您的安装</span>
 
</p>
<p>如果完成了以上步骤，您应该具备 Oracle 10<em>g</em>
 所需的所有程序包和更新。您可以执行以下步骤验证您的安装。 
</p>
<p>所需内核版本：2.4.9-e.25（或更高版本）
</p>
<p>通过运行以下命令检查内核版本： 
</p>
<pre><span style="color: #0000ff;">uname -r</span>


例如：
# <span style="color: #0000ff;">uname -r</span>

2.4.9-e.27smp
</pre>
<p>其他所需程序包的版本（或更高版本）： 
                  </p>
<ul class="bodycopy">
<li>gcc-2.96-124 
</li>
<li>make-3.79 
</li>
<li>binutils-2.11 
</li>
<li>openmotif-2.1.30-11 
</li>
<li>glibc-2.2.4-31</li>
</ul>
<p>要查看系统上安装了这些程序包的哪些版本，运行以下命令：</p>
<pre><span style="color: #0000ff;">rpm -q gcc make binutils openmotif glibc</span>


例如：  
# <span style="color: #0000ff;">rpm -q gcc make binutils openmotif glibc</span>

gcc-2.96-118.7.2
make-3.79.1-8
binutils-2.11.90.0.8-12
openmotif-2.1.30-11
glibc-2.2.4-32.8
</pre>
<p>如果系统上缺少任何程序包版本，或版本比以上指定的版本旧，则可以从 Red Hat Network 下载并安装更新。 
</p>
<p><a name="rhel3"></a>
<span class="parahead1">Red Hat Enterprise Linux 3</span>
 
</p>
<p>Oracle 10<em>g</em>
 经认证可以在不需要更新的情况下运行 Red Hat Enterprise Linux
3（Advanced Server 和 Enterprise Server）的基本版本。如果拥有更新 CD，则可以使用更新版本中的启动 CD
而非基本版本中的启动 CD 在安装过程中自动应用所有更新。Oracle 支持 Red Hat 的所有更新。 </p>
<ol class="bodycopy">
<li>使用第一张 CD 启动服务器。 
                    
<ul>
<li>您可能需要更改 BIOS 设置，以允许从 CD 启动。</li>
</ul>
</li>
<li>启动屏幕上出现时在底部显示 <tt>boot:</tt>
。 
                    
<ul>
<li>选择 <strong>Enter</strong>
，从控制台上执行图形安装。（对于其他安装方法和选项，请参阅 <a href="https://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/x8664-multi-install-guide/" class="bodylink"><em>Red Hat 安装指南</em>
</a>
。）</li>
</ul>
<ul>
<li>安装程序扫描硬件，短暂显示 Red Hat 闪屏，然后开始显示一系列屏幕提示。</li>
</ul>
</li>
<li>选择语言
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>配置键盘
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>欢迎屏幕
                    
<ul>
<li>单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>配置鼠标
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>安装类型
                    
<ul>
<li>选择 <strong>Custom</strong>
。</li>
</ul>
</li>
<li>设置磁盘分区
                    
<ul>
<li>本文不介绍磁盘分区的详细方法，而是假设您熟悉磁盘分区方法。
<p>（警告：对磁盘进行错误分区是<strong>删除硬盘上所有内容</strong>
的最可靠、最快捷的方法之一。如果不确定如何分区，请先停下来，找人帮帮您，否则您将冒丢失数据的危险！） 
</p>
<p>本文使用以下分区方案（文件系统均为 ext3）：<br />
<br />
第一个控制器 (/dev/sda) 上的 9GB 磁盘包含以下分区，用于存放所有 Linux 和 Oracle 软件：<br />
- 100MB /boot 分区<br />
-1,500MB 交换分区 &mdash; 将此分区大小至少设置为系统 RAM 的两倍，但不要超过 2GB（32 位系统不支持大于 2GB 的交换文件）。如果需要大于 2GB 的交换空间，则创建多个交换分区。<br />
-7,150MB 根分区 &mdash; 该分区将用于所有目录，包括 /usr、/tmp、/var、/opt、/home 等。这样做纯粹是为了讲解本指南而简化安装。更可靠的分区方案是将这些目录划分到单独的文件系统。 </p>
</li>
</ul>
</li>
<li>配置启动加载程序
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>配置网络
                    
<ul>
<li>通常情况下，最好使用静态 IP 地址配置数据库服务器。为此，单击 <strong>Edit</strong>
。</li>
</ul>
<ul>
<li>出现一个弹出窗口。取消选中 <strong>Configure using DHCP</strong>
 复选框，并输入服务器的 IP 地址和网络掩码。确保选中 <strong>Activate on boot</strong>
，然后单击 <strong>OK</strong>
。 </li>
</ul>
<ul>
<li>在 Hostname 框中，选择 <strong>manually</strong>
 并输入主机名。 </li>
</ul>
<ul>
<li>在 Miscellaneous Settings 框中，输入其他网络设置。</li>
</ul>
</li>
<li>配置防火墙
                    
<ul>
<li>出于本演示的需要，将不配置防火墙。选择 <strong>No firewall</strong>
。 </li>
</ul>
</li>
<li>其他语言支持
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>选择时区
                    
<ul>
<li>选择适合您区域的时间设置。将系统时钟设置为 UTC 对服务器而言通常是一个很好的做法。为此，单击 <strong>System clock uses UTC</strong>
。 </li>
</ul>
</li>
<li>设置 Root 口令
                    
<ul>
<li>输入 root 的口令，并再次输入以进行确认。</li>
</ul>
</li>
<li>选择程序包组
                    
<ul>
<li>只选择此处显示的程序包集，其他选项不要选。</li>
</ul>
<ul>
<li>桌面<br />
- X Window 系统<br />
- Gnome<br />
- KDE<br />
- 请参阅我在 RHES 2.1 部分中提供的有关 GUI 选择的意见。</li>
</ul>
<ul>
<li>应用程序<br />
- 编辑器<br />
- 图形因特网</li>
</ul>
<ul>
<li>服务器<br />
- 不要选择该组中的任何选项。</li>
</ul>
<ul>
<li>开发<br />
- 开发工具</li>
</ul>
<ul>
<li>系统<br />
- 管理工具</li>
</ul>
<ul>
<li>Red Hat Enterprise Linux<br />
- 不要选择该组中的任何选项。</li>
</ul>
<ul>
<li>杂项<br />
- 原有软件开发
</li>
<li>单击 <strong>Next</strong>
 继续操作。</li>
</ul>
</li>
<li>准备安装
                    
<ul>
<li>单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>安装程序包
                    
<ul>
<li>软件将被复制到硬盘并被安装。根据提示更改磁盘，然后在安装完成时单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>配置图形界面 (X)
                    
<ul>
<li>接受默认值，除非安装程序无法识别您的视频卡。如果您的视频卡无法被识别，则将无法继续操作。</li>
</ul>
</li>
<li>配置监视器
                    
<ul>
<li>如果安装程序正确识别了您的监视器，则接受默认值。否则，从列表中选择一个兼容的监视器。</li>
</ul>
</li>
<li>定制图形配置
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>恭喜
                    
<ul>
<li>从系统中取出安装介质，然后单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>系统自动重新启动并显示一个新的欢迎屏幕。 
                    
<ul>
<li>单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>许可协议
                    
<ul>
<li>阅读许可协议。如果同意其中的条款，则选择 <strong>Yes, I agree to the License Agreement</strong>
 并单击 <strong>Next</strong>
。 </li>
</ul>
</li>
<li>日期和时间
                    
<ul>
<li>设置日期和时间。</li>
</ul>
<ul>
<li>如果要使用 NTP 服务器（推荐），则选择 <strong>Enable Network Time Protocol</strong>
 并输入 NTP 服务器的名称。 </li>
</ul>
</li>
<li>用户帐户
                    
<ul>
<li>为自己创建一个帐户。</li>
</ul>
<ul>
<li>此时不要为 oracle 创建帐户。本部分稍后将介绍如何创建 oracle 帐户。</li>
</ul>
</li>
<li>Red Hat Network
                    
<ul>
<li>如果要立即使用或激活 Red Hat Network 帐户，则接受默认值，单击 <strong>Next</strong>
 并遵循 Red Hat 产品附带的产品激活说明。</li>
</ul>
</li>
<li>其他 CD
                    
<ul>
<li>单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>完成设置
                    
<ul>
<li>单击 <strong>Next</strong>
。</li>
</ul>
</li>
<li>出现一个图形登录屏幕。 
</li>
<li>恭喜！您的 Linux 软件现已安装完毕。</li>
</ol>
<p><span class="boldbodycopy">验证您的安装</span>
</p>
<p>如果完成了以上步骤，您应该具备 Oracle 10<em>g</em>
 所需的所有程序包和更新。您可以执行以下步骤验证您的安装。 
</p>
<p>所需内核版本：2.4.21-4.EL（这是 RHEL 3 的基本版本附带的内核版本。此内核或更新中提供的任何版本的内核均适用于 Oracle 10<em>g</em>
。） 
</p>
<p>通过运行以下命令检查内核版本： 
</p>
<pre><span style="color: #0000ff;">uname -r</span>


例如：
# <span style="color: #0000ff;">uname -r</span>

2.4.21-4.0.1.ELsmp
</pre>
<p>其他所需程序包的版本（或更高版本）： 
                  </p>
<ul class="bodycopy">
<li>gcc-3.2.3-2
</li>
<li>make-3.79 
</li>
<li>binutils-2.11 
</li>
<li>openmotif-2.2.2-16 
</li>
<li>setarch-1.3-1 
</li>
<li>compat-gcc-7.3-2.96.122 
</li>
<li>compat-gcc-c++-7.3-2.96.122 
</li>
<li>compat-libstdc++-7.3-2.96.122 
</li>
<li>compat-libstdc++-devel-7.3-2.96.122 
</li>
<li>compat-db-4.0.14.5（<a href="http://download-west.oracle.com/docs/html/B10811_01/toc.htm" class="bodylink" target="_blank"><em>Oracle 10g 数据库安装指南</em>
</a>
 中将其列为是必需的，但此处并不需要）</li>
</ul>
<p>要查看系统上安装了这些程序包的哪些版本，以 root 用户身份运行以下命令：</p>
<pre><span style="color: #0000ff;">rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \
compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel</span>


例如：
# <span style="color: #0000ff;">rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \</span>

&gt;      <span style="color: #0000ff;">openmotif compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel</span>

gcc-3.2.3-20
make-3.79.1-17
binutils-2.14.90.0.4-26
openmotif-2.2.2-16
setarch-1.3-1
package compat-db is not installed
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
</pre>
<p>请注意，尚未安装 compat-db
程序包。安装过程中可用的任何程序包组均不包含此程序包，因此必须在单独的步骤中安装。如果系统上缺少任何其他程序包版本，或版本比以上指定的版本旧
（compat-db 除外），则可以从 Red Hat Network 下载并安装更新。 </p>
<p><span class="boldbodycopy">安装 compat-db</span>
 
</p>
<p>插入原始 Red Hat Enterprise Linux 介质的第二张 CD。（Update 2 中未包含该程序包，它仅存在于原始介质中。） 
</p>
<p>此 CD 自动挂载。 
</p>
<p>以 root 用户身份运行以下命令：</p>
<pre><span style="color: #0000ff;">rpm -ivh /mnt/cdrom/RedHat/RPMS/compat-db-4.0.14-5.i386.rpm</span>


例如：
# <span style="color: #0000ff;">rpm -ivh /mnt/cdrom/RedHat/RPMS/compat-db-4.0.14-5.i386.rpm</span>

Preparing...         ########################################### [100%]
1:compat-db       ########################################### [100%]
</pre>
<p>&nbsp;</p>
<p><a name="sles"></a>
<span class="parahead1">SUSE Linux Enterprise Server 8</span>
 
</p>
<p>Oracle 10<em>g</em>
 经认证可以在 Novell SUSE Linux Enterprise Server
(SLES) 8 上运行。Novell 通过 CD 或通过其支持门户在线提供 Service Pack 和程序包更新。在本指南中，我们将从
CD 安装 SLES 8 (Service Pack 3)。 </p>
<ol class="bodycopy">
<li>使用 SLES 8 CD 启动服务器。 
                    
<ul>
<li>您可能需要更改 BIOS 设置，以允许从 CD 启动。</li>
</ul>
</li>
<li>出现 SUSE Linux Enterprise Server 安装屏幕。 
                    
<ul>
<li>选择 <strong>Installation</strong>
。</li>
</ul>
<ul>
<li>安装程序扫描您的硬件并显示 YaST 界面。</li>
</ul>
</li>
<li>选择语言
                    
<ul>
<li>接受许可协议。</li>
</ul>
<ul>
<li>接受默认值 <strong>English (US)</strong>
。 
                      </li>
</ul>
</li>
<li>安装设置
                    
<ul>
<li>选择 <strong>New Installation</strong>
。</li>
</ul>
</li>
<li>分区
                    
<ul>
<li>本文不介绍磁盘分区的详细方法，而是假设您熟悉磁盘分区方法。
<p>（警告：对磁盘进行错误分区是<strong>删除硬盘上所有内容</strong>
的最可靠、最快捷的方法之一。如果不确定如何分区，请先停下来，找人帮帮您，否则您将冒丢失数据的危险！） 
</p>
<p>本文使用以下分区方案（文件系统均为 ext3）：<br />
<br />
第一个控制器 (/dev/sda) 上的 9GB 磁盘包含以下分区，用于存放所有 Linux 和 Oracle 软件：<br />
- 100MB /boot 分区<br />
-1,500MB 交换分区 &mdash; 将此分区大小至少设置为系统 RAM 的两倍，但不要超过 2GB（32 位系统不支持大于 2GB 的交换文件）。如果需要大于 2GB 的交换空间，则创建多个交换分区。<br />
-7,150MB 根分区 &mdash; 该分区将用于所有目录，包括 /usr、/tmp、/var、/opt、/home 等。这样做纯粹是为了讲解本指南而简化安装。更可靠的分区方案是将这些目录划分到单独的文件系统。 </p>
</li>
</ul>
</li>
<li>软件
                    
<ul>
<li>单击 <strong>Software</strong>
 的链接。</li>
</ul>
<ul>
<li>出现 Software Selection 屏幕。</li>
</ul>
<ul>
<li>单击 <strong>Detailed Selection</strong>
。</li>
</ul>
<ul>
<li>左侧窗口显示软件选择列表。单击每个选项旁的复选框以将其选中/取消选中。 </li>
</ul>
<ul>
<li>选择以下软件（这是推荐的软件集；不要选中其他软件）：<br />
- C/C++ 编译器和工具<br />
- KDE（或 Gnome）<br />
- LSB 运行时环境<br />
- 帮助与支持文档<br />
- 图形基本系统<br />
- YaST2 配置模块<br />
- SLES 管理工具</li>
</ul>
<ul>
<li>建议不要安装以下项，因为它们可能与提供相同服务的 Oracle 产品冲突：<br />
- 简单 Web 服务器<br />
- 身份验证服务器（NIS、LDAP、Kerberos）</li>
</ul>
</li>
<li>时区
                    
<ul>
<li>设置您的时区。</li>
</ul>
</li>
<li>单击 <strong>Accept</strong>
。 
</li>
<li>出现一个警告对话框。准备好继续操作时，单击 <strong>Yes, install</strong>
。 
</li>
<li>根据安装程序的提示更换 CD。 
</li>
<li>安装此软件后，将显示一个窗口，提示基本系统已经安装成功。 
                    
<ul>
<li>取出安装 CD，然后单击 <strong>OK</strong>
。 </li>
</ul>
</li>
<li>系统重新启动。 
</li>
<li>输入 root 用户的口令，并再次输入以进行确认。 
</li>
<li>为自己创建一个帐户。不要在此时创建 oracle 帐户；我们将在稍后创建它。 
</li>
<li>桌面设置
                    
<ul>
<li>接受默认值。</li>
</ul>
</li>
<li>出现一个有关自动检测本地打印机的警告窗口。 
                    
<ul>
<li>单击 <strong>Skip detection</strong>
。</li>
</ul>
</li>
<li>配置网络接口，并在准备好继续操作后单击 <strong>Next</strong>
。 
                    
<ul>
<li>建议为服务器设置静态 IP 地址。</li>
</ul>
<ul>
<li>构建数据库无需配置打印机、调制解调器、ISDN 适配器或声卡。</li>
</ul>
</li>
<li>出现一个图形登录屏幕。 
</li>
<li>现在，您需要安装 Service Pack 3。以您自己的身份登录。 
</li>
<li>插入更新 CD，然后单击 <strong>Patch CD Update</strong>
。 
</li>
<li>启动 YaST2（SUSE 的系统管理工具）。 
                    
<ul>
<li>选择 SUSE &gt; System &gt; YaST2。（SUSE 是位于屏幕左下部带微笑蜥蜴侧脸的绿色圆按钮。它相当于&ldquo;开始&rdquo;。）</li>
</ul>
<ul>
<li>出现一个窗口，提示输入 root 用户口令。输入口令，然后单击 <strong>OK</strong>
。</li>
</ul>
<ul>
<li>出现 YaST Control Center。</li>
</ul>
</li>
<li>出现 YaST Online Up