Archive for 10月 28th, 2012

  1. Hello, JDBC Type1(Jasmin) World!

    Posted on 10月 28th, 2012 by cx20

    JDBC Type1

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type1 は JDBC と ODBC の API をマップさせたブリッジドライバである。
    以下は Jasmin による JDBC ライブラリの使用例となっている。

    ソースコード(Jasmin + JDBC Type1 + ODBC + Jet データベース)

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Tue Oct 16 02:25:36 JST 2012
     
    .bytecode 50.0
    .source Hello.java
    .class  Hello
    .super java/lang/Object
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is arg0 [Ljava/lang/String; from Label2 to Label3
     
        Label2:
    .line 7
           0: ldc "sun.jdbc.odbc.JdbcOdbcDriver"
           2: invokestatic java/lang/Class/forName(Ljava/lang/String;)Ljava/lang/Class;
           5: pop
     
        .line 9
           6: ldc "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"
           8: ldc ""
          10: ldc ""
          12: invokestatic java/sql/DriverManager/getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
          15: astore_1
     
        .line 10
          16: aload_1
          17: invokeinterface java/sql/Connection/createStatement()Ljava/sql/Statement; 1
          22: astore_2
     
        .line 11
          23: aload_2
          24: ldc "SELECT 'Hello, JDBC Type1 World!' AS Message"
          26: invokeinterface java/sql/Statement/executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; 2
          31: astore_3
     
        Label1:
    .line 12
          32: aload_3
          33: invokeinterface java/sql/ResultSet/next()Z 1
          38: ifeq Label0
     
        .line 13
          41: getstatic java.lang.System.out Ljava/io/PrintStream;
          44: aload_3
          45: iconst_1
          46: invokeinterface java/sql/ResultSet/getString(I)Ljava/lang/String; 2
          51: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
          54: goto Label1
     
        Label0:
    .line 15
          57: aload_3
          58: invokeinterface java/sql/ResultSet/close()V 1
     
        .line 16
          63: aload_2
          64: invokeinterface java/sql/Statement/close()V 1
     
        .line 17
          69: aload_1
          70: invokeinterface java/sql/Connection/close()V 1
     
        Label3:
    .line 18
          75: return
     
        .throws java/lang/Exception
    .end method

    ソースコード(Jasmin + JDBC Type1 + ODBC + ACE データベース)

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Tue Oct 16 02:25:49 JST 2012
     
    .bytecode 50.0
    .source Hello.java
    .class  Hello
    .super java/lang/Object
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is arg0 [Ljava/lang/String; from Label2 to Label3
     
        Label2:
    .line 7
           0: ldc "sun.jdbc.odbc.JdbcOdbcDriver"
           2: invokestatic java/lang/Class/forName(Ljava/lang/String;)Ljava/lang/Class;
           5: pop
     
        .line 11
           6: ldc "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb"
           8: ldc ""
          10: ldc ""
          12: invokestatic java/sql/DriverManager/getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
          15: astore_1
     
        .line 13
          16: aload_1
          17: invokeinterface java/sql/Connection/createStatement()Ljava/sql/Statement; 1
          22: astore_2
     
        .line 14
          23: aload_2
          24: ldc "SELECT 'Hello, JDBC Type1 World!' AS Message"
          26: invokeinterface java/sql/Statement/executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; 2
          31: astore_3
     
        Label1:
    .line 15
          32: aload_3
          33: invokeinterface java/sql/ResultSet/next()Z 1
          38: ifeq Label0
     
        .line 16
          41: getstatic java.lang.System.out Ljava/io/PrintStream;
          44: aload_3
          45: iconst_1
          46: invokeinterface java/sql/ResultSet/getString(I)Ljava/lang/String; 2
          51: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
          54: goto Label1
     
        Label0:
    .line 18
          57: aload_3
          58: invokeinterface java/sql/ResultSet/close()V 1
     
        .line 19
          63: aload_2
          64: invokeinterface java/sql/Statement/close()V 1
     
        .line 20
          69: aload_1
          70: invokeinterface java/sql/Connection/close()V 1
     
        Label3:
    .line 21
          75: return
     
        .throws java/lang/Exception
    .end method

    ソースコード(Jasmin + JDBC Type1 + ODBC + SQL Server)

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Tue Oct 16 02:08:35 JST 2012
     
    .bytecode 50.0
    .source Hello.java
    .class  Hello
    .super java/lang/Object
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is arg0 [Ljava/lang/String; from Label2 to Label3
     
        Label2:
    .line 8
           0: ldc "sun.jdbc.odbc.JdbcOdbcDriver"
           2: invokestatic java/lang/Class/forName(Ljava/lang/String;)Ljava/lang/Class;
           5: pop
     
        .line 11
           6: ldc "jdbc:odbc:Driver={SQL Server};SERVER=(local)"
           8: ldc "sa"
          10: ldc "P@ssW0rd"
          12: invokestatic java/sql/DriverManager/getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
          15: astore_1
     
        .line 13
          16: aload_1
          17: invokeinterface java/sql/Connection/createStatement()Ljava/sql/Statement; 1
          22: astore_2
     
        .line 14
          23: aload_2
          24: ldc "SELECT 'Hello, JDBC Type1 World!' AS Message"
          26: invokeinterface java/sql/Statement/executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; 2
          31: astore_3
     
        Label1:
    .line 15
          32: aload_3
          33: invokeinterface java/sql/ResultSet/next()Z 1
          38: ifeq Label0
     
        .line 16
          41: getstatic java.lang.System.out Ljava/io/PrintStream;
          44: aload_3
          45: iconst_1
          46: invokeinterface java/sql/ResultSet/getString(I)Ljava/lang/String; 2
          51: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
          54: goto Label1
     
        Label0:
    .line 18
          57: aload_3
          58: invokeinterface java/sql/ResultSet/close()V 1
     
        .line 19
          63: aload_2
          64: invokeinterface java/sql/Statement/close()V 1
     
        .line 20
          69: aload_1
          70: invokeinterface java/sql/Connection/close()V 1
     
        Label3:
    .line 21
          75: return
     
        .throws java/lang/Exception
    .end method

    ソースコード(Jasmin + JDBC Type1 + ODBC + Oracle)

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Tue Oct 16 02:41:22 JST 2012
     
    .bytecode 50.0
    .source Hello.java
    .class  Hello
    .super java/lang/Object
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is arg0 [Ljava/lang/String; from Label2 to Label3
     
        Label2:
    .line 7
           0: ldc "sun.jdbc.odbc.JdbcOdbcDriver"
           2: invokestatic java/lang/Class/forName(Ljava/lang/String;)Ljava/lang/Class;
           5: pop
     
        .line 8
           6: ldc "jdbc:odbc:Driver={Oracle in OraDb11g_home1};DBQ=ORCL"
           8: ldc "scott"
          10: ldc "tiger"
          12: invokestatic java/sql/DriverManager/getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
          15: astore_1
     
        .line 9
          16: aload_1
          17: invokeinterface java/sql/Connection/createStatement()Ljava/sql/Statement; 1
          22: astore_2
     
        .line 10
          23: aload_2
          24: ldc "SELECT 'Hello, JDBC Type1 World!' AS Message FROM DUAL"
          26: invokeinterface java/sql/Statement/executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; 2
          31: astore_3
     
        Label1:
    .line 11
          32: aload_3
          33: invokeinterface java/sql/ResultSet/next()Z 1
          38: ifeq Label0
     
        .line 12
          41: getstatic java.lang.System.out Ljava/io/PrintStream;
          44: aload_3
          45: iconst_1
          46: invokeinterface java/sql/ResultSet/getString(I)Ljava/lang/String; 2
          51: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
          54: goto Label1
     
        Label0:
    .line 14
          57: aload_3
          58: invokeinterface java/sql/ResultSet/close()V 1
     
        .line 15
          63: aload_2
          64: invokeinterface java/sql/Statement/close()V 1
     
        .line 16
          69: aload_1
          70: invokeinterface java/sql/Connection/close()V 1
     
        Label3:
    .line 17
          75: return
     
        .throws java/lang/Exception
    .end method

    ソースコード(Jasmin + JDBC Type1 + ODBC + MySQL)

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Tue Oct 16 02:26:06 JST 2012
     
    .bytecode 50.0
    .source Hello.java
    .class  Hello
    .super java/lang/Object
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 4
           0: aload_0
           1: invokespecial java/lang/Object/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is arg0 [Ljava/lang/String; from Label2 to Label3
     
        Label2:
    .line 7
           0: ldc "sun.jdbc.odbc.JdbcOdbcDriver"
           2: invokestatic java/lang/Class/forName(Ljava/lang/String;)Ljava/lang/Class;
           5: pop
     
        .line 8
           6: ldc "jdbc:odbc:Driver={MySQL ODBC 5.1 Driver};Server=localhost"
           8: ldc "root"
          10: ldc "P@ssW0rd"
          12: invokestatic java/sql/DriverManager/getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
          15: astore_1
     
        .line 9
          16: aload_1
          17: invokeinterface java/sql/Connection/createStatement()Ljava/sql/Statement; 1
          22: astore_2
     
        .line 10
          23: aload_2
          24: ldc "SELECT 'Hello, JDBC Type1 World!' AS Message"
          26: invokeinterface java/sql/Statement/executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; 2
          31: astore_3
     
        Label1:
    .line 11
          32: aload_3
          33: invokeinterface java/sql/ResultSet/next()Z 1
          38: ifeq Label0
     
        .line 12
          41: getstatic java.lang.System.out Ljava/io/PrintStream;
          44: aload_3
          45: iconst_1
          46: invokeinterface java/sql/ResultSet/getString(I)Ljava/lang/String; 2
          51: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
          54: goto Label1
     
        Label0:
    .line 14
          57: aload_3
          58: invokeinterface java/sql/ResultSet/close()V 1
     
        .line 15
          63: aload_2
          64: invokeinterface java/sql/Statement/close()V 1
     
        .line 16
          69: aload_1
          70: invokeinterface java/sql/Connection/close()V 1
     
        Label3:
    .line 17
          75: return
     
        .throws java/lang/Exception
    .end method

    実行方法

    C:¥> java -jar jasmin.jar Hello.j
    C:¥> java -jar Hello

    実行結果

    Hello, JDBC Type1 World!