Archive for the ‘Java’ Category
-
Hello, JNA World!
Posted on 4月 9th, 2012 by cx20
JNA
JNA(Java Native Access)は、Java から C言語などの共有ライブラリにアクセスするライブラリである。
ソースコード
import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public class Hello { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary(Platform.isWindows() ? "msvcrt" : "c", CLibrary.class); void printf(String format, Object... args); } public static void main(String[] args) { CLibrary c = CLibrary.INSTANCE; c.printf("Hello, JNA World!n"); } }
コンパイル&実行方法
$ javac -cp jna.jar:platform.jar:. Hello.java $ java -cp jna.jar:platform.jar:. Hello
実行結果
Hello, JNA World!
-
Hello, SQLJ World!
Posted on 4月 7th, 2012 by cx20
SQLJ
SQLJ は Oracle Database に対応した Java 用の埋め込み SQL(Embedded SQL)である。類似の製品としては、Pro*C/C++、Pro*COBOL、Pro*FORTRAN、Pro*Pascal 等がある。
なお、埋め込み SQL 自体は、標準SQL として ANSI/ISO にて仕様が策定されている。ソースコード(SQLJ)
import java.sql.*; import oracle.sqlj.runtime.Oracle; #sql iterator MessageIter ( String MESSAGE ); class Hello { public static void main( String[] args ) throws Exception { Oracle.connect("jdbc:oracle:oci:@", "scott", "tiger"); MessageIter iter; #sql iter = { SELECT 'Hello, SQLJ World!' AS Message FROM DUAL }; while ( iter.next() ) { System.out.println( iter.MESSAGE() ); } } }
上記コードは、SQLJ トランスレータ により、以下の Java のコードが生成される。
ソースコード(Java)
/*@lineinfo:filename=Hello*//*@lineinfo:user-code*//*@lineinfo:1^1*/import java.sql.*; import oracle.sqlj.runtime.Oracle; /*@lineinfo:generated-code*//*@lineinfo:4^1*/ // ************************************************************ // SQLJ iterator declaration: // ************************************************************ class MessageIter extends sqlj.runtime.ref.ResultSetIterImpl implements sqlj.runtime.NamedIterator { public MessageIter(sqlj.runtime.profile.RTResultSet resultSet) throws java.sql.SQLException { super(resultSet); MESSAGENdx = findColumn("MESSAGE"); m_rs = (oracle.jdbc.OracleResultSet) resultSet.getJDBCResultSet(); } private oracle.jdbc.OracleResultSet m_rs; public String MESSAGE() throws java.sql.SQLException { return (String)m_rs.getString(MESSAGENdx); } private int MESSAGENdx; } // ************************************************************ /*@lineinfo:user-code*//*@lineinfo:4^44*/ class Hello { public static void main( String[] args ) throws Exception { Oracle.connect("jdbc:oracle:oci:@", "scott", "tiger"); MessageIter iter; /*@lineinfo:generated-code*//*@lineinfo:10^9*/ // ************************************************************ // #sql iter = { SELECT 'Hello, SQLJ World!' AS Message FROM DUAL }; // ************************************************************ { // declare temps oracle.jdbc.OraclePreparedStatement __sJT_st = null; sqlj.runtime.ref.DefaultContext __sJT_cc = sqlj.runtime.ref.DefaultContext.getDefaultContext(); if (__sJT_cc==null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_CONN_CTX(); sqlj.runtime.ExecutionContext.OracleContext __sJT_ec = ((__sJT_cc.getExecutionContext()==null) ? sqlj.runtime.ExecutionContext.raiseNullExecCtx() : __sJT_cc.getExecutionContext().getOracleContext()); try { String theSqlTS = "SELECT 'Hello, SQLJ World!' AS Message FROM DUAL"; __sJT_st = __sJT_ec.prepareOracleStatement(__sJT_cc,"0MessageIter",theSqlTS); // execute query iter = new MessageIter(new sqlj.runtime.ref.OraRTResultSet(__sJT_ec.oracleExecuteQuery(),__sJT_st,"0MessageIter",null)); } finally { __sJT_ec.oracleCloseQuery(); } } // ************************************************************ /*@lineinfo:user-code*//*@lineinfo:10^72*/ while ( iter.next() ) { System.out.println( iter.MESSAGE() ); } } }/*@lineinfo:generated-code*/
コンパイル&実行方法
C:¥> SET PATH=ORACLE_BASEORACLE_HOMEbin;%PATH% C:¥> SET CLASSPATH=ORACLE_BASEORACLE_HOMEsqljlibruntime12.jar; ORACLE_BASEORACLE_HOMEsqljlibtranslator.jar; ORACLE_BASEORACLE_HOMEjdbclibojdbc6.jar;%CLASSPATH% C:¥> sqlj Hello.sqlj C:¥> java Hello実行結果
Hello, SQLJ World!
-
Hello, JDBC Type4 World!
Posted on 4月 6th, 2012 by cx20
JDBC Type4
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type4 は DBMS のクライアントライブラリを使用しない Pure Java の DBMS ドライバである。ソースコード(Java + JDBC Type4 + SQL Server)
import java.sql.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection("jdbc:sqlserver://;serverName=localhost", "sa", "P@ssW0rd"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
コンパイル&実行方法(Java + JDBC Type4 + SQL Server)
C:¥> javac Hello.java C:¥> java -cp "sqljdbc4.jar;." Hello
ソースコード(Java + JDBC Type4 + Oracle)
import java.sql.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName ("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
コンパイル&実行方法(Java + JDBC Type4 + Oracle)
C:¥> javac Hello.java C:¥> java -cp "ojdbc6.jar;." Hello
ソースコード(Java + JDBC Type4 + MySQL)
import java.sql.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName ("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "P@ssW0rd"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
コンパイル&実行方法(Java + JDBC Type4 + MySQL)
C:¥> javac Hello.java C:¥> java -cp "mysql-connector-java-5.1.22-bin.jar;." Hello
実行結果
Hello, JDBC Type4 World!
-
Hello, JDBC Type2 World!
Posted on 4月 5th, 2012 by cx20
JDBC Type2
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type2 は JDBC と DBMS クライアントの API をマップさせたブリッジドライバである。
例えば、Oracle であればクライアントライブラリとして OCI が使用される。
ソースコード(Java + JDBC Type2 + Oracle)
import java.sql.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@orcl", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type2 World!' AS Message FROM DUAL"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
コンパイル&実行方法
C:¥> javac Hello.java C:¥> java -cp "ojdbc6.jar;." Hello
実行結果
Hello, JDBC Type2 World!
-
Hello, JDBC Type1 World!
Posted on 4月 4th, 2012 by cx20
JDBC Type1
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type1 は JDBC と ODBC の API をマップさせたブリッジドライバである。ソースコード(Java + JDBC Type1 + ODBC + Jet データベース)
import java.sql.*; import sun.jdbc.odbc.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBC DSN を使用したケース Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "", ""); // ODBC 接続文字列を使用したケース //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=.\hello.mdb", "", ""); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
ソースコード(Java + JDBC Type1 + ODBC + ACE データベース)
import java.sql.*; import sun.jdbc.odbc.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBC DSN を使用したケース Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "", ""); // ODBC 接続文字列を使用したケース //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb", "", ""); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
ソースコード(Java + JDBC Type1 + ODBC + SQL Server)
import java.sql.*; import sun.jdbc.odbc.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBC DSN を使用したケース Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "sa", "P@ssW0rd"); // ODBC 接続文字列を使用したケース //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};SERVER=(local)", "sa", "P@ssW0rd"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
ソースコード(Java + JDBC Type1 + ODBC + Oracle)
import java.sql.*; import sun.jdbc.odbc.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBC DSN を使用したケース Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "scott", "tiger"); // ODBC 接続文字列を使用したケース1(MS 製 ODBC ドライバ) //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft ODBC for Oracle};Data Source=ORCL", "scott", "tiger"); // ODBC 接続文字列を使用したケース2(Oracle 製 ODBC ドライバ) //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Oracle in OraDb11g_home1};DBQ=ORCL", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message FROM DUAL"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
ソースコード(Java + JDBC Type1 + ODBC + MySQL)
import java.sql.*; import sun.jdbc.odbc.*; class Hello { public static void main( String[] args ) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBC DSN を使用したケース Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "root", "P@ssW0rd"); // ODBC 接続文字列を使用したケース //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={MySQL ODBC 5.1 Driver};Server=localhost", "root", "P@ssW0rd"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message"); while ( rs.next() ) { System.out.println( rs.getString(1) ); } rs.close(); stmt.close(); conn.close(); } }
コンパイル&実行方法
C:¥> javac Hello.java C:¥> java Hello
実行結果
Hello, JDBC Type1 World!
-
Hello, Derby World!
Posted on 3月 16th, 2012 by cx20
Derby
Apache Derby は Java で実装された RDBMS である。「derby」は英語で競馬の意味。
現在、JDK に Java DB として組み込まれている。
ソースコード
設定ファイル
ij.connection.hello=jdbc:derby://localhost/hello;create=true ij.user=sa ij.password=P@ssw0rd
実行方法
$ ij -p derby.properties hello.sql
実行結果
MESSAGE ------------------- Hello, Derby World! 1 行が選択されました
-
Hello, H2 Database World!
Posted on 3月 15th, 2012 by cx20
H2 Database
H2 Database は速さに定評のある Java 製の DBMS である。組み込みモードとサーバーモードがある。名前の由来は「Hypersonic2」から。
ソースコード
実行方法
$ java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:~/hello" -script "hello.sql" -showResults
実行結果
SELECT 'Hello, H2 Database World!' AS Message; --> Hello, H2 Database World! ;
-
Hello, HSQLDB World!
Posted on 3月 14th, 2012 by cx20
HSQLDB
HSQLDB(HyperSQL Database Engine)は Java 製の RDBMS である。インメモリモード、スタンドアローンモード、サーバーモードなどがある。
OpenOffice.org の Base(データベースソフト)のデータベースエンジンとしても採用されている。
ソースコード
実行方法
$ java -jar sqltool.jar --inlineRc url=jdbc:hsqldb:mem:memdbid,user=SA,password= hello.sql
実行結果
Hello, HSQLDB World!
-
Hello, Java Applet World!
Posted on 2月 28th, 2012 by cx20
Java Applet
Java Applet は Java プログラムの実行形態の1つである。ブラウザ上で動作する。「〜let」は小さいという意味。
ソースコード(Java)
import javax.swing.*; public class HelloApplet extends JApplet { public void init() { JLabel label = new JLabel("Hello, Java Applet World!"); getContentPane().add(label); } }
ソースコード(HTML)
<html> <head> <title>Hello, World!</title> </head> <body> <applet code="HelloApplet.class" height="100" width="200"></applet> </body> </html>
実行方法(AppletViewer による表示)
$ appletviewer ./hello.html
実行方法(ブラウザによる表示)
1. Web サーバの公開フォルダ に配置 2. ブラウザで表示 http://localhost/doc/hello.html
実行結果
Hello, Java Applet World!
-
Hello, Velocity World!
Posted on 2月 19th, 2012 by cx20
Velocity
Velocity は Java 用のテンプレートエンジンである。英語で「速さ」を意味する。
テンプレートファイルは VTL(Velocity Template Language)と呼ばれるテンプレート言語が用いられる。ソースコード(テンプレート)
<html> <head> <title>Hello, World!</title> </head> <body> <p>Hello, $message World!</p> </body> </html>ソースコード(Java)
import org.apache.velocity.Template; import org.apache.velocity.servlet.VelocityServlet; import org.apache.velocity.app.Velocity; import org.apache.velocity.context.Context; import javax.servlet.http.*; public class Hello extends VelocityServlet { public Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context context ) { Template template = null; try { context.put("message", "Velocity"); template = Velocity.getTemplate("hello.vm"); } catch( Exception e ) { System.err.println("Exception: " + e.getMessage()); } return template; } }
実行方法
ディレクトリ構成 /hello … 公開用フォルダ /WEB-INF … アプリケーション設定ファイル配置場所 /classes … クラスファイル配置場所 /templates … テンプレート配置場所 1. モジュールのコンパイル javac -cp $CATALINA_HOME/lib/velocity-1.7.jar:$CATALINA_HOME/lib/servlet-api.jar:. Hello.java 2. モジュールの配置 WEB-INF/classes 3. テンプレートの配置 WEB-INF/templates 4. WEB-INF/velocity.properties の記載resource.loader = file file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader file.resource.loader.path = /usr/local/tomcat/current/webapps/hello/WEB-INF/templates file.resource.loader.cache = true file.resource.loader.modificationCheckInterval = 2
5. WEB-INF/web.xml の記載
<?xml version="1.0"?> <web-app> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>Hello</servlet-class> <init-param> <param-name>properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/servlet/Hello</url-pattern> </servlet-mapping> </web-app>
6. ブラウザで表示 http://localhost:8080/hello/servlet/Hello
実行結果
Hello, Velocity World!