SphinxResult result = sphinx.Query(String queryString, String index, String comment);
下面是實現:
/** Connect to searchd server and run current search query. */
public SphinxResult Query ( String query, String index, String comment ) throws SphinxException
{
myAssert ( _reqs==null || _reqs.size()==0, "AddQuery() and Query() can not be combined; use RunQueries() instead" );
AddQuery ( query, index, comment );
SphinxResult[] results = RunQueries();
_reqs = new ArrayList(); /* just in case it failed too early */
if ( results==null || results.length<1 )
return null; /* probably network error; error message should be already filled */
SphinxResult res = results[0];
_warning = res.warning;
_error = res.error;//這裏在修改SphinxClient對象裏的_error屬性
if ( res==null || res.getStatus()==SEARCHD_ERROR )
return null;
return res;
}
SphinxResult是使用sphinx對象進行查詢後得到的結果對象,當這個結果對象不爲null時說明查詢一切正常,要是爲null時我可以從sphinx對象中得到錯誤的原因:
sphinx.getLastError();
在SphinxClient這個接口中有如下的代碼:
/** Get last error message, if any. */
public String GetLastError()
{
return _error;
}
/** Get last warning message, if any. */
public String GetLastWarning()
{
return _warning;
}
/** Get last error flag (to tell network connection errors from searchd errors or broken responses). */
public boolean IsConnectError()
{
return _connerror;
}
這三個方法在我們進行查詢時,如果出現問題,它們會將問題反映出來。當試圖獲取一個對象時,卻出現了異常,那可以在獲取對象的過程中通過另一個(全局)對象將這個異常的信息保存下來,以供方法返回後使用。
本想說這與狀態模式有點關聯,但好像不大,附上狀態模式的定義:
允許對象在內部狀態改變時改變它的行爲,對象看起來好像修改了它的類