通過SAS connect drvier for java 來訪問SAS
通過sas share*.net可以在java中使用jdbc來訪問SAS數據集,但是通過這種方式只能訪問SAS數據集,而無法執行SAS的命令,而通過SAS connect drvier for java 則提供了在JAVA中訪問SAS,執行SAS命令的功能,如調用SAS宏
系統請求
服務器端需安裝SAS,有SAS/CONNECT授權
客戶端有JAVA JDK,有如下2個sas 提供的java包
connect.jar
sas.core.jar
開始準備
在服務器上啓動SPAWNER服務器,用來接收客戶端請求,請看我另一篇文章《SAS spawner 使用》,如下命令
spawner -c tcp -security
需要注意的是,當前啓動該進程的用戶必須有以下權限:
作爲操作系統方式運行
增加配額
批作業處理
啓動SAS,確保SPAWNER能夠正常接收用戶請求,如下命令
%let tcpsec=_prompt_;
signon hostname;
signoff hostname;
當前訪問用戶必須具有批作業處理權限,否則不能成功連接
JAVA應用
在java中,通過使用 TelnetConnectClient 類來提交SAS請求,如下代碼
import com.sas.net.connect.*;
import java.util.*;
import java.sql.*;
import java.util.*;
import java.io.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
public class JConnect {
public JConnect() {
}
static public void main(String[] argv){
Properties info = new Properties();
info.setProperty("prompt1", "Username:");//指定訪問的用戶名,該用戶必須具有批作業權限
info.setProperty("response1", "sassrv");
info.setProperty("prompt2", "Password:");
info.setProperty("response2", "sas");
info.setProperty("prompt3", "Hello>");
info.setProperty("response3", "sas");
info.setProperty("sasPortTag", "PORT=");
try {
TelnetConnectClient client=new TelnetConnectClient(info);
client.connect("wuyz",23); //SPAWNER所在主機和端口
int ver1=client.getMajorSasVersion();
int ver2=client.getMinorSasVersion();
String driver=client.getDriverName();
System.out.println(driver);
client.rsubmit("data _null_;put 'ok';run;");
String lines=client.getEditLines();
String logs=client.getLogLines();
System.out.println(client.isConnected()+driver+lines+ver1+ver2+logs);
client.disconnect();
} catch (ConnectException e) {
e.printStackTrace();
}
return;
}