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;
}
这三个方法在我们进行查询时,如果出现问题,它们会将问题反映出来。当试图获取一个对象时,却出现了异常,那可以在获取对象的过程中通过另一个(全局)对象将这个异常的信息保存下来,以供方法返回后使用。
本想说这与状态模式有点关联,但好像不大,附上状态模式的定义:
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类