SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 873|回复: 2
打印 上一主题 下一主题

Java访问SAS Metadata和SAS数据的方法

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-10-26 09:38:34 | 只看该作者

Java访问SAS Metadata和SAS数据的方法

[code:04f15]import java.util.*;
import java.sql.*;

public class DataModel {

        private String SASUsername = "username";

        private String SASPassword = "password";

        public Vector getLibraries() {
                Vector libraries = new Vector();
                try {
                        Class.forName("com.sas.rio.MVADriver");
                        Connection conn = DriverManager.getConnection(
                                        "jdbc:sasiom://localhost:8591", SASUsername, SASPassword);
                        Statement stmt = conn.createStatement();
                        DatabaseMetaData meta = conn.getMetaData();
                        ResultSet rs = meta.getSchemas();
                        while (rs.next()) {
                                String library = rs.getString(1);
                                libraries.add(library);
                        }
                        rs.close();
                        stmt.close();
                        conn.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return libraries;
        }

        public Vector getTables(String library) {
                Vector tables = new Vector();
                try {
                        Class.forName("com.sas.rio.MVADriver");
                        Connection conn = DriverManager.getConnection(
                                        "jdbc:sasiom://localhost:8591", SASUsername, SASPassword);
                        Statement stmt = conn.createStatement();
                        DatabaseMetaData meta = conn.getMetaData();
                        ResultSet rs = meta.getTables(null, library, null,
                                        new String[] { "TABLE" });
                        while (rs.next()) {
                                String table = rs.getString(3);
                                tables.add(table);
                        }
                        rs.close();
                        stmt.close();
                        conn.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return tables;
        }

        public Vector getColumns(String library, String table) {
                Vector columns = new Vector();
                try {
                        Class.forName("com.sas.rio.MVADriver");
                        Connection conn = DriverManager.getConnection(
                                        "jdbc:sasiom://localhost:8591", SASUsername, SASPassword);
                        Statement stmt = conn.createStatement();
                        DatabaseMetaData meta = conn.getMetaData();
                        ResultSet rs = meta.getColumns(null, library, table, null);
                        while (rs.next()) {
                                String column = rs.getString(4);
                                columns.add(column);
                        }
                        rs.close();
                        stmt.close();
                        conn.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return columns;
        }

        public Vector getRows(String library, String table) {
                Vector columns = new Vector();
                try {
                        Class.forName("com.sas.rio.MVADriver");
                        Connection conn = DriverManager.getConnection(
                                        "jdbc:sasiom://localhost:8591", SASUsername, SASPassword);
                        Statement stmt = conn.createStatement();
                        DatabaseMetaData meta = conn.getMetaData();
                        ResultSet rs = meta.getColumns(null, library, table, null);
                        while (rs.next()) {
                                String column = rs.getString(4);
                                columns.add(column);
                        }
                        rs.close();
                        stmt.close();
                        conn.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return columns;
        }

        public static void main(String[] args) {
        }

}[/code:04f15]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-11-3 22:03:32 | 只看该作者

hihi

我引用一个更好sample,既可以得到JDBC的connection,又可以得到一个Workspace,两全其美。

[code:5ef24]import java.util.Properties;
import com.sas.iom.SAS.IWorkspace;
import com.sas.iom.SAS.IWorkspaceHelper;
import com.sas.iom.SAS.*;
import com.sas.iom.*;
import com.sas.rio.MVAConnection;

public class CreditServiceImpl implements CreditServiceIF, java.rmi.Remote {
   public double getCreditLimit(java.lang.String custName, java.lang.String custID)
      throws java.rmi.RemoteException {

      /* Here's the place to put some validation code */
      double _retVal = 0;

      /* Define a connection to a SAS IOM server via a iWorkspace object */
      try {
         WorkspaceFactory wsf = new WorkspaceFactory();
         Properties serverInfo = new Properties();
         serverInfo.put("host", "localhost");
         serverInfo.put("port", "5307");
         serverInfo.put("userName", "username");
         serverInfo.put("password", "password");
         IWorkspace iWorkspace = wsf.createWorkspaceByServer(serverInfo);

         /* Use the StoredProcessService to execute the SAS code */
         ILanguageService iLang = iWorkspace.LanguageService();
         IStoredProcessService iSP = iLang.StoredProcessService();
         iSP.Repository("file:c:\\SASRepository");
         iSP.Execute("GetCreditLimit", "custname" + "=" + custName
                    + " custid=" + custID + " outData=work.out");
         
         /* Print out SAS log for debugging.
            Output is in /logs/catalina.out. */
         String log = iLang.FlushLog(50000);
         System.out.println(log);
                                        
         /* Read the result via an MVAConnection */
         IDataService iDataService = iWorkspace.DataService();

         java.sql.Connection connection = new MVAConnection(iDataService,
                                                    new Properties());
         java.sql.Statement statement = connection.createStatement();
         java.sql.ResultSet rs = statement.executeQuery(
                                "Select * from work.out");

         /* Get the credit limit and return it to the calling client */
         if( rs.next() )
         {
            String creditLimit = rs.getString("creditLimit");
            _retVal = Double.parseDouble(creditLimit);
         }
      }
      catch( Throwable t ) {
         t.printStackTrace();
         java.rmi.RemoteException ex =
            new java.rmi.RemoteException("Error getting credit limit", t);
         throw ex;
      }
      finally {
         try{
            /* Close JDBC connection if open */
            if(connection != null)
            {
               if(!connection.isClosed())
                  connection.close();
            }

            /* Close iWorkspace */
            if(iWorkspace != null)
               iWorkspace.Close();

            /* Shutdown WorkspaceFactory */
            if(wsf != null)
               wsf.shutdown();
         } catch(Throwable t) {
            //t.printStackTrace();
         }
      }
      return _retVal;
   }
}[/code:5ef24]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-11-25 00:09:08 | 只看该作者

这么好的贴,我来顶!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 12:03 , Processed in 0.071656 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表