DELPHI与Java Web读取TABLE数据最简捷的方案:TkbmMemTable+java数据Format器

在WEB广泛应用的时代,C/S结构不单是基于传统的数据库端口连接的方式。因为如果中间隔了网络代理、防火墙,端口数据则很容易被拦截。我们需要的是能开IE就能访问的网络客户端应用。

在此,我的客户端采用的是DELPHI

然而一个问题在此就产生了。当java查询出的数据是一个 List列表时,如何方便的导入到DELPHI客户端的表格显示呢?不同人有不同的解决方法,有人采用Servlet返回XML来分析,有的用Servlet产生单个string传递然后去split,有人去采用自己的格式化分析程序然后填写到StringGrid。

而我则选择了一种更简便的方式:TkbmMemTable组件+XFIRE。XFIRE发送数据能方便的利用HTTP来传输,而TkbmMemTable将数据存到TDataSet则能方便的使用和访问,如果再加上TxQuery。哇。。。。那数据处理和显示功能就更加强大了。

先看看传递一个数据表是如何的方便:
1.在TkbmMemTable定义要查询出来表的各字段,再设置Active=true。格式化组件采用TkbmCSVStreamFormat,默认设置即可。
2.使用JAVA的DAO查询的List数据,使用MemTableRecBuilder(稍后介绍)建立成TkbmMemTable能读取的CSV

 

3.将resultArray传递给客户端,在此我使用了自己的一套获取数据的通用WebService接口,不是本文的重点,因此忽略。因为不同人也有各自不同的数据传递方案。
4.将获取的数据通过StringStream放入内存表

procedure TFormRecordServer.bsSkinButtonsBarSections0Items0Click( 
  Sender: TObject);
var
  strStream: TStringStream;
begin

  kbmMemTablePrjInf.EmptyTable;
  strStream := TStringStream.Create(DataUtil.findRecordingPrjInf); //读取的数据string
  if strStream.Size > 0 then
    kbmMemTablePrjInf.LoadFromStream(strStream); //这样就把数据全部传递到了TkbmMemTable
  strStream.Free;
end;

没有多余的代码,除了XFIRE传递数据的采用自己的方式外,编码和读取就上面这么简单的代码。接下来公布我自己编写的TkbmMemTable CSV数据格式化器:

package  com.aherp.voice.util;

public   class  MemTableRecBuilder  {

    
private static final String CSV_QOUTE = """;
    
    
private static final char CSV_RECORD_DELIMITER = ',';
    
    
private static final String CSV_TRUE_STRING = "True";

    
private static final String CSV_FALSE_STRING = "False";
    
    
private StringBuffer strbuf;

    
private ThreadLocal<Integer> fieldCount = new ThreadLocal<Integer>();
    
    
public MemTableRecBuilder(){
        strbuf 
= new StringBuffer();
        fieldCount.set(
0);
    }


    
public MemTableRecBuilder buildField(Object fieldData){
        
int fieldCountInt = fieldCount.get(); 
        
if(fieldCountInt > 0)
            strbuf.append(CSV_RECORD_DELIMITER);
        fieldCount.set(fieldCountInt 
+ 1);

        strbuf.append(CSV_QOUTE);
        
if(fieldData instanceof String){
            strbuf.append(
                ((String)fieldData).replace(CSV_QOUTE, 
"""")
                .replace(
"%""%%")
                .replace(
" ""%c")
                .replace(
" ""%n"));
            
        }

        
else if(fieldData instanceof Boolean){
            
if((Boolean)fieldData)
                strbuf.append(CSV_TRUE_STRING);
            
else
                strbuf.append(CSV_FALSE_STRING);
        }

        
else
            strbuf.append(fieldData);
        strbuf.append(CSV_QOUTE);
        
return this;
    }


    
public MemTableRecBuilder newRow(){
        strbuf.append(
' ');
        fieldCount.set(
0);
        
return this;
    }


    
public String toString(){
        
return strbuf.toString();
    }

}


再提醒一点,对于bool型数据的存储,kbmmemtable中是由其格式化器CSVStreamFormat的CSVFalseString和CSVTrueString的两个属性决定的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值