- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2014-11-07 10:08 编辑
wsx1011 发表于 2014-11-06 22:38
回复 7# yulihua49
如果对方是用C语言写的服务器呢?
SDBC就是C的服务器+C的客户端+JAVA的客户端。
其中预置了数据库服务,和文件传送服务,还可以自己添加所需的服务。
当然,SDBC实现的功能,其他方法理论上也可以实现。但是要做许多的工作。
看看JAVA调ORACLE存储过程的代码,有状态服务,返回游标:- public int test_rpc()
- {
- int i,pos;
- SdbcClient sqlc=new SdbcClient(mid);
- BUS bus=new BUS(pattern);
- PAGE page=new PAGE(pattern);
- byte[] result;
- Rowno rowno=new Rowno(pattern);
- String rpccmd="test_buspage.datapage(' ',1,20,' ',:cursor,:char(100),:cursor,:char(100))";
- StringBuffer retval=new StringBuffer(100);
- int nrets[]=new int[1];
- i=sqlc.RPC(rpccmd, retval, nrets, 2);
- if(i==0) {
- // retval= "1|2|2||"
- System.out.println("retval="+retval+",nrets="+nrets[0]);
- String s[]=retval.toString().split("\\|");
- //第一个游标
- int cursor= Integer.parseInt(s[0]);
- sqlc.Fetch(cursor, retval, 0);
- System.out.println(retval.toString()+",rows="+sqlc.Rows);
- // System.out.println("这么大的一堆,让我怎么解析呢?下边演示用SdbcPack类解析:");
- result=retval.toString().getBytes();
- pos=0;
- for(i=0;i<sqlc.Rows;i++) {
- pos=SdbcPack.unpack(bus,result , pos);
- //比表结构多了一个rowno
- pos=SdbcPack.unpack(rowno,result,pos);
- //现在可以使用这个bus啦
- System.out.println("BUS["+rowno.getRow_no()+"]="+Jorm.objectToJsonString(bus));
- }
- sqlc.Close_Cursor(cursor);
- //第二个游标
- cursor= Integer.parseInt(s[2]);
- sqlc.Fetch(cursor, retval, 0);
- System.out.println(retval.toString()+",rows="+sqlc.Rows);
- result=retval.toString().getBytes();
- pos=0;
- for(i=0;i<sqlc.Rows;i++) {
- pos=SdbcPack.unpack(page, result, pos);
- pos=SdbcPack.unpack(rowno,result,pos);
- //现在可以使用这个page啦
- System.out.println("PAGE["+rowno.getRow_no()+"]="+Jorm.objectToJsonString(page));
- }
- sqlc.Close_Cursor(cursor);
- }
- return 0;
- }
复制代码 |
|