2005年6月11日

わかってるような、わかってないような駆け足学習。

学校で習っているのはJavaのはず。
しかし連日自宅でいじっているのは、Java以外。
これいかに?(小首をかしげる)

なにはともあれ、久々にJavaへなちょこメモです(^^;

もっといろんなパターンで自習しないと、
全体的に感覚が肌に染みてこないので
今は独語で言うなら wissen(知ってる)程度。
決して、beherrschen(マスターした)とか
kennen、erfahren(体験して知っている)ではないと思う。(キッパリ)

おまけ。

JavaのGUIをXMLから生成する gui4j 1.1公開
面白そうだよぉう。いじりたいけど、他にやる事いっぱいだー。

・コレクション・フレームワーク

どう言ったらいいのか、わからんです(笑)
とりあえず、perl野郎あに山としては、
「コレクションて、配列とかハッシュみたいな感じで
値の集合体(?)みたいな型っぽいなぁ」と
自信なさげにボンヤリ思ってます(汗)

じゃばじゃばさん所に詳しい解説があるです。

・ArrayList
で、配列みたいなヤツ。

ArrayList list = new ArrayList();
list.add( "aaa" );
System.out.println( list.get( 0 ) ); // aaa と表示

→perlなら
my @list = ();
push @list, "aaa";
print $list[0]; # aaa と表示

→PHPなら
$list = array();
array_push( $list, "aaa" );
echo $list[0]; // aaa と表示


・HashMap
そして、ハッシュみたいなヤツ。

HashMap hash = new HashMap();
hash.put( "a", "aaa" );
System.out.printlin( hash ); // {a=aaa} と表示

→perlなら
my %hash = ();
$hash = ( a => "aaa" );
print join "=", each %hash; # a=aaa と表示

→PHPなら
$hash = array( "a" => "aaa" );
list( $key, $value ) = each( $hash );
echo "${key}=${value}"; // a=aaa と表示

・サーブレット
簡単に言うと、webアプリケーション用のJava。
MVCで言うなら、Cにあたるものらしい。
必ず HttpServletクラスを継承しないといけないらしい。

Javaアプリケーションでは、main()が最初の実行メソッドだったけど
サーブレットでは、doGet と doPost などが起点になるらしい。
(本当はその前に service() が実行されているけど)

例えば、
<form method="get"> で送られた値には doGet が対応し、
<form method="post"> で送られた値には doPost が対応する。

ついで。
perlでのformの受け取り方
PHPでのformの受け取り方

・JSP
簡単に言うと、これまたwebアプリケーション用のJava。
MVCで言うなら、Vにあたるものらしい。
HTMLソースん中に、スクリプトを書けちゃうんで、
まるでPHPのような作りです。

<%! うんぬん %> スクリプト宣言 - 変数の宣言とかするところ、でもあんま使わない
<%@ うんぬん %> ディレクティブタグ - JSP独特の命令
<% うんぬん %> スクリプトレット - Javaのソースを書くところ
<%= うんぬん %> スクリプト式 - 値や式を表示させるところ
<%-- うんぬん --%> スクリプト式 - 値や式を表示させるところ
普通のHTMLとか書いてある部分 テンプレート - Javaと関係ないところ

ところで、これを習った後で
PHPいじってたら、PHPにもスクリプト式と同じ書き方がある事を発見。
<?= $変数 ?>
こう書けば、<? echo $変数 ?> と同じ意味になるそうな。
知らなかったような、単に忘れただけなような(笑)


・Tomcat
とりあえず、サーブレットやらJSPを扱える
Apache のようなもの。
Tomcat だけで使ってもいいけど、Apacheと連動する手もあるらしい。
JavaでHello World さんの所を参考にするといいかと。


・話を戻して、JavaアプリケーションでDBへの接続
当たり前だけど、perlやPHPとやってる事は同じ。
ただ、DB接続時のハンドルは違和感ないんだけど、
DBへのSQL送信用のオブジェクト(Statement)や、
DBからの応答をキャッチするオブジェクト(ResultSet)を
用意しないとアカンのが、ちょっと手間かかるなーという感想。

あ、import java.sql.*; を書くのを忘れずに。

MySQLの場合

public static void main(String[] args) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:MySQL://localhost:3306/DB名";
String user = "ユーザー名";
String pass = "パスワード";
Connection con = null;
Statement st = null;
ResultSet rs = null;

try {
Class.forName( driver );
} catch ( Exception e ) {
e.printStackTrace();
}

try {
con = DriverManager.getConnection( url, user, pass );
st = con.createStatement();
String sql = "select * from テーブル名";
rs = st.executeQuery( sql );

while ( rs.next() ) {
String data = rs.getString( "項目名" );
System.out.println( data );
}
} catch( SQLException e ) {
e.printStackTrace();
} catch( Exception e ) {
e.printStackTrace();
} finally {
try { rs.close(); } catch( Exception e ) {}
try { st.close(); } catch( Exception e ) {}
try { con.close(); } catch( Exception e ) {}
}

PostgreSQLの場合


public static void main(String[] args) {
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost:5432/DB名";
String user = "ユーザー名";
String pass = "パスワード";
Connection con = null;
Statement st = null;
ResultSet rs = null;

try {
Class.forName( driver );
} catch ( Exception e ) {
e.printStackTrace();
}

try {
con = DriverManager.getConnection( url, user, pass );
st = con.createStatement();
String sql = "select * from テーブル名";
rs = st.executeQuery( sql );

while ( rs.next() ) {
String data = rs.getString( "項目名" );
System.out.println( data );
}
} catch( SQLException e ) {
e.printStackTrace();
} catch( Exception e ) {
e.printStackTrace();
} finally {
try { rs.close(); } catch( Exception e ) {}
try { st.close(); } catch( Exception e ) {}
try { con.close(); } catch( Exception e ) {}
}

}

Posted by anigon at 01:18 AM

「coLinuxで鬼門とかなんとかネットワーク。」へ戻る | 「双葉くん。」へ進む

上へ戻る