Archive for 10月 28th, 2012
-
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!