<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>微笑的小熊</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/" />
    <link rel="self" type="application/atom+xml" href="http://blog.xmulib.org/ringtail/atom.xml" />
    <id>tag:blog.xmulib.org,2007-12-19:/ringtail//7</id>
    <updated>2008-11-04T02:55:48Z</updated>
    <subtitle>面朝大海，春暖花开</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.01</generator>

<entry>
    <title>欺负</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/11/post-36.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.3026</id>

    <published>2008-11-04T02:52:30Z</published>
    <updated>2008-11-04T02:55:48Z</updated>

    <summary>小熊 说: 我前几天还想着如果你在北京就好了，以后点点欺负我，我还可以跑去和你哭诉，哈哈 毛毛虫 说: 哈哈，点点会欺负你么？你不欺负点点，点点就该偷乐了 小熊 说: 。。。哪有，我一向是弱势群体，好不好 毛毛虫 说: 我突然想到点点找人哭诉的样子，哈哈 小熊 说: 。。。 毛毛虫 说: 哈哈，你又在装弱势群体了...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="阿毛" label="阿毛" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        小熊 说:
我前几天还想着如果你在北京就好了，以后点点欺负我，我还可以跑去和你哭诉，哈哈

毛毛虫 说:
哈哈，点点会欺负你么？你不欺负点点，点点就该偷乐了

小熊 说:
。。。哪有，我一向是弱势群体，好不好

毛毛虫 说:
我突然想到点点找人哭诉的样子，哈哈

小熊 说:
。。。

毛毛虫 说:
哈哈，你又在装弱势群体了
        
    </content>
</entry>

<entry>
    <title>字符串匹配算法学习一</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/11/post-35.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.3020</id>

    <published>2008-11-03T02:45:16Z</published>
    <updated>2008-11-03T05:28:45Z</updated>

    <summary>    1. 字符串匹配算法简介     参见《 字符串匹配算法研究 》 http://www.yuanma.org/data/2008/0806/article_3128.htm 摘要：随着互联网的日渐庞大，信息也是越来越多，如何在海量的信息中快速查找自己所要的信息是网络搜索研究的热点所在，在这其中，字符串匹配算法起着非常重要的作用，一个高效的字符串匹配算法，可以极大的提高搜索的效率和质量，本文...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[    1. 字符串匹配算法简介
    参见《 字符串匹配算法研究 》 <a href="http://www.yuanma.org/data/2008/0806/article_3128.htm">http://www.yuanma.org/data/2008/0806/article_3128.htm</a>
摘要：随着互联网的日渐庞大，信息也是越来越多，如何在海量的信息中快速查找自己所要的信息是网络搜索研究的热点所在，在这其中，字符串匹配算法起着非常重要的作用，一个高效的字符串匹配算法，可以极大的提高搜索的效率和质量，本文力图阐明字符串匹配算法的发展过程，并介绍了各个算法的特点，并给予了适当的比较和分析。

   2. Horspool算法
   算法详细解释参考《算法设计与分析基础》第二版195页
   这个算法的关键之处是对模式进行预处理，计算模式中每个字符到模式字符串尾的距离。
   PHP代码实现如下：
<pre name="code" class="php" rows="" cols="">
$string = 'afeovfpop';
$pattern = 'vfp';
function shiftTable($pattern){
	$length = strlen($pattern);
	$table = array();
	for($j=0;$j<$length;$j++){
		$key = $pattern[$j];
		$table[$key] = $length-1-$j;
		if($j>$length-2){
			$table[$key] = $length;
		}
	}
	return $table;
}

function Horspool($string, $pattern){
	$table = shiftTable($pattern);
//	print_r($table);
	$m = strlen($pattern);
	$i = $m - 1;
	$n = strlen($string);
	while($i<=$n-1){
		$k=0;
		while(($k<=$m-1)&&($pattern[$m-1-$k]==$string[$i-$k])){
			$k = $k+1;
		}
		if($k==$m){
			return $i-$m+1;
		}else{
			$key = $pattern[$k];
			$i=$i+$table[$key];
		}
		
	}
	return 0;
}
echo Horspool($string,$pattern);
echo strpos($string,$pattern);
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>phpDocumentor学习笔记</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/09/phpdocumentor.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.2898</id>

    <published>2008-09-12T03:11:48Z</published>
    <updated>2008-09-12T03:13:35Z</updated>

    <summary>前言：使用phpDocumentor的好处：你喜歡寫文件嗎？我不喜歡。尤其是在趕工的時候，哪來的美國時間寫文件；就算有時間也是希望趕快把事情做完閃人，怎樣都輪不到寫文件的時候。文件需要嗎？雖然不喜歡寫文件，但文件真的是必要的。對自己而言，正當在趕案子兵荒馬亂的時候，突然要某個以前寫過的函式結果不知道放哪去了，這時心情會很糟很糟的去把以前的碼挖出來一份一份看，才能找出所要的函式，這樣更浪費時間。對於...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[前言：<br />使用phpDocumentor的好处：<br />你喜歡寫文件嗎？我不喜歡。尤其是在趕工的時候，哪來的美國時間寫文件；就算有時間也是希望趕快把事情做完閃人，怎樣都輪不到寫文件的時候。<br /><br />文件需要嗎？雖然不喜歡寫文件，但文件真的是必要的。對自己而言，正當在趕案子兵荒馬亂的時候，突然要某個以前寫過的函式結果不知道放哪去了，這時心情會很糟很糟的去把以前的碼挖出來一份一份看，才能找出所要的函式，這樣更浪費時間。對於他人而言，要是每個人寫出來的東西都可以再讓其它人了解，並且進一步使用其它人早已寫好的元件，可以讓我們再省下時間來多喝幾杯咖啡。<br /><br />那要怎麼樣讓編寫文件輕鬆又自在？ phpDocumentor 就是一個現成好用的工具，只要在寫程式時順手寫上一點點的註解，困難一點的可以再加上一點點的範例。寫完後交給 phpDocumentor 編譯，一下子圖文並茂的程式文件自動就產生了。而且它還不只可以產生 HTML 檔，還可以產生出 PDF, CHM 等文件。就算產生 HTML 檔，還有許多的風格可以選擇。這樣好用的工具放著不用，實在太可惜了。<br /><br />這份資料裡，只會出現馬上能用的資料，除了這個簡介外，不會廢話太多，所以文件中的文句也冰冷了些。會這樣做的目的是希望文件的每一個部份都能讓讀者快速吸收，任何一個例子複製下來後馬上能用。文件中的每個樣版我都是精心設計過，起碼我以後要用的時候不必再想說要寫一個類別正常需要哪些 Tag ，只要把樣版複製下來以後就直接可以用了。<br /><br />由於此文件中資料只有使用上最需要的部份（也是一定能用的部份），因此若在使用上想要了解更多，可以到 <a href="http://www.phpdoc.org/">phpDocumentor 的官方網站 (http://www.phpdoc.org/)</a>上找到所需資料。<br />——————摘自 <a href="http://pkwbim-programming-note.blogspot.com/2008/01/phpdocumentor-0.html#0.4">《phpDocumentor筆記 0 立即體驗》</a><br /><a href="http://pkwbim-programming-note.blogspot.com/2008/01/phpdocumentor-0.html#0.4">http://pkwbim-programming-note.blogspot.com/2008/01/phpdocumentor-0.html#0.4</a><br /><br />其实这篇文章已经写的比较简要，但是为了防止哪天这个网站被盾了，我还是抄到自己的blog比较安全。<br />简而言之，phpDocumentor就适合我这样写过代码就忘了的人，规范的书写注释还能生成文档，多省事。<br /><br />1.安装<br />1.1如果没有安装过pear，可以先运行PHP目录下的go-pear.bat安装。<br />1.2安装过pear之后，使用下面的命令安装phpDocumentor：<br />\php5\PEAR\pear install -o PhpDocumentor <br /><br />2.字符编码的问题<br />看到很多人都说需要改字符编码，但是我下载的phpDocumentor v1.4.2 没有遇到这个问题，也没有<br />查找到"iso-8859-1"这个字符串。<br /><br />3.生成文件<br />步驟<br /><br />&nbsp;&nbsp; 3.1 将範例碼存成 example.php 置於 \project\php_project\下。<br />&nbsp;&nbsp; 3.2 在命令列下用以下指令<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phpdoc --parseprivate -o HTML:frames:earthli -f \project\php_project\example.php -t \project\php_project\docs<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phpdoc --parseprivate -o HTML:Smarty:PHP -d \project\php_project\ -t \project\php_project\docs<br /><br />&nbsp;&nbsp; 3.3 解說<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * --parseprivate： 是將私有 (private) 成員函式或私有變數等等也都加入程式文件裡。沒有這參數的話，產生出的文件裡只會有公開的 (public) 和受保護的 (protected) 的成員函式和變數。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * -f ： 是指針對某個檔案產生註解文件。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * -d ： 針對某個目錄（含其子目錄）產生註解文件。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * -t ： 指定要輸出的目錄<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * -o ： 指定輸出格式，上例的格式有兩種<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o HTML:frames:earthli ： 是輸出有一種帶有框架 (frame) 的說明文件，所產生出來的文件非常漂亮。Zend Framework 的 API 文件就是採用這種風格。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o HTML:Smarty:PHP ： 產生的文件看起來就像是 PHP 網站上或是 phpDocumentor 官網上的的一樣。<br /><br />待程式結束後，瀏覽剛剛指定產生文件的目錄下，會有一個 index.html 檔，以瀏覽器打開它就可以看到 phpDocumentor 產生出來的程式文件。倘若在產生文件的過程中，有任何的錯誤，這些錯誤會出現在 error.html檔裡。<br /><br />4.范例<br />&lt;?php<br />/**<br />* phpDocumentor 使用示範<br />* 這個檔案是一個簡單的示範<br />* 內容涵蓋了許多常用的註解方式。<br />* 有任何的問題請和作者連絡<br />* @package phpDocumentorExample<br />* @author 多采多姿 &lt;pkwbim.programming@gmail.com&gt;<br />* @version 0.1b<br />*/<br /><br />/**<br />* 這是 lib.inc.php 的標題<br />* 這是 lib.inc.php 的描述<br />*/<br />include_once('lib.inc.php');<br /><br />/**<br />* 圓周率<br />* 圓周和直徑的比值<br />*/<br />define('pi', 3.14159);<br /><br />/**<br />*&nbsp; 這是 funtion1 的註解區塊標題<br />*&nbsp; 這是 funtion1 的描述<br />*&nbsp; @global int 這是函式內第一個全域變數的註解，就是 $global1 的註解<br />*&nbsp; @global string 這是函式內第二個全域變數的註解，就是 $global2 的註解<br />*&nbsp; @param bool $arg1 這是函式參數 $arg1 的註解<br />*&nbsp; @param int|string $arg2 這裡是函式參數 $arg2 的註解<br />*&nbsp; @return mixed 傳回值的註解<br />*/<br />function function1($arg1, $arg2) {<br />&nbsp;&nbsp;&nbsp; global $global1, $global2;<br />&nbsp;&nbsp;&nbsp; return array($arg1, $arg2);<br />}<br /><br />/**<br />* 這是MyClass的標題<br />*<br />* 建立簡寫型的清單<br />* 這裡建立一份無序清單<br />* - 項目一<br />* - 項目二，<br />*&nbsp;&nbsp; 每個項目可以是多行，<br />*&nbsp;&nbsp; 就像這個項目，<br />*&nbsp;&nbsp; 這行還在項目二中<br />* - 項目三<br />* 清單結束，因為沒縮排<br />* 這裡建立一份有序清單<br />* 1 有序的項目一，數字後一定要加一個空白。<br />* 2 有序的項目二<br />* 有序清單的另一種寫法<br />* 1. ordered item 1<br />* 2. ordered item 2<br />* 清單在此結束<br />*<br />* @package phpDocumentorExample<br />* @author 多采多姿 <br />* @since 1.0rc1<br />* @version 0.2b<br />*<br />*/<br />class MyClass {<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * 這裡是成員變數的註解<br />&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp; * @var string 成員變數的註解<br />&nbsp;&nbsp;&nbsp;&nbsp; * @access private<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private $_variable = "Hello"; <br /><br />&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; * 這是一個公開的成員函式<br />&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp; * @param bool $var1 參數1<br />&nbsp;&nbsp;&nbsp; * @param string|array $var2 參數1<br />&nbsp;&nbsp;&nbsp; * @return void<br />&nbsp;&nbsp;&nbsp; * @access public<br />&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public function set_vars($var1, $var2) {<br />&nbsp;&nbsp;&nbsp; }<br />}<br />?&gt;<br /><br />要注意所有的注释都是有两个星号的C-style注释，如下所示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />语法参考文档： <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.quickstart.pkg.html#coding">http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.quickstart.pkg.html#coding</a>]]>
        
    </content>
</entry>

<entry>
    <title>字符串编码转换小结2</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/05/2-1.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1824</id>

    <published>2008-05-07T03:16:55Z</published>
    <updated>2008-05-07T03:32:42Z</updated>

    <summary><![CDATA[&nbsp;今天早上，网页忽然正常显示了，原来是修改了注册表的原因。&nbsp;在数据库迁移后(sql server :gbk2312 到 Oracle : UTF8)，可能出现页面字符乱码的原因：1.oracle字符集设置不正确。数据库服务器字符集select * from nls_database_parameters，其来源于props$，是表示数据库的字符集。客户端字符集环境select ...]]></summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="other" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="字符编码" label="字符编码" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[&nbsp;今天早上，网页忽然正常显示了，原来是修改了注册表的原因。<br />&nbsp;在数据库迁移后(sql server :gbk2312 到 Oracle : UTF8)，可能出现页面字符乱码的原因：<br /><br />1.oracle字符集设置不正确。<br /><br /><pre>数据库服务器字符集select * from nls_database_parameters，其来源于props$，是表示数据库的字符集。<br />客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter，表示客户端的字符集的设置。<br />可能是参数文件，环境变量或者是注册表会话字符集环境select * from nls_session_parameters，<br />其来源于v$nls_parameters，表示会话自己的设置，可能是会话的环境变量或者是alter session完成，<br />如果会话没有特殊的设置，将与nls_instance_parameters一致。<br /><br />客户端的字符集要求与服务器一致，才能正确显示数据库的非Ascii字符。如果多个设置存在的时候，<br />alter session&gt;环境变量&gt;注册表&gt;参数文件字符集要求一致，但是语言设置却可以不同，语言设置建议用英文。<br />如字符集是zhs16gbk，则nls_lang可以是American_America.zhs16gbk；如果字符集是utf8，则要改成<br />SIMPLIFIED CHINESE_CHINA.AL32UTF8。<br />(即hkey_local_machine =&gt; software =&gt; oracle =&gt;NLS_LANG改为SIMPLIFIED CHINESE_CHINA.AL32UTF8)<br /></pre><br /><br />2.迁移过程中字符编码转换不正确，如何转换编码可参照总结1。<br />在php中，可以使用mb_string 的mb_detect_encoding来检测字符串是什么编码。<br /><br />3.脚本代码要另存为utf8格式。<br /><br />4.页面的header 要设置为utf8。<br /><br />&nbsp;<br />]]>
        
    </content>
</entry>

<entry>
    <title>介绍一个自动完成的js类库autocomplete</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/05/jsautocomplete.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1815</id>

    <published>2008-05-05T08:36:57Z</published>
    <updated>2008-05-05T08:53:36Z</updated>

    <summary>autocomplete</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="other" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="autocomplete" label="autocomplete" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[下载地址：http://createwebapp.com/
<br /><script>
	new Autocomplete("consumerName", function() {
		
		return "consumers.php?q=" + this.value;
	}); </script>文档地址：http://createwebapp.com/autocomplete
文档非常详细。<br />&nbsp;需要注意的一点是

<br />&lt;script&gt;<br />&nbsp;&nbsp;&nbsp; new Autocomplete("consumerName", function() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "consumers.php?q=" + this.value;<br />&nbsp;&nbsp;&nbsp; });<br />&lt;/script&gt;<br />这段js要写在<br /><br />
<form contenteditable="false">
	<input name="consumerID" id="consumerID" type="hidden" /> &lt;form&gt;<br />&nbsp;&nbsp; &nbsp;&lt;input type="hidden" name="consumerID" id="consumerID"/&gt;<br />&nbsp;&nbsp; &nbsp;&lt;input type="text" name="consumerName"/&gt;<br />&lt;/form&gt;<br /><br />
</form>
之后。<br />截图如下：

<span class="mt-enclosure mt-enclosure-image"><img alt="autocomplete.jpg" src="http://blog.xmulib.org/ringtail/uploads/image/autocomplete.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="322" width="255" /></span>
]]>
        
    </content>
</entry>

<entry>
    <title>字符串编码转换小结1</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/05/1.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1810</id>

    <published>2008-05-05T02:44:07Z</published>
    <updated>2008-05-05T03:12:01Z</updated>

    <summary>java中的字符串编码转换</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="字符编码" label="字符编码" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[&nbsp;基础：<h3><a href="http://www.eygle.com/digest/2007/01/zhs16gbk_char.html">中文编码基础知识介绍</a>(理论基础)</h3><h3><a href="http://www.ibm.com/developerworks/cn/java/java_chinese/">Java 编程技术中汉字问题的分析及解决</a></h3><h3><a href="http://www.javazy.com/contentex/200576161453.shtml">String.getBytes()方法中的中文编码问题</a> （这篇最为简单易懂且结合实际）</h3><h3><a href="http://www.bcexe.com/show.asp?newsid=15768">Unicode和UTF-8之间的转换详解</a></h3><h3>附录：</h3><h3><a href="http://tieba.baidu.com/f?kz=67059623"><font color="#0000cc">unicode编码表</font></a></h3><h3><font color="#ff0000"><b><a href="http://219.136.187.225/SchoolWeb/hzdwzx/xxzy/xxzy-kj/xxzy-xx/xxzy-xx1/xxzy-xx1-1/HAIZI/GBK2.htm" name="GBK">GBK  
      汉字内码扩展规范</a>编码表(二)</b></font></h3>代码示例：<br /><br />public String changeCharset(String str)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws UnsupportedEncodingException {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (str != null) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; //得到gbk编码的字节串<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;byte[] bs = str.getBytes("GBK");<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("gbk:");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("hex format is:"+encodeHex(bs)); <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; //得到utf8编码的字节串&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;byte[] ns = str.getBytes("UTF-8");<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; System.out.println("utf8:");&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("hex format is:"+encodeHex(ns)); <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("Bin format is:"+encodeBin(ns)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;  //将编码为utf8的字节串再生成新的字符串，然后解码，看看转换过程中是否出错<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String newutf=new String(ns,"UTF-8");<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("convert back from utf8:"+encodeHex(newutf.getBytes("UTF-8")));<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return newutf;<br />}<br /><br />public static final String encodeHex (byte[] bytes)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer buff = <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new StringBuffer(bytes.length * 2); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String b; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;bytes.length ; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = Integer.toHexString(bytes[i]);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // byte是两个字节的， 而上面的Integer.toHexString会把字节扩展为4个字节 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buff.append(b.length() &gt; 2 ? b.substring(6,8) : b);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buff.append(" "); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return buff.toString(); <br />&nbsp;&nbsp;&nbsp; } <br />public static final String encodeBin (byte[] bytes)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer buff = <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new StringBuffer(bytes.length * 2); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String b; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;bytes.length ; i++) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = Integer.toBinaryString(bytes[i]);&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // byte是两个字节的， 而上面的Integer.toHexString会把字节扩展为4个字节 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buff.append(b.substring(24,b.length()));&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buff.append(" "); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return buff.toString(); <br />&nbsp;&nbsp;&nbsp; } <br /><br />在Java中，String.getBytes("GBK")获得的是gbk编码的字节串，打印出来之后得到的是对应编码的十进制值，转换成16进制后就和编码表中的值一样了。<br />最后可以根据输出的二进制编码，和unicode表对比。<br /><br />示例：<br />str: 中国<br />gbk:<br />hex format is:d6 d0 b9 fa <br />utf8: <br />hex format is:e4 b8 ad e5 9b bd <br />Bin format is:11100100 10111000 10101101 11100101 10011011 10111101 <br />convert back from utf8:e4 b8 ad e5 9b bd <br />其中，“中”的unicode编码是4e2d，二进制表示为0100 1110 0010 1101，从低位到高位按六位截取及补齐高位后就可以得到11100100 10111000 1010110 ，即为utf8编码。<br /><br /><a href="http://tieba.baidu.com/f?kz=67059623"></a><br />]]>
        
    </content>
</entry>

<entry>
    <title>深居简出的生活</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/03/post-34.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1588</id>

    <published>2008-03-24T02:24:34Z</published>
    <updated>2008-03-24T02:29:09Z</updated>

    <summary>深居简出的生活</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="生活随笔" label="生活随笔" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[&nbsp;yiding：昨天中午吃的那家味道不错，不过有点贵，而且只适合两个人同吃，因为分量较小<br />&nbsp;bear：在哪里啊？<br />&nbsp;yiding：在禾祥西，快到小肥羊的地方<br />&nbsp;bear：嗯。。。太远。。-_-<br /><br />&nbsp;bear:你的香水很好闻耶，哪买的？<br />&nbsp;nancy: 中山路。。<br />&nbsp;bear:哇，好远。。<br /><br />&nbsp;虫：来我家吃饭啊<br />&nbsp;bear: 湖里太远。。<br /><br />&nbsp;小猫:饿了，我要猫粮。。<br />&nbsp;bear:乖，新华都猫粮卖完了，你自己坐车去城达吃好不好<br /><br /><br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>随感</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/02/post-33.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1185</id>

    <published>2008-02-27T09:19:59Z</published>
    <updated>2008-02-27T09:26:33Z</updated>

    <summary>随便说说，贵在坚持。</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="随感" label="随感" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[看了某个朋友的blog，立刻很羞愧，觉得自己正是他所说的浮躁的那种人。<br />最近在想，为什么都没做出点什么东西来，我想主要是缺乏钻研的精神吧。<br />一直以来，就像蜻蜓点水一样，什么都学一点，但是什么都不明白，要问原理，就说不出一二。埋在自己的小圈子里久了，都看不到世界变成什么样子了。最近有个学习的机会，但愿可以抓住，然后静静的学习。<br />有点恒心，有点毅力，想想自己究竟想做什么样的人。<br />]]>
        
    </content>
</entry>

<entry>
    <title>2007回顾</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2008/01/2007.html" />
    <id>tag:blog.xmulib.org,2008:/ringtail//7.1122</id>

    <published>2008-01-02T01:04:24Z</published>
    <updated>2008-01-02T02:55:35Z</updated>

    <summary>2007 retrospective</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="2007" label="2007" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="生活" label="生活" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="job" label="job" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[1月：写网页连通测试，学习Java多线程，遗憾的是学习的不够透彻，现在如果不再把书翻出来看看的话，估计想不起来怎么做了。<br /><br />2月：回家
<br /><br />3月：修改汇文系统，不过汇文在6月份的时候又推出了新版，所以我们改的基本上都作废了。<br /><br />4月：写tag应用，还好这个还继续用的上，虽然也花了一点时间把它加在汇文新版上。借此机会，学习了一下ajax。值得一提的是，Lib2.0会议在厦门召开，乘机见了不少大牛、帅哥和美女，也有了很多启发。<br /><br />5月：继续改汇文部分应用，略微了解了一点smarty的应用。并且开始了解OPAC。
<br /><br />6月：开始考虑Mylibrary。好像我们翻译的书这个月出版了，小小自夸一下，虽然其实我也没有从中学到什么东西，而且稿费还上交了。（继续想念我的稿费，我连是多少都忘了。。-_-）
<br /><br />7月：放假，翻译某本书，不过后来没出版。
<br /><br />8月：去桂林参加数字图书馆2007研讨班。记了一些笔记，想了一些应用。<br /><br />&nbsp;9月：开始奔波，那个啥啥啥也是要见公婆的。。。<br /><br />10月：好心痛机票钱，国庆回家真贵。<br />&nbsp;<br />11月：继续写Mylibrary，还有opac部分改写。。因为我们系统升级了。。-_-
<br /><br />12月：继续写Mylibrary，继续学习ZendFramework。有几天了解了一下书目推荐，刚开始学习一个开源软件taste时，老大发话继续写Mylibrary，开始把学科导航整合到Mylibrary。<br />&nbsp;<br />————————花絮分割线————————<br /><br />代码花絮：<br />&nbsp;<br />MyLibrary的痛苦编写经历：<br />6月，小成。不过是基于mysql的。
<br />9月，把汇文的大部分mylibrary功能写进mylibrary，不过后来弃用。因为汇文写的更好，如果我们自己写，需要一段时间来完善和改善用户体验。
<br />10月，11月，改写成oracle的，zf虽然不错，但是在插入数据库上，mysql和oracle有很大不同。
<br />12月，没有灵感，压榨sogg小成，改投书目推荐2星期。之后再继续回来拥抱Mylibrary，可以初步导入del的收藏，具体完善打算压榨代码小机器人。<br /><br />汇文修改：<br />A：“为什么汇文续借要这么麻烦？”<br />B:"咋没记录转预约经手人？"<br />C:“Opac咋不能用了？”<br />D:"保存帐户时间能否长点？"<br />E:"....."<br />rtx自动答复:有事请联系小马哥先。<br /><br />————工作花絮——————<br /><br />工作小花絮：<br />某日，一群人在小黑屋里讨论，一小时内飞速搞定。原因有二：一小时后要去烧烤，哈哈；以充分的理由，飞速把任务推给不在场的人，比如可怜的sogg就是其中的受害者。<br /><br />某日，网络收看上海Lib2.0会议，看完很high，中午吃饭的时候讨论了一堆，没有回去午睡，结果晚上想整理的时候，发现大部分都忘了。。。<br /><br />————宿舍——————<br /><br />宿舍：<br /><br />一只羊去了深圳，虫打电话给她：“亲爱的羊羊，我们好想你”，太e了，完全不考虑旁人的感受。。<br />一只鸭子去了宁波，估计宁波有某个帅哥，不然这丫头咋一年都不回来。<br />值得大喜的一件事情，小鹿结婚了，可惜不能参加婚礼，郁闷的是咋不参加婚礼也要送礼金，哈哈。<br /><br />——————伪装分割线——————<br /><br />熊：<br /><br />熊家在昆明买了套房子。<br /><br />厦门这边新住进一只小浣，某天从一条街带回来的，哈哈，好喜欢它(某只旁白，你喜欢它还把它放在纸袋里，至今不给它洗澡=_=)。<br /><br />楼下的小猫5月的时候跑到我家生了一窝小小猫，，两只小黄一只小白。如今小小猫已经长成小猫了，丢了一只小黄，另外两只长得不错，人见人爱，人见人夸：‘太胖了“。现在的小黄喜欢和小白腻在一起，不得不控诉的是，昨晚小黄找不到小白，吵了我一晚上，郁闷。小小的遗憾是，它们小时候我怕它们被人摸了长不大，没有乘机抱它们，而且还不许某人抱它们(某人对此一直很不满),好想回到5个月前可以蹂躏小小猫的时候。。。<br /><br />小小蜜蜂出生了，哈哈，好可爱呢。sogg的小外甥很可爱，某人的小侄子也很可爱。基于青春的美丽pp动人，我相信小小青春也会很pp，哈哈，好想摸摸她/他的小脸，嗯，还想做她/他的干妈:P<br /><br />2007年在(饭)团的光辉普照下，经历了无数次腐败的我茁壮成长了，革命的友谊也因此而建立，感谢大家。太e的话，现在说不出来，或许过了几年会可以说出口，嘿嘿。虽然心里默默感谢，不过不好意思说不出来，脸皮薄的人就这个缺点，唉。。(窃笑)<br /><br />最后，小小的e一下，2007年某人越来越可爱，哈哈。<br /><br /><br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Zend Framework中对oracle数据库操作总结</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/12/zend-frameworkoracle.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.1094</id>

    <published>2007-12-18T01:47:37Z</published>
    <updated>2007-12-18T03:38:23Z</updated>

    <summary>ZF中对Oracle的简单操作总结，仅结合自身经验</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="oracle" label="Oracle" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zendframework" label="zendframework" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[说明： 摘自<a href="http://www.phpeye.com/zf/zend.db.html"><b>ZF手册中文版</b> </a><br />1.执行查询并返回结果<br /><a href="#next" color="blue">跳过废话</a><br />1.1 使用 <code class="code">Zend_Db_Adapter</code><br />&nbsp;一旦你得到了一个<code class="code">Zend_Db_Adapter</code> 实例, 你可以直接
            执行sql语句进行查询.  <code class="code">Zend_Db_Adapter</code> 传送这些sql语
            句到底层的PDO对象，由PDO对象组合并执行他们，在有查询结果的情况
            下，返回一个PDOStatement对象以便对结果进行处理。<br /><code></code><br />
<pre class="programlisting">&lt;?php<br />	<br />// 创建一个$db对象,然后查询数据库<br />// 使用完整的sql语句直接进行查询.<br />$sql = $db-&gt;quoteInto(<br />    'SELECT * FROM example WHERE date &gt; ?',<br />    '2006-01-01'<br />);<br />$result = $db-&gt;query($sql);<br /><br />// 使用PDOStatement对象$result将所有结果数据放到一个数组中<br />$rows = $result-&gt;fetchAll();<br /><br />?&gt;</pre><br /><br />或者使用fetch开头系列方法获得结果集：<p>对于每一种 <code class="code">fetch系列 </code>的方法来说，你需
            要传送一个select的sql语句；假如你在操作语句中使用指定的占位符，你也可以
            传送一个绑定数据的数组对你的操作语句进行处理和替换。 <code class="code">Fetch系列 </code>
            的方法包括： 
         </p>
<div class="itemizedlist"><ul type="disc"><li><p><code class="code">fetchAll()</code></p></li><li><p><code class="code">fetchAssoc()</code></p></li><li><p><code class="code">fetchCol()</code></p></li><li><p><code class="code">fetchOne()</code></p></li><li><p><code class="code">fetchPairs()</code></p></li><li><p><code class="code">fetchRow()</code></p></li></ul><br /><pre class="programlisting">&lt;?php<br />	<br />// 创建一个 $db对象, 然后...<br /><br />// 取回结果集中所有字段的值,作为连续数组返回<br />$result = $db-&gt;fetchAll(<br />    "SELECT * FROM round_table WHERE noble_title = :title",<br />    array('title' =&gt; 'Sir')<br />);<br /><br />// 取回结果集中所有字段的值,作为关联数组返回<br />// 第一个字段作为码<br />$result = $db-&gt;fetchAssoc(<br />    "SELECT * FROM round_table WHERE noble_title = :title",<br />    array('title' =&gt; 'Sir')<br />);<br /><br />// 取回所有结果行的第一个字段名<br />$result = $db-&gt;fetchCol(<br />    "SELECT first_name FROM round_table WHERE noble_title = :title",<br />    array('title' =&gt; 'Sir')<br />);<br /><br />// 只取回第一个字段值<br />$result = $db-&gt;fetchOne(<br />    "SELECT COUNT(*) FROM round_table WHERE noble_title = :title",<br />    array('title' =&gt; 'Sir')<br />);<br /><br />// 取回一个相关数组,第一个字段值为码<br />// 第二个字段为值<br />$result = $db-&gt;fetchPairs(<br />    "SELECT first_name, favorite_color FROM round_table WHERE noble_title = :title",<br />    array('title' =&gt; 'Sir')<br />);<br /><br />// 只取回结果集的第一行<br />$result = $db-&gt;fetchRow(<br />    "SELECT * FROM round_table WHERE first_name = :name",<br />    array('name' =&gt; 'Lancelot')<br />);<br /><br /><br /><br />?&gt;</pre></div>1.2 使用Zend_Db_Select方法<br /><p>
            使用Zend_Db_Select方法是一种不受数据库约束构建select的sql语句的工具
            （ares注：用户可以使用该方法生成查询的sql语句，而不需要考虑各种数据
            库sql语句的差别）。虽然该方法明显还不完善，但是的确为我们提供一种方
            法，帮助我们在不同的后台数据库进行相同的查询工作。除此之外，它还可
            以避免sql语句攻击。
        </p>
<p>
            创建一个zend_db_select实例最简单的方法就是使用zend_db_adapter::select()方法 <br /></p><p><br /></p><pre class="programlisting"><br />&lt;? php<br /><p>//在model中取得连接，并进行相应数据库操作</p><p>$this-&gt;db = Zend_Registry::get('db');&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </p><p>$select = $this-&gt;db-&gt;select();<br /> $select-&gt;from('link_info', 'link_info.*')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;join('link_tag_collect', 'link_info.linkid=link_tag_collect.linkid')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;where('user_friend.userid=?',$userid)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;distinct(link_info.linkid)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;order('link_tag_collect.addtime DESC')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -2007-12-18&gt;limit(10,0);<br /> $sql = $select-&gt;__toString();<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /> $result = $this-&gt;db-&gt;fetchALL($sql); </p>?&gt;</pre><br />1.3 使用 Zend_Db_Table<br />Zend_Db_Table 是Zend Framework的表模块.它通过zend_db_adapter连接到数据库,为数据库模式检查表对象,<br />并对该表进行操作和查询.<br /><pre class="programlisting">&lt;?php<br />class RoundTable extends Zend_Db_Table {}<br /><br />$table = new RoundTable();<br />$db = $table-&gt;getAdapter();<br /><br />// SELECT * FROM round_table<br />//     WHERE noble_title = "Sir"<br />//     ORDER BY first_name<br />//     LIMIT 10 OFFSET 20<br /><br />$where = $db-&gt;quoteInto('noble_title = ?', 'Sir');<br />$order = 'first_name';<br />$count = 10;<br />$offset = 20;<br /><br />$rowset = $table-&gt;fetchAll($where, $order, $count, $offset);<br />?&gt;</pre><br />以上都为废话，从ZF手册中皆能得到。<br /><div id="next">在实际中，我最常使用的是</div><br /><ul><li>从model中获得数据库连接，然后使用ZEND_DB_SELECT。</li></ul>在tag.php中<pre class="programlisting"><br />&lt;?php<br />&nbsp;public function getTopTag(){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $select = $this-&gt;db-&gt;select();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $select-&gt;from($this-&gt;_name, '*')<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;order('TAGTOTAL DESC')<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;limit(10,0);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sql = $select-&gt;__toString();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $result = $this-&gt;db-&gt;fetchALL($sql);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return $result;<br />&nbsp;&nbsp;&nbsp; }<br />?&gt;</pre><br />在TagController.php中<br /><pre class="programlisting">&lt;?php<br />class TagController extends Zend_Controller_Action<br />	private $tag;<br />	function init() {<br />		parent::init();<br />		Zend_Loader::loadClass('Tag');		<br />		$this-&gt;tag = new Tag();		<br />	}<br />	function topAction(){<br />		$thi-&gt;tag-&gt;getTopTag();<br />		...<br />	}<br />?&gt;</pre>
<br /><ul><li>使用ZEND_DB_TABLE</li></ul>在Tag.php中<br /><br /><pre class="programlisting">&lt;?php<br />class Tag extends Zend_Db_Table<br />{<br />    protected $_name = "TAG_INFO";<br />    protected $_primary = 'TAGID';<br />}<br />?&gt;<br />在TagController.php中<br />&lt;?php<br />class TagController extends Zend_Controller_Action<br />	private $tag;<br />	function init() {<br />		parent::init();<br />		Zend_Loader::loadClass('Tag');		<br />		$this-&gt;tag = new Tag();		<br />	}<br />	function topAction(){<br />		$order = 'TAGTOTAL';	<br />		$count = 10;<br />		$offset = 0;<br />&nbsp;		$thi-&gt;tag-&gt;fetchAll( $order, $count, $offset);<br />		...<br />	}<br />?&gt;</pre><br />最好还是选用方法一，能够将对数据的操作都封装在model中。<br />2.插入数据<br />无论是DB还是Table类，都使用insert()方法。<br />对于Oracle来说，如果要使用sequence作为自增的主键的话，需要使用trigger。<br />比如，有tag表，主键为tagid，其对应的sequence为tag_seq,要插入数据时，需要先新建trigger：<br /><br />create or replace trigger tag_tri<br />before insert on tag<br />for each row<br />declare<br />nextid number;<br />begin<br />IF :new.tagid IS NULL or :new.tagid=0 THEN<br />select tag_seq.nextval<br />into nextid<br />from sys.dual;<br />:new.tagid:=nextid;<br />end if;<br />end tag_tri;<br /><br />其余部分和插入其它数据库相同<br /><pre class="programlisting">&lt;?php<br />$table_name='TAG';<br />$row = array (<br />		'TAGNAME'   =&gt; $tagname,<br />		'TAGTOTAL'  =&gt; '1'<br />	);<br />$this-&gt;db-&gt;insert($table_name,$row);<br />?&gt;</pre><br /><br />3.更新数据<br />3.1直接执行update语句，参见文档。<br />3.2如果update语句中，有包含数据库的特殊关键字时，需要先将数据选出，然后再更新<br /><pre class="programlisting">&lt;?php<br />	$where = $this-&gt;db-&gt;quoteInto('tagname = ?',$tagname);<br />	$rowset = $this-&gt;tag-&gt;fetchAll($where);<br />	$count=$rowset-&gt;count();<br />	$tag = $rowset-&gt;current();					<br />	if($count!=0){<br />		$tagid=$tag-&gt;TAGID;<br />		//tagtotal+1<br />				<br />		$tag-&gt;TAGTOTAL ++;  //应判断一下当前用户是否<br />		$tag-&gt;save();	<br />	}<br />?&gt;</pre><br />4.删除数据<br /><pre class="programlisting">&lt;?php<br />	//删除已有的collect表中记录<br />	// where条件语句<br />	$where = $this-&gt;db-&gt;quoteInto('USERID = ?', $userid)<br />		.$this-&gt;db-&gt;quoteInto('AND LINKID = ?', $linkid);<br /><br />	// 删除数据并得到影响的行数<br />	$rows_affected =  $this-&gt;collect-&gt;delete($where);<br />?&gt;</pre><br /><br />总结完毕：<br />tips：<br />注意表名、字段名等的大小写！<br /><br />
    ]]>
        
    </content>
</entry>

<entry>
    <title>《暗恋桃花源》</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/11/post-31.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.1053</id>

    <published>2007-11-09T12:35:21Z</published>
    <updated>2008-05-05T03:12:51Z</updated>

    <summary>轻轻的，风起，两片叶子在空中相遇； 眨眼风过，云散，叶落。 爱恋如水晶般透明，没有过去，没有将来，这世界只有我们，一切都停止了。 你的眼睛，像草尖上上的露珠，你的微笑，像雨后的彩虹，而你，是白色的山茶花。 走在路上，看昏黄的灯。这么巧，你从远方来，又那么巧，在此相遇。 不会在今天，也会在明天，不会在今年，也会在明年，总会相遇。 这么小的人儿偏偏就在眼前。 不需要华丽的背景，也不需要繁复的音乐。...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="电影" label="电影" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="暗恋桃花源" label="暗恋桃花源" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[轻轻的，风起，两片叶子在空中相遇；
眨眼风过，云散，叶落。

<br /><br />爱恋如水晶般透明，没有过去，没有将来，这世界只有我们，一切都停止了。
你的眼睛，像草尖上上的露珠，你的微笑，像雨后的彩虹，而你，是白色的山茶花。
走在路上，看昏黄的灯。这么巧，你从远方来，又那么巧，在此相遇。
不会在今天，也会在明天，不会在今年，也会在明年，总会相遇。 这么小的人儿偏偏就在眼前。


<br /><br />不需要华丽的背景，也不需要繁复的音乐。]]>
        
    </content>
</entry>

<entry>
    <title>ZF读取配置文件</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/10/zf-1.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.942</id>

    <published>2007-10-23T01:42:19Z</published>
    <updated>2007-10-23T06:37:30Z</updated>

    <summary>使用zf的config类读取配置文件</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="config_ini" label="config_ini" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zendframework" label="zendframework" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[<p>1.加载配置文件：<br />
require_once 'Zend/Config/Ini.php';<br />
$config['nestSeparator'] = ':';<br />
$config = new Zend_Config_Ini('/path/to/config.ini', 'staging', $config);</p>

<p>另一种加载文件的方法<br />
Zend_Loader::loadClass('AppController','../application/controllers'); //加载基本控制器<br />
// 加载配置<br />
$config= new Zend_Config_Ini('../application/config.ini', 'reader');</p>

<p>2.config.ini文件示例<br />
[general]<br />
db.adapter = PDO_Oci<br />
db.config.username = cat<br />
db.config.password = dog<br />
db.config.dbname = rabbit</p>

<p>[reader]<br />
reader.LIB_CODE_REDRSTS_CANCEL = 0<br />
reader.LIB_CODE_REDRSTS_ENABLE = 1<br />
reader.LIB_CODE_CERTSTS_CANCEL = 0</p>

<p>3.读取配置文件</p>

<p>$redr=$config-&gt;reader-&gt;redr_lose;</p>

<p>参考资料：http://www.phpeye.com/zf/zend.config.adapters.ini.html</p>]]>
        
    </content>
</entry>

<entry>
    <title>小猫近照</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/09/post-30.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.911</id>

    <published>2007-09-28T09:21:56Z</published>
    <updated>2007-09-28T09:24:26Z</updated>

    <summary><![CDATA[小猫一个月前的照片&nbsp; ...]]></summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="阿瓜" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[<p>小猫一个月前的照片</p><p>&nbsp;</p> <a href="http://blog.xmulib.org/ringtail/cat.jpg"><img src="http://blog.xmulib.org/ringtail/cat-thumb.jpg" border="0" alt="cat.jpg" width="570" height="373" /></a>]]>
        
    </content>
</entry>

<entry>
    <title>随感</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/09/post-29.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.910</id>

    <published>2007-09-28T08:59:53Z</published>
    <updated>2007-09-28T09:17:02Z</updated>

    <summary>今天和朋友聊天，谈到各自的老公、男朋友，都感慨良多。一个升迁或者发展的机会，对于女人来说，是可以拒绝的；但是对于一个男人，一个想施展抱负又那么有些优秀的男人来说，是无法拒绝的。他们总是想着让自己的家人过上更好的日子，但是并不考虑家人们或许更希望他把工作的时间留在家中。他们认为自己是以家庭为重的人，但是总会在一次次需要加班的时候，选择加班，而不是准时回家。简简单单的细节，可是两条路就是这样慢慢茬开的...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="光阴" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[<p>今天和朋友聊天，谈到各自的老公、男朋友，都感慨良多。</p><p>一个升迁或者发展的机会，对于女人来说，是可以拒绝的；但是对于一个男人，一个想施展抱负又那么有些优秀的男人来说，是无法拒绝的。他们总是想着让自己的家人过上更好的日子，但是并不考虑家人们或许更希望他把工作的时间留在家中。他们认为自己是以家庭为重的人，但是总会在一次次需要加班的时候，选择加班，而不是准时回家。简简单单的细节，可是两条路就是这样慢慢茬开的。</p><p>最开始的时候，总是甜言蜜语，一切都是真心的，但是随着时间的溜去， 每次的对不起也总是不得已，真心不曾改变，只是需要考虑的事情变多。当选择的对象变多时，选中某一个的机率就变小了。就如博爱的人，不会深爱某一个人一样，心就这么小，分成那么多分，哪里会对谁专一。</p><p>&nbsp;生活总会有各种各样的问题，如何能保证今天的花明天不会谢，怎么可能让今天娇艳的容颜明日依旧，结了婚还离婚的人多了去。能做的不过是相信，相信彼此的那份心意不会改变，在不长不短的人生路上，互相依扶，在每一个选择前仔细思量，彼此珍惜。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ZF连接Oracle</title>
    <link rel="alternate" type="text/html" href="http://blog.xmulib.org/ringtail/2007/09/zforacle.html" />
    <id>tag:blog.xmulib.org,2007:/ringtail//7.906</id>

    <published>2007-09-25T07:13:46Z</published>
    <updated>2008-10-31T16:18:20Z</updated>

    <summary>在两天的多次尝试下，终于成功连接到Oracle，记录如下：1.安装oracle(如果以前有残留的话,要卸载干净，非常重要！)2.启动extension=php_pdo_oci.dll或extension=php_pdo_oci8.dll两者的区别在于: Php_pdo_oci.dll requires Oracle 10g libraries whilephp_pdo_oci8.dll will ...</summary>
    <author>
        <name>ringtail</name>
        <uri>http://blog.xmulib.org/ringtail</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="oracle" label="Oracle" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="zendframework" label="zendframework" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://blog.xmulib.org/ringtail/">
        <![CDATA[<p>在两天的多次尝试下，终于成功连接到Oracle，记录如下：</p><p>1.安装oracle(如果以前有残留的话,要卸载干净，非常重要！)<br />2.启动extension=php_pdo_oci.dll或extension=php_pdo_oci8.dll<br />两者的区别在于:<br /></p>
Php_pdo_oci.dll requires Oracle 10g libraries while<br />php_pdo_oci8.dll will work with older libraries.&nbsp; Regardless of the<br />libraries used by PHP, both can be used to connect to databases of other<br />versions (with some limitations)<br /><p>3.连接代码示例:<br /></p>]]>
        <![CDATA[3.1普通的pdo连接(只是做对比用)
<pre name="code" class="php:nogutter:showcolumns" rows="10" cols="60">  
 try{
$conn = new PDO("oci:dbname=lala",'username','password');
//PDO("oci:dbname=//oracle远程IP:端口号/数据库名",用户名,密码);
 //若是本机上的数据库，可直接用PDO("oci:dbname=数据库",$db_username,$db_password);
echo "连接成功";
}catch(PDOException $e){
echo ("Error:".$e-&gt;getMessage()."&lt;br&gt;");
die();
 }
</pre>
3.2ZF的连接,只需要配置config.ini文件,其它的和连接其它数据库一样.<br /> config.ini文件内容如下:
<pre name="code" class="php" rows="10" cols="60">  
[general]
db.adapter = PDO_Oci
db.config.username = username
 db.config.password = password
db.config.dbname = dbname 
</pre>
index.php中加载数据库配置并建立连接
<pre name="code" class="php" rows="10" cols="60">  
Zend_Loader::loadClass('AppController','../application/controllers');
 //加载基本控制器
 // 加载配置
 $config = new Zend_Config_Ini('../application/config.ini', 'general');
 $registry = Zend_Registry::getInstance();
$registry->set('config', $config);
// 设置数据库
$db = Zend_Db::factory($config-&gt;db-&gt;adapter,$config-&gt;db-&gt;config-&gt;asArray());
// Sets the default Zend_Db_Adapter_Abstract for all Zend_Db_Table objects
 //$db-&gt;query('set names utf8');
Zend_Db_Table::setDefaultAdapter($db);
$registry-&gt;set('db', $db); 
</pre>
<p>在model中取得连接，并进行相应数据库操作</p><p>$this-&gt;db = Zend_Registry::get('db');&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </p><p>$select = $this-&gt;db-&gt;select();<br /> $select-&gt;from('link_info', 'link_info.*')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;join('link_tag_collect', 'link_info.linkid=link_tag_collect.linkid')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;where('user_friend.userid=?',$userid)<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;order('link_tag_collect.addtime DESC')<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -&gt;limit(10,0);<br /> $sql = $select-&gt;__toString();<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /> $result = $this-&gt;db-&gt;fetchALL($sql); </p><p>也可以选择直接执行sql语句的方式：</p>$sql='SELECT * FROM link_info t';<br /> try { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo $sql;<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $stmt = $this-&gt;db-&gt;query($sql);<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $result = $stmt-&gt;fetchAll();<br /> } catch (PDOException $e) { &nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo "Exception caught : {$e-&gt;getMessage()}\n";<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; exit;<br /> }]]>
    </content>
</entry>

</feed>
