TRIP数据库检索的一个主要方法

简介:
 
  1. package com.ninemax.util; 
  2. import java.util.ArrayList; 
  3. import java.util.List; 
  4. import com.tietoenator.trip.jtk.*; 
  5. import com.ninemax.database.trip.*; 
  6. import com.ninemax.entity.GeneralResult; 
  7. /** 
  8.  * Trip数据库测试类-模糊检索-只显示相关的段落 
  9.  * @author han 
  10.  */ 
  11. public class MyTrip { 
  12.     /** 
  13.      * 将字符串由ISO8859-1转位GBK编码 
  14.      * @param str 要转码的字符串 
  15.      * @return String 
  16.      */ 
  17.     public static String convert(String str) { 
  18.         try { 
  19.             byte[] bytesStr = str.getBytes("ISO-8859-1"); 
  20.             return new String(bytesStr, "GBK"); 
  21.         } catch (Exception ex) { 
  22.             return str; 
  23.         } 
  24.     } 
  25.     /** 
  26.      * 将字符串由GBK转为ISO8859-1编码 
  27.      * @param str 需要转码的字符串 
  28.      * @return String 
  29.      */ 
  30.     public static String deConvert(String str) { 
  31.         try { 
  32.             byte[] bytesStr = str.getBytes("GBK"); 
  33.             return new String(bytesStr, "ISO-8859-1"); 
  34.         } catch (Exception ex) { 
  35.             return str; 
  36.         } 
  37.     } 
  38.  
  39.     /** 
  40.      * 对TRIP数据库进行模糊检索-只显示相关的段落 
  41.      * @param keyword 检索的关键词 
  42.      * @return List集合 
  43.      */ 
  44.     public List<GeneralResult> getResult(int intPageSize,long intPagex,String keyword){ 
  45.     /* 
  46. 说明:GeneralReSult是一个封装类。里面是一些我们需要的记录的属性。  
  47. */ 
  48.  
  49.         //intPage表示当前页 
  50.         int intPage = (int) intPagex;  
  51.         /**这是模糊查找 */ 
  52.         String strfind ="content="+keyword; 
  53.          
  54.         //要连接的主机IP地址 
  55.         String tripIP = "192.168.15.11"
  56.         //要连接的数据库的名称 
  57.         String tripDB = "mydb"
  58.         //TRIP数据库的登陆者名称 
  59.         String tripUserName = "system"
  60.         //TRIP数据库的登陆者密码 
  61.         String tripPassword = "trip413"
  62.          
  63.         int FindRecordNumber = 0
  64.         double second1 = 0.0, second2 = 0.0
  65.          
  66.         //下面为初始化TRIP数据库的连接池 
  67.          TripPoolManage tpm = TripPoolManage.getInstance(); 
  68.             TripPoolManager TPool = tpm.getTripPool(); 
  69.             if (TripPoolManager.IsExistPool() == false) { 
  70.                 int poolSize =1;//连接池最大用户数 
  71.                 String usernames[]=new String[poolSize]; 
  72.                 String passwrods[]=new String[poolSize]; 
  73.                 for(int i=0;i<poolSize;i++){ 
  74.                     usernames[i]=tripUserName; 
  75.                     passwrods[i]=tripPassword; 
  76.                 } 
  77.                 tpm.createPool( tripDB, tripIP, usernames,passwrods,poolSize,10000,0); 
  78.             } 
  79.          
  80.         TripSession TSession; 
  81.         Database db = null
  82.         Search srh = null
  83.         Record rec = null
  84.         TField fld = null
  85.         Session trip = null;//SessionManager.session(); 
  86.  
  87.         TSession = TPool.getConnection("UserPool1""User1", tripIP); 
  88.         try { 
  89.             trip = TSession.getSession(); 
  90.             db = trip.database(tripDB); 
  91.             db.open(); 
  92.             second1 = System.currentTimeMillis(); 
  93.             //执行CCL中的find命令,即:find jgdm=xxx 
  94.             trip.find(deConvert(strfind)); 
  95.             second2 = System.currentTimeMillis(); 
  96.             //session对象的getRecordCount()方法:获取find方法最新搜索发现的记录数 
  97.             FindRecordNumber = trip.getRecordCount(); 
  98.              
  99.             try
  100. //Session对象的search(int p)方法:表示创建一个新的搜索对象,当p=0时,表示最新的搜索被使用 
  101.                 srh = trip.search(0); 
  102.             }catch (Exception e){ 
  103.                 trip = TSession.getSession(); 
  104.                 //session对象的database(String dbNames):创建一个新的数据库对象 
  105.                 db = trip.database(tripDB); 
  106.                 //打开要访问的数据库 
  107.                 db.open(); 
  108.     //session对象的getRecordCount()方法:获取find方法最新搜索发现的记录数 
  109.                 FindRecordNumber = trip.getRecordCount(); 
  110.                 srh = trip.search(0); 
  111.             } 
  112.              
  113.             String strauthor = ""
  114.             String strcontent = ""
  115. /* 
  116. 说明:strauthor  ,  strcontent是trip数据库mydb中的两个字段名称,同时也是我们自己封装的类GeneralResult的两个属性。 
  117.  
  118. 不同的数据库的字段不同。我们所要查的字段也不同,我们需要查那些字段,在此就写那些字段!!! 
  119. */ 
  120.      
  121.             int rid = 0
  122.             //k1表示:每一个list集合中的第一个记录 
  123.             int k1 = intPageSize * (intPage - 1) + 1
  124.             int x = 0
  125.             if(FindRecordNumber>0){ 
  126.                 if (FindRecordNumber - (intPageSize * (intPage - 1)) < intPageSize) { 
  127.             //当剩下的记录不足一个intPageSize时,我们要自己设置新的每页显示条数 
  128.                     x = FindRecordNumber - (intPageSize * (intPage - 1)); 
  129.                 } else { 
  130.                     x = intPageSize; 
  131.                 } 
  132.             } 
  133.              
  134.             List<GeneralResult> list = new ArrayList<GeneralResult>(); 
  135.              
  136.             for (int i = k1; i < (k1 + x); i++) { 
  137.                 GeneralResult result=new GeneralResult();  
  138.                 result.setIndexNo(i); 
  139.                  
  140.                 result.setTotalNum(convert(String.valueOf(FindRecordNumber))); 
  141.                 result.setUseTime(convert(String.valueOf((second2 - second1) / 1000.0))); 
  142.                  
  143.                 rec = srh.record(i); 
  144.                 rid = rec.getRID(); 
  145.                  
  146.                 result.setRid(rid); 
  147.  
  148.                 //author字段 
  149.                 fld = rec.field("author"); 
  150.                 strauthor = fld.getValue(); 
  151.                 if(strauthor == null) { 
  152.                     strauthor = ""
  153.                 } 
  154.         result.setAuthor(convert(strauthor)); 
  155.  
  156. /* 
  157. 说明:上面的几行代码就查出数据库里author字段的某个记录, 
  158. 并封装到GeneralReSult类中。 
  159. */ 
  160.  
  161.                              
  162.                 //content字段 
  163.                 fld = rec.field("content"); 
  164.                 strcontent = fld.getValue(); 
  165.                  
  166.                 //拿到该记录中该字段中段落数,即:paraNum 
  167.                 int paraNum = fld.getParagraphCount(); 
  168.                  
  169.                 //下面要拿到每一个段落的内容 
  170.                 for(int j = 1; j<=paraNum; j++) { //注意:段落也是从1开始的。 
  171.                     String value1 = null
  172.                     String value2 = null
  173.                     String value = null
  174.                      
  175.                     if(j == paraNum) { 
  176.                         //拿到最后一段的内容 
  177.                         value = fld.getValue(paraNum); 
  178.                     } else { 
  179.                         //拿到除最后一段的每一段的内容 
  180.                         value1 = fld.getValue(j); 
  181.                         value2 = fld.getValue(j+1); 
  182.                         value = value1.substring(0,value1.indexOf(value2)); 
  183.                     } 
  184.                      
  185.                     //判断每一段是否包含检索词 
  186.                     /** 
  187.                      * 2011.12.28日修改,如果一篇文章中有一个符合要求的段落, 
  188.                      * 那么我们结束该篇文章段落的循环→节省资源,提高性能! 
  189.                      */ 
  190.                     if(convert(value.trim()).contains(keyword)) { 
  191.                         //如果该段落包含检索词,我们将该段落以及相应的作者封装到GeneralResult5对象中 
  192.                         result.setContent(convert(strcontent)); 
  193.                         result.setNum(j); 
  194.                         result.setParagraph(convert(value)); 
  195.                         break
  196.                     } 
  197.                 } 
  198.          
  199. /* 
  200. 说明:以上的绿色部分,视具体情况而定,此时是我做的一个例子!如果你不需要查相应的段落,就不需要的!!  只要最后把result对象装入相应的集合中就行了! 
  201. */ 
  202.      
  203.                 list.add(result); 
  204.             } 
  205.             TPool.closeConnection(TSession); 
  206.             return list; 
  207.         } catch (Exception e) { 
  208.             TPool.closeConnection(TSession); 
  209.             trip.endSession(); 
  210.             TPool.destroyPool(); 
  211.             TPool.cleanUp(); 
  212.             return new ArrayList<GeneralResult>(); 
  213.         } 
  214.     }    
  215.  
  216. /* 
  217.     你在此处做一个main方法,就可以测试上面的代码了!!我就不做了!真的需要的话,去下载就行了!我上传过例子!! 
  218. */ 
  219.  
  220. ———————————————————————————————————————————————————— 
  221. /** 
  222.  * 封装了检索出来的一些信息 
  223.  * @author hanlw 
  224.  * 
  225.  */ 
  226. public class GeneralResult { 
  227.  
  228.     //相应的作者 
  229.     String author; 
  230.     //符合要求的段落 
  231.     String paragraph; 
  232.     //记录一下该段落是第几段 
  233.     int num; 
  234.     //整篇的内容 
  235.     String  content; 
  236.     //记录号 
  237.     int rid; 
  238.     //总的记录数 
  239.     String totalNum; 
  240.     //查询费时 
  241.     String useTime; 
  242.     //起始位置 
  243.     int indexNo; 
  244.     //以下是get…set方法。。。。 
  245.      
  246.  
  247. ---------------------------------------------------------------- 
  248. 下面是一个工具类: 
  249. public class TripPoolManage 
  250.   private static TripPoolManage pool = new TripPoolManage(); 
  251.   private static int intConnectTimes = 0
  252.   private static int cleanupNumber = 0
  253.   private static TripPoolManager TPool = TripPoolManager.getInstance(); 
  254.  
  255.   public static TripPoolManage getInstance() 
  256.   { 
  257.     return pool; 
  258.   } 
  259.  
  260.   public TripPoolManager getTripPool() { 
  261.     return TPool; 
  262.   } 
  263.  
  264.   public void createPool(String tripDB, String tripIP, String[] tripUserName, String[] tripPassword, int connectNumber, int cleanNumber, long refreshTimes) 
  265.   { 
  266.     if (!TripPoolManager.IsExistPool()) 
  267.     { 
  268.       TPool.setPoolsAmount(1); 
  269.  
  270.       TPool.setPoolParam("UserPool1"1, tripIP, 23457,  
  271.         tripUserName, tripPassword, "trip628.ini", connectNumber,  
  272.         connectNumber, 1, 40000L, "16450""16898", 50000L); 
  273.       TPool.createTripConnectPool(); 
  274.       cleanupNumber = cleanNumber; 
  275.       TripPoolManager.setCleanUpTime(refreshTimes); 
  276.       TripPoolManager.StartCleanUp(); 
  277.     } 
  278.   } 
  279.  
  280.   public TripSession getConnection(String username, String ip) 
  281.     throws IOException 
  282.   { 
  283.     intConnectTimes += 1
  284.  
  285.     if (intConnectTimes >= cleanupNumber) 
  286.     { 
  287.       TPool.cleanUp(); 
  288.       intConnectTimes = 0
  289.     } 
  290.  
  291.     return TPool.getConnection("UserPool1", username, ip); 
  292.   } 
  293.  
  294.   public int getConnectTimes() { 
  295.     return intConnectTimes; 
  296.   } 

 

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/779535,如需转载请自行联系原作者







相关文章
|
22天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
161 1
|
4月前
|
数据库
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
|
2月前
|
存储 算法 Java
实现不同数据库的表间的 JOIN 运算的极简方法
跨库计算是数据分析中的常见难题,尤其涉及多数据库系统时,表间 JOIN 操作复杂度显著提升。esProc 提供了一种高效解决方案,能够简化跨库 JOIN 的实现。例如,在车辆管理、交管和公民信息系统中,通过 esProc 可轻松完成如下任务:按城市统计有车公民事件数量、找出近一年获表彰的车主信息,以及按年份和品牌统计车辆违章次数。esProc 支持不同关联场景(如维表关联与主子表关联)的优化算法,如内存索引、游标处理和有序归并,从而大幅提升编码和运算效率。无论是同构还是异构数据源,esProc 均能灵活应对,为复杂数据分析提供强大支持。
|
3月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
653 28
|
3月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
4月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
99 16
|
6月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
298 75
|
5月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
404 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
5月前
|
数据库
【YashanDB 知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
**数据库主备切换简介** 在数据库正常或异常情况下,实现主备切换至关重要。若配置不当,主节点故障将影响业务使用,尤其在23.2版本中。原因包括资源紧张或主节点异常。解决方法涵盖手动和自动切换: 1. **一主一备部署**: - **手动切换**:支持Switchover(同步正常时)和Failover(主库损坏时)。 - **自动切换**:启用yasom仲裁选主开关。 2. **一主两备部署**: - 默认最大保护模式,自动切换开启。 需检查并配置自动切换以确保高可用性。经验总结:一主一备默认关闭自动切换,需手动开启;一主两备默认开启。
|
8月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
144 7

热门文章

最新文章