Archive for the ‘library’ Category
-
Hello, Win32 API(C言語) World!
Posted on 4月 13th, 2012 by cx20
Win32 API(C言語)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は C言語 からの呼出し例である。ソースコード
#include <windows.h> #include <tchar.h> int _tmain( int argc, TCHAR* argv[] ) { MessageBox( NULL, _T("Hello, Win32 API World!"), _T("Hello, World!"), MB_OK ); return 0; }
コンパイル方法(Visual C++)
C:¥> cl hello.c /link user32.lib
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(GUI) World!
Posted on 4月 12th, 2012 by cx20
Win32 API(GUI)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
ソースコード
#include <windows.h> #include <tchar.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox( NULL, _T("Hello, Win32 API(GUI) World!"), _T("Hello, World!"), MB_OK ); return 0; }
コンパイル方法(Visual C++)
C:¥> cl hello.c /link user32.lib /SUBSYSTEM:WINDOWS
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API(GUI) World! --------------------------- OK ---------------------------
-
Hello, Win32 API(CUI) World!
Posted on 4月 11th, 2012 by cx20
Win32 API(CUI)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
ソースコード
#include <windows.h> #include <tchar.h> int _tmain( int argc, TCHAR* argv[] ) { HANDLE hStdOutput; DWORD dwSize; TCHAR szBuf[256]; lstrcpy( szBuf, _T("Hello, Win32 API(CUI) World!n") ); hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE ); WriteConsole( hStdOutput, szBuf, lstrlen(szBuf), &dwSize, NULL ); return 0; }
コンパイル方法(Visual C++)
C:¥> cl hello.c /link /SUBSYSTEM:CONSOLE
実行結果
Hello, Win32 API(CUI) World!
-
Hello, JNI World!
Posted on 4月 10th, 2012 by cx20
JNI
JNA(Java Native Interface)は、Java と他の言語のインターフェイス仕様である。
Java から C言語のライブラリの呼び出し、また、C言語から Java のライブラリの呼び出し等が可能である。
ここでは、C言語から Java のライブラリの呼び出しのサンプルを記載する。ソースコード(呼び出す側(C++))
#include <jni.h> int main( int argc, char* argv[] ) { JNIEnv* env; JavaVM* jvm; // Java VM オプション設定 JavaVMOption options[1]; options[0].optionString = "-Xmx128m"; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_6; vm_args.options = options; vm_args.nOptions = 1; // Java VM 作成 JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); // Class 検索 jclass clazz = env->FindClass("Hello"); // Method ID 取得 jmethodID mid = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)V"); // Class メソッド呼び出し env->CallStaticVoidMethod(clazz, mid, NULL); // Java VM 破棄 jvm->DestroyJavaVM(); return 0; }
ソースコード(呼び出される側(Java))
public class Hello { public static void main( String[] args ) { System.out.println( "Hello, JNI World!" ); } }
コンパイル&実行方法
$ javac Hello.java $ c++ -o jnihello jnihello.cpp ¥ -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/ ¥ -framework JavaVM ¥ -m64 $ ./jnihello
実行結果
Hello, JNI World!
-
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, LINQ World!
Posted on 4月 8th, 2012 by cx20
LINQ
LINQ(Language Integrated Query : 統合言語クエリ)は、.NET 言語から DBMS や XML にアクセスする為の汎用クエリ機能である。
LINQ プロバイダとして、以下のようなものがある。LINQ プロバイダ 説明 LINQ to SQL SQL Server LINQ to XML XML ドキュメント LINQ to Dataset ADO.NET データセット LINQ to Objects .NET コレクション、ファイル、文字列など ソースコード(C# + LINQ to Objects)
using System; using System.Linq; using System.Collections.Generic; class Record { public string Message; public Record(string message) { this.Message = message; } } class Hello { static void Main(string[] args) { Record[] records = new Record[] { new Record("Hello, LINQ World!") }; IEnumerable<Record> query = from n in records select n; foreach (Record r in query) { Console.WriteLine(r.Message); } } }
ソースコード(C# + LINQ to SQL)
/** -- <事前準備> -- 1. テーブル作成 CREATE TABLE HELLO ( ID INT NOT NULL, MESSAGE VARCHAR(50) NULL, PRIMARY KEY (ID) ); -- 2. データ投入 INSERT HELLO ( ID, MESSAGE ) VALUES ( 1, 'Hello, LINQ World' ); -- 3. データ表示 SELECT * FROM HELLO; -- ------------------ ID MESSAGE -- ------------------ 1 Hello, LINQ World! -- ------------------ */ using System; using System.Linq; using System.Data.Linq; using System.Data.Linq.Mapping; public class HelloDataContext : DataContext { public HelloDataContext(string connectionString) : base(connectionString) { } public Table<HelloTable> Hello; } [Table(Name = "Hello")] public class HelloTable { [Column(IsPrimaryKey = true)] public int Id; [Column] public string Message; } class Hello { static void Main(string[] args) { string conStr = "SERVER=(local);" + "DATABASE=Hello;" + "UID=sa;" + "PWD=P@ssW0rd"; var db = new HelloDataContext( conStr ); var q = from h in db.Hello select h; foreach (var h in q) { Console.WriteLine(h.Message); } } }
ソースコード(VB.NET + LINQ to SQL)
''' -- <事前準備> ''' -- 1. テーブル作成 ''' CREATE TABLE HELLO ''' ( ''' ID INT NOT NULL, ''' MESSAGE VARCHAR(50) NULL, ''' PRIMARY KEY (ID) ''' ); ''' -- 2. データ投入 ''' INSERT HELLO ( ID, MESSAGE ) VALUES ( 1, 'Hello, LINQ World' ); ''' -- 3. データ表示 ''' SELECT * FROM HELLO; ''' -- ------------------ ''' ID MESSAGE ''' -- ------------------ ''' 1 Hello, LINQ World! ''' -- ------------------ Imports System Imports System.Linq Imports System.Data.Linq Imports System.Data.Linq.Mapping Public Class HelloDataContext Inherits DataContext Public Sub New( ByVal connectionString As String ) MyBase.New(connectionString) End Sub Public Hello As Table( Of HelloTable ) End Class <Table(Name := "Hello")> _ Public Class HelloTable <Column(IsPrimaryKey := True)> _ Public Id As Integer <Column()> _ Public Message As String End Class Class Hello Shared Sub Main() Dim conStr As String = "SERVER=(local);" _ & "DATABASE=Hello;" _ & "UID=sa;" _ & "PWD=P@ssW0rd" Dim db = New HelloDataContext( conStr ) Dim q = from h In db.Hello Select h For Each h In q Console.WriteLine(h.Message) Next End Sub End Class
コンパイル方法(C# + LINQ to Objects)
C:¥> csc Hello.cs
コンパイル方法(C# + LINQ to SQL)
C:¥> csc Hello.cs
コンパイル方法(VB.NET + LINQ to SQL)
C:¥> vbc Hello.vb
実行結果
Hello, LINQ 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!