SAS中文论坛

标题: Java访问SAS Metadata和SAS数据的方法 [打印本页]

作者: shiyiming    时间: 2005-10-26 09:38
标题: 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]
作者: shiyiming    时间: 2005-11-3 22:03
标题: 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]
作者: shiyiming    时间: 2005-11-25 00:09
标题:
这么好的贴,我来顶!




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2