ONLY DO WHAT ONLY YOU CAN DO

こけたら立ちなはれ 立ったら歩きなはれ

Java で ADO

import com.jacob.com.*;
import com.jacob.activeX.*;

public class Lesson002
{
    public static void main(String[] args) {
        ActiveXComponent cn = new ActiveXComponent("ADODB.Connection");
        try {
            Dispatch.call(cn ,"Open", "xxxx", "yyyy", "zzzz");

            StringBuffer sb = new StringBuffer();
            sb.append("select\n");
            sb.append("    A.TABLESPACE_NAME\n");
            sb.append(",   A.TABLE_NAME\n");
            sb.append(",   C.COMMENTS         TABLE_COMMENTS\n");
            sb.append(",   B.COLUMN_ID\n");
            sb.append(",   B.COLUMN_NAME\n");
            sb.append(",   D.COMMENTS         COLUMN_COMMENTS  \n");
            sb.append(",   B.DATA_TYPE\n");
            sb.append(",   B.DATA_LENGTH\n");
            sb.append(",   B.DATA_PRECISION\n");
            sb.append(",   B.DATA_SCALE\n");
            sb.append(",   B.NULLABLE\n");
            sb.append("from\n");
            sb.append("    USER_ALL_TABLES     A\n");
            sb.append("left join\n");
            sb.append("    USER_TAB_COMMENTS   C\n");
            sb.append("on\n");
            sb.append("    C.TABLE_NAME      = A.TABLE_NAME\n");
            sb.append("inner join\n");
            sb.append("    USER_TAB_COLUMNS    B\n");
            sb.append("on  \n");
            sb.append("    B.TABLE_NAME      = A.TABLE_NAME\n");
            sb.append("left join\n");
            sb.append("    USER_COL_COMMENTS   D\n");
            sb.append("on\n");
            sb.append("        D.TABLE_NAME  = B.TABLE_NAME\n");
            sb.append("    and D.COLUMN_NAME = B.COLUMN_NAME\n");
            sb.append("order by\n");
            sb.append("    A.TABLE_NAME\n");
            sb.append(",   B.COLUMN_ID\n");

            ActiveXComponent rs = new ActiveXComponent("ADODB.Recordset");
            Dispatch.put(rs, "Source", sb.toString());
            Dispatch.put(rs, "ActiveConnection", cn);
            Dispatch.put(rs, "CursorType", 0); // 0:adOpenForwardOnly
            Dispatch.put(rs, "LockType"  , 1); // 1:adLockReadOnly
            Dispatch.call(rs ,"Open");
            String t   = "true";
            String eof = Dispatch.get(rs, "EOF").toString();

            while (!eof.equals(t)) {
                Dispatch fields = Dispatch.get(rs, "Fields").toDispatch();
                int count = Integer.parseInt(Dispatch.get(fields, "Count").toString());
                for (int i=0;i<count;i++) {
                    Dispatch fd = Dispatch.call(fields, "Item", i).toDispatch();
                    System.out.print(Dispatch.call(fd, "Value").toString());
                    System.out.print('\t');
                }
                System.out.println();

                Dispatch.call(rs, "MoveNext");
                eof = Dispatch.get(rs, "EOF").toString();
            }
            Dispatch.call(rs ,"Close");
            Dispatch.call(cn ,"Close");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ComThread.Release();
        }
    }
}