package com.ninemax.util;
import java.util.ArrayList;
import java.util.List;
import com.tietoenator.trip.jtk.*;
import com.ninemax.database.trip.*;
import com.ninemax.entity.GeneralResult;
/**
* Trip数据库测试类-模糊检索-只显示相关的段落
* @author han
*/
public class MyTrip {
/**
* 将字符串由ISO8859-1转位GBK编码
* @param str 要转码的字符串
* @return String
*/
public static String convert(String str) {
try {
byte[] bytesStr = str.getBytes("ISO-8859-1");
return new String(bytesStr, "GBK");
} catch (Exception ex) {
return str;
}
}
* 将字符串由GBK转为ISO8859-1编码
* @param str 需要转码的字符串
public static String deConvert(String str) {
byte[] bytesStr = str.getBytes("GBK");
return new String(bytesStr, "ISO-8859-1");
* 对TRIP数据库进行模糊检索-只显示相关的段落
* @param keyword 检索的关键词
* @return List集合
public List<GeneralResult> getResult(int intPageSize,long intPagex,String keyword){
/*
说明:GeneralReSult是一个封装类。里面是一些我们需要的记录的属性。
*/
//intPage表示当前页
int intPage = (int) intPagex;
/**这是模糊查找 */
String strfind ="content="+keyword;
//要连接的主机IP地址
String tripIP = "192.168.15.11";
//要连接的数据库的名称
String tripDB = "mydb";
//TRIP数据库的登陆者名称
String tripUserName = "system";
//TRIP数据库的登陆者密码
String tripPassword = "trip413";
int FindRecordNumber = 0;
double second1 = 0.0, second2 = 0.0;
//下面为初始化TRIP数据库的连接池
TripPoolManage tpm = TripPoolManage.getInstance();
TripPoolManager TPool = tpm.getTripPool();
if (TripPoolManager.IsExistPool() == false) {
int poolSize =1;//连接池最大用户数
String usernames[]=new String[poolSize];
String passwrods[]=new String[poolSize];
for(int i=0;i<poolSize;i++){
usernames[i]=tripUserName;
passwrods[i]=tripPassword;
}
tpm.createPool( tripDB, tripIP, usernames,passwrods,poolSize,10000,0);
}
TripSession TSession;
Database db = null;
Search srh = null;
Record rec = null;
TField fld = null;
Session trip = null;//SessionManager.session();
TSession = TPool.getConnection("UserPool1", "User1", tripIP);
trip = TSession.getSession();
db = trip.database(tripDB);
db.open();
second1 = System.currentTimeMillis();
//执行CCL中的find命令,即:find jgdm=xxx
trip.find(deConvert(strfind));
second2 = System.currentTimeMillis();
//session对象的getRecordCount()方法:获取find方法最新搜索发现的记录数
FindRecordNumber = trip.getRecordCount();
try{
//Session对象的search(int p)方法:表示创建一个新的搜索对象,当p=0时,表示最新的搜索被使用
srh = trip.search(0);
}catch (Exception e){
trip = TSession.getSession();
//session对象的database(String dbNames):创建一个新的数据库对象
db = trip.database(tripDB);
//打开要访问的数据库
db.open();
//session对象的getRecordCount()方法:获取find方法最新搜索发现的记录数
FindRecordNumber = trip.getRecordCount();
String strauthor = "";
String strcontent = "";
/*
说明:strauthor , strcontent是trip数据库mydb中的两个字段名称,同时也是我们自己封装的类GeneralResult的两个属性。
不同的数据库的字段不同。我们所要查的字段也不同,我们需要查那些字段,在此就写那些字段!!!
int rid = 0;
//k1表示:每一个list集合中的第一个记录
int k1 = intPageSize * (intPage - 1) + 1;
int x = 0;
if(FindRecordNumber>0){
if (FindRecordNumber - (intPageSize * (intPage - 1)) < intPageSize) {
//当剩下的记录不足一个intPageSize时,我们要自己设置新的每页显示条数
x = FindRecordNumber - (intPageSize * (intPage - 1));
} else {
x = intPageSize;
List<GeneralResult> list = new ArrayList<GeneralResult>();
for (int i = k1; i < (k1 + x); i++) {
GeneralResult result=new GeneralResult();
result.setIndexNo(i);
result.setTotalNum(convert(String.valueOf(FindRecordNumber)));
result.setUseTime(convert(String.valueOf((second2 - second1) / 1000.0)));
rec = srh.record(i);
rid = rec.getRID();
result.setRid(rid);
//author字段
fld = rec.field("author");
strauthor = fld.getValue();
if(strauthor == null) {
strauthor = "";
result.setAuthor(convert(strauthor));
说明:上面的几行代码就查出数据库里author字段的某个记录,
并封装到GeneralReSult类中。
//content字段
fld = rec.field("content");
strcontent = fld.getValue();
//拿到该记录中该字段中段落数,即:paraNum
int paraNum = fld.getParagraphCount();
//下面要拿到每一个段落的内容
for(int j = 1; j<=paraNum; j++) { //注意:段落也是从1开始的。
String value1 = null;
String value2 = null;
String value = null;
if(j == paraNum) {
//拿到最后一段的内容
value = fld.getValue(paraNum);
} else {
//拿到除最后一段的每一段的内容
value1 = fld.getValue(j);
value2 = fld.getValue(j+1);
value = value1.substring(0,value1.indexOf(value2));
}
//判断每一段是否包含检索词
/**
* 2011.12.28日修改,如果一篇文章中有一个符合要求的段落,
* 那么我们结束该篇文章段落的循环→节省资源,提高性能!
*/
if(convert(value.trim()).contains(keyword)) {
//如果该段落包含检索词,我们将该段落以及相应的作者封装到GeneralResult5对象中
result.setContent(convert(strcontent));
result.setNum(j);
result.setParagraph(convert(value));
break;
说明:以上的绿色部分,视具体情况而定,此时是我做的一个例子!如果你不需要查相应的段落,就不需要的!! 只要最后把result对象装入相应的集合中就行了!
list.add(result);
TPool.closeConnection(TSession);
return list;
} catch (Exception e) {
trip.endSession();
TPool.destroyPool();
TPool.cleanUp();
return new ArrayList<GeneralResult>();
}
}
你在此处做一个main方法,就可以测试上面的代码了!!我就不做了!真的需要的话,去下载就行了!我上传过例子!!
————————————————————————————————————————————————————
* 封装了检索出来的一些信息
* @author hanlw
*
public class GeneralResult {
//相应的作者
String author;
//符合要求的段落
String paragraph;
//记录一下该段落是第几段
int num;
//整篇的内容
String content;
//记录号
int rid;
//总的记录数
String totalNum;
//查询费时
String useTime;
//起始位置
int indexNo;
//以下是get…set方法。。。。
----------------------------------------------------------------
下面是一个工具类:
public class TripPoolManage
{
private static TripPoolManage pool = new TripPoolManage();
private static int intConnectTimes = 0;
private static int cleanupNumber = 0;
private static TripPoolManager TPool = TripPoolManager.getInstance();
public static TripPoolManage getInstance()
{
return pool;
}
public TripPoolManager getTripPool() {
return TPool;
public void createPool(String tripDB, String tripIP, String[] tripUserName, String[] tripPassword, int connectNumber, int cleanNumber, long refreshTimes)
if (!TripPoolManager.IsExistPool())
{
TPool.setPoolsAmount(1);
TPool.setPoolParam("UserPool1", 1, tripIP, 23457,
tripUserName, tripPassword, "trip628.ini", connectNumber,
connectNumber, 1, 40000L, "16450", "16898", 50000L);
TPool.createTripConnectPool();
cleanupNumber = cleanNumber;
TripPoolManager.setCleanUpTime(refreshTimes);
TripPoolManager.StartCleanUp();
public TripSession getConnection(String username, String ip)
throws IOException
intConnectTimes += 1;
if (intConnectTimes >= cleanupNumber)
TPool.cleanUp();
intConnectTimes = 0;
return TPool.getConnection("UserPool1", username, ip);
public int getConnectTimes() {
return intConnectTimes;
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/779535,如需转载请自行联系原作者