在开发WWW网络浏览软件中,时常要用Java画一些生产管理图形,而且大量的图形数据存于网络数据库Oracle中,现在常用的方法是使用JDBC来实现对数据库的操作,但是,如果手头没有驱动程序,则无法对数据库进行操作。其实,我们可以使用Delphi开发Java的Oracle数据接口软件。具体实现方法简述如下。
一. 系统设置
1. 用SQL NET 设置Oracle数据库所在服务器的IP地址别名,这里假设名字是oracle
2. 建立Oracle ODBC数据源;
进入控制面板的ODBC数据源,然后点击System DSN,再点击Add按钮选择MicrosoftODBC Driver Oracle,在Data Source Name框中输入数据源名 test),在User Name框中输入Oracle数据用户名 假设为user1),最后在Connect String框中输入在SQL NET中建立的Oracle数据库别名oracle1。
建立好以上两步后,则Delphi的BDE Administrator中自动生成一个test数据接口,如下图:
图1
二.用Delphi读取Oracle数据的CGI 程序
进入Delphi编程环境,去掉FORM页及其他控件,然后输入以下程序。
program testcgi;
{$apptype console}
uses
SysUtils, DBtables;
var
Table1: TTable;//用于读Oracle数据库数据
Database1: TDatabase;//用于定义Oracle别名及用户名和口令
i,ss,code:integer;
my,cc:string;
begin
writeln ‘CONTENT-TYPE: TEXT/HTML’);//CGI程序要求的数据头信息
writeln;//保留一行空格
my:=paramstr 1);//读入Java传来的信息
Table1:=TTable.Create nil);//创建Table控件
Database1:=TDatabase.Create nil);//创建Database控件
try
Database1.aliasname:=‘test’;//Oracle别名
Database1.databasename:=‘test’;
Database1.Params.Clear;
Database1.Params.add ‘USER NAME=user1’);//用户名
Database1.Params.add ‘PASSWORD=userpassword’);//口令
Database1.loginprompt:=false;
Database1.connected:=true;
Database1.open; //打开数据库通道
Table1.databasename:=‘test’;
Table1.tablename:=‘cbkt’;//Oracle表名
table1.Active := True;
Table1.open;//打开Oracle表
Table1.first;
//计算满足条件井数
i:=0;
while not table1.eof) do
begin
if Table1.FieldByName ‘ny’).asstring=my)
then
begin
write Table1.FieldByName ‘jh’).asstring+‘,’);
val Table1.Fields[2].asstring,ss,code);
if ss>0 then
write ss*100)
else
write ‘0.0’);
write ‘,’);
val Table1.Fields[3].asstring,ss,code);
if ss>0 then
write ss*100)
else
write ‘0.0’);
end;
table1.next
end;
finally
table1.close;
table1.free;
end;
end.
把以上程序编译后拷入服务器的CGI目录。
三.Java部分程序
//test.java
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.applet.*;
public class test extends Applet {
…………
………
……
//调用testcgi.exe实现读入Oracle数据
public boolean action Event evt,Object obj)
{ String s1= String)obj;
if s1=="取数据")
return test_xx "http://10.65.76.64/scripts/testcgi.exe?"+ year.getSelect
edItem ));
return true;
}
public boolean test_xx String post)
{…………
………
try{DataInputStream is;//数据输入流
URL url;//通过网传数据
url=new URL post);
URLConnection connection=url.openConnection );//打开数据流
is=new DataInputStream connection.getInput- Stream ));
String inputline;
mcv.error=null;
if inputline=is.readLine ))==null)//无数据
{mcv.error=new String "无数据可读!!!");
status_field.setText "无数据可读!!!");
mcv.repaint );//画布刷新
return true;
}
status_field.setText "取x,y数据...");
if inputline=is.readLine ))==null)
{mcv.error=new String "无数据可读!!!");
mcv.repaint );//画布刷新
return true;
}
mcv.bktx=new String[10];
mcv.bkty=new String[10];
mcv.bktjh=new String[10];
status_field.setText "取图形数据...");
js=1;//计井数
for i=0;i<10;i++)
{//每行3个字段
inputline=is.readLine );
if inputline==null) {break;}
p1=inputline.indexOf ‘,’);
p2=inputline.lastIndexOf ‘,’);
mcv.bktjh[js]=inputline.substring 0,p1);
mcv.bktx[js]=inputline.substring p1+1,p2).trim );
mcv.bkty[js]=inputline.substring p2+1).trim );
status_field.setText "bktx["+String.valueOf js)+"]"+mcv.bkty[js]);
js=js+1;
}
is.close );
status_field.setText "OK1");
mcv.repaint );
}catch MalformedURLException me){System.err.println "MalformedURLExcepti
on: "+me);}
catch IOException ioe){
System.err.println "IOException: "+ioe);
}catch NumberFormatException e)
{if mcv.error==null)
mcv.error=new String "数据格式出错B!!!"+e);
status_field.setText mcv.error);
mcv.repaint );
}
status_field.setText "数据读完!!!");
return true;
}
}
………………
……………
四、在起始页HTML文件中加入如下程序段<!test.html 1999/11/30>
<HTML>
<HEAD>
……
<BODY>
……
<APPLET CODE="test.class" WIDTH=200
HEIGHT=40></APPLET>
……
</BODY>
……
……
</HTML>
以上程序在IBM 330 Server上调试通过,开发环境Visual J++ 6.0。
|