2011年05月02日

Javaの参照渡し


最近まで知らなかったのですがJavaは、
・値渡ししか存在しない。
・参照と言った場合には、ポインタを表す。
・参照型の変数にはポインタが格納される。
・参照型のオブジェクトをメソッドに渡した場合、ポインタが渡される。
らしいです。

■参考情報
参照渡し
http://wisdom.sakura.ne.jp/programming/java/java23.html
[Program][Java][C++][C#]値渡しと参照渡し (と参照の値渡し)
http://d.hatena.ne.jp/bleis-tift/20090603/1244031097

■サンプルのソースコード

public class HelloWorld {
String name;
int age;

public static void main(String args[]) {
String [] array = { "Gosu","Java","PHP","Ruby" };

method1(array);
System.out.println(array[0]); // => Gosu

method2(array);
System.out.println(array[0]); // => BigTable

Hoge hoge = new Hoge();

method3(hoge);
System.out.println(hoge.s); // => null

method4(hoge);
System.out.println(hoge.s); // => Key-Valueストア

HelloWorld hello = new HelloWorld();
hello.name = "Richard";
hello.age = 30;

ref1(hello.name, hello.age);
System.out.println(hello.name + ":" + hello.age); // => Richard:30

ref2(hello, "gur", 35);
System.out.println(hello.name + ":" + hello.age); // => gur:35

}

// Java には値渡ししかないため、
// 引数に直接代入しても呼出し元には影響しない
static void method1(String[] a) {
String[] other = { "ダメ","ナゾ","ムリ","ビミョー" };
a = other;
}

// 参照を値渡ししているため、
// その参照(ポインタ)が指す先は変更できる
static void method2(String[] a) {
a[0] = "BigTable";
}

// 呼出し元には影響しない
static void method3(Hoge h) {
Hoge other = new Hoge();
other.s = "GAE";
h = other;
}

// 参照を値渡ししているため、
// その参照(ポインタ)が指す先は変更できる
static void method4(Hoge h) {
h.s = "Key-Valueストア";
}

// 呼出し元には影響しない
static void ref1(String name , int age) {
name = "murio";
age = 32;
}

// 参照を値渡ししているため、
// その参照(ポインタ)が指す先は変更できる
static void ref2(HelloWorld obj , String name , int age) {
obj.name = name;
obj.age = age;
}
}
final class Hoge {
String s;
}
posted by rururu at 01:32| Comment(0) | TrackBack(0) | Java

2010年01月20日

Javaの勉強(5)



繰り返し(for, while, do-while, 拡張for)、繰り返しの制御(break, continue)について

―――――――――――――――――――――――――――――
■for
―――――――――――――――――――――――――――――
[文法]
for (初期化式;条件式;更新式) {
// 繰り返したい処理
}
[forの動き]
// 1、int i = 0
// 2、i++ (++iにしてもforでは同じ動作)
// 3、i < 10 (trueでなくなったら繰り返しを抜ける)
for (int i = 0; i < 10; i++) {
// 条件式がtrueの間、繰り返す
System.out.println(i);
}
[例]
public class ForTest {
public static void main(String args[]) {
int keisan = 0;
for(int i = 1; i <= 9; i++) {
for(int j = 1;j <= 9; j++) {
keisan = i * j;
if(1 >= keisan || keisan <= 9) {
System.out.print(" " + keisan);
} else {
System.out.print(" " + keisan);
}
}
System.out.println("");
}
}
}

―――――――――――――――――――――――――――――
■while
―――――――――――――――――――――――――――――
[文法]
while (条件式) {
// 処理
// 条件式がtrueの間、繰り返す
}
[例]
public class WhileTest {
public static void main(String args[]) {
int i = 1, j = 1, keisan = 0;
while (i <= 9) {
j = 1;
while (j <= 9) {
keisan = i * j;
if (1 >= keisan || keisan <= 9) {
System.out.print(" " + keisan);
} else {
System.out.print(" " + keisan);
}
j++;
}
System.out.println("");
i++;
}
}
}

―――――――――――――――――――――――――――――
■do-while
―――――――――――――――――――――――――――――
[文法]
do-while文は条件式の評価がループの最後に行われる為、
最初の1回が必ず実行されます。

do {
// 処理
} while (条件式);
[例]
public class DoWhileTest3 {
public static void main(String args[]) {
int i = 1, j = 1, keisan = 0;
do {
j = 1;
do {
keisan = i * j;
if (1 >= keisan || keisan <= 9) {
System.out.print(" " + keisan);
} else {
System.out.print(" " + keisan);
}
j++;
} while (j <= 9);
System.out.println("");
i++;
} while (i <= 9);
}
}

―――――――――――――――――――――――――――――
■拡張for
―――――――――――――――――――――――――――――
[文法]
J2SE 5.0ではfor文が拡張され、次の書き方が可能となりました。
配列の要素取り出し、可変配列を実行するコレクションへのアクセス
するコードなどを簡潔に記述することができます。

for (変数宣言: 参照変数名) {
// 処理
}
[例]
public class ForExTest {
public static void main(String args[]) {
int [] num = {1, 2, 3, 4, 5};
for (int n: num) {
System.out.println(n);
}
}
}

―――――――――――――――――――――――――――――
■break, continue
―――――――――――――――――――――――――――――
break文が実行されると、ループが終了していなくてもループから抜けます。
continue文が実行されると、いったんループの先頭に戻ります。

[例] (break)
public class BreakTest {
public static void main(String args[]) {
int i, j;
for(j = 1; j <= 10; j++) {
for(i = 1; j <= 10; i++) {
System.out.print(i + " ");
if(i == j) {
System.out.println("\n");
break;
}
}
}
}
}

[例] (continue)
public class ContinueTest {
public static void main(String args[]) {
int i;
for(i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
} else {
System.out.print(i + " ");
}
}
}
}
posted by rururu at 00:48| Comment(0) | TrackBack(0) | Java

Javaの勉強(4)


分岐(if、switch)のついて

――――――――――――――――――――――
■if (分岐)
――――――――――――――――――――――
if (条件式)
{
// 処理
}
else
{
// 処理
}

if (条件式1)
{
// 処理
}
else if (条件式2)
{
// 処理
}
else
{
// 処理(条件式1,2がfalseの時)
}

――――――――――――――――――――――
■switch (多重分岐)
――――――――――――――――――――――
switch (変数)
{
case 1:
// 処理
break;
case 2:
// 処理
break;
case 3:
// 処理
break;
default:
}
posted by rururu at 00:47| Comment(0) | TrackBack(0) | Java

Javaの勉強(3)


演算子とインクリメント、デクリメントの説明です。

―――――――――――――――――
■演算子
―――――――――――――――――
 ・算術演算子  : +、-、*、/、%
 ・代入演算子  : =
 ・関係演算子  : 2つの値の関係をあらわす (※1)
・論理演算子  : && (AND)、|| (OR)、! (論理否定)
・複合代入演算子 : +=、-=、%=、*=、/=

※1、 「==」 一致、「>」「>=」:大
「!=」不一致、「<」「<=」:小

(複合演算子の例)
int a = 10;
a += 5;
||
a = a + 5;

(論理演算子の例)
// 月のチェック(1〜12)
if ((i >= 1) && (i <= 12))
{
// 処理
}
// 論理否定・・・結果を反転させる
if (!s.equals("end")) {
// 処理
}

―――――――――――――――――
■インクリメント(++)、デクリメント(--)
―――――――――――――――――
(例)
int a = 10;
int b = ++a;
----------------------------------
aの値|11
----------------------------------
bの値|11
----------------------------------

int a = 10;
int b = a++;
----------------------------------
aの値|11
----------------------------------
bの値|10
----------------------------------
posted by rururu at 00:46| Comment(0) | TrackBack(0) | Java

Javaの勉強(2)


Javaの変数、定数、コメント、予約語について

■変数
・文字数 : 無制限
・使用可能文字 : 英大文字、英小文字、数字、_(下線)、$
・先頭文字 : 英大文字、英小文字、_(下線)、$

■定数
finalという修飾子を付けて宣言した変数は変更できません。
一度だけ値を代入できます。
(使用例)
final int ZEIRITSU = 0.05;
System.out.println(100 * ZEIRITSU);

■コメント
(1) 1行のコメント
(「//」より後の文字がコメントとなります。)
// コメント
(2) 複数行のコメント
(「/*」と「*/」で囲んだブロックがコメントとなります。)
/*
コメント
*/

■予約語
Javaの予約語およびtrue、false、nullは使用できません。
大文字・小文字は区別されます。
assert は J2SE 1.4からの予約語、enum は J2SE 5.0からの予約語です。

abstract assert boolean break byte case
catch char class const continue default
do double else enum extends final
finally float for goto if implements
import int instanceof interface long native
new package private protected public return
short static strictfp super switch synchronized
this throw throws transient try void
volatile while
posted by rururu at 00:45| Comment(0) | TrackBack(0) | Java

Javaの勉強(1)


Javaの基礎を勉強しなおすことにしました。

1、Java SE Development Kit (JDK) 6
以下のサイトからダウンロードしてインストール
(インストール先の指定あり)
http://java.sun.com/javase/ja/6/download.html

2、環境変数の設定
環境変数PathにJavaをインストールしたディレクトリ\binを入れる。
例) D:\javaにインストールした場合
『;D:\java\bin』をPathの最後に挿入
3、コマンドプロンプトを立ち上げ、『java -version 』と打って
バージョンが表示されたらOK!
4、Hello Worldの作成
(1) テキストエディタを開き、以下のコードを入力
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
(2) ファイル名は「HelloWorld.java」で保存
コマンドプロンプトを起動して以下のコマンドを実行
ファイルの場所> javac HelloWorld.java
ファイルの場所> java HelloWorld
「Hello, World!」と表示されるはずです
posted by rururu at 00:44| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(7)


行の削除をJavaで実行するサンプルです。

import java.sql.*;

public class Test07 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet resultSet = null;
try {
StringBuffer sbSQL = new StringBuffer(20);
sbSQL.append(" DELETE FROM seminar ");
sbSQL.append(" WHERE ");
sbSQL.append(" id = ? ");
conn = ConnectUtilOra.connectDatabase();
stmt = conn.prepareStatement(sbSQL.toString());
stmt.setInt(1,8);

int resultCount = stmt.executeUpdate();
if (resultCount == 1) {
System.out.println("削除成功");
} else {
System.out.println("削除失敗");
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:43| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(6)


行の更新をJavaで実行するサンプルです。

import java.sql.*;

public class Test06 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet resultSet = null;
try {
StringBuffer sbSQL = new StringBuffer(60);
sbSQL.append(" UPDATE seminar SET ");
sbSQL.append(" location = ? ");
sbSQL.append(" WHERE ");
sbSQL.append(" id = ? ");
conn = ConnectUtilOra.connectDatabase();
stmt = conn.prepareStatement(sbSQL.toString());
stmt.setString(1, "会議室C");
stmt.setInt(2,8);

int resultCount = stmt.executeUpdate();
if (resultCount == 1) {
System.out.println("更新成功");
} else {
System.out.println("更新失敗");
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:41| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(5)


行の追加をJavaで実行するサンプルです。

import java.sql.*;

public class Test05 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet resultSet = null;
try {
StringBuffer sbSQL = new StringBuffer(60);
sbSQL.append(" INSERT INTO seminar ( ");
sbSQL.append(" id, ");
sbSQL.append(" name, ");
sbSQL.append(" startdate, ");
sbSQL.append(" enddate, ");
sbSQL.append(" location, ");
sbSQL.append(" url, ");
sbSQL.append(" price ");
sbSQL.append(" ) ");
sbSQL.append(" VALUES (?,?,?,?,?,?,?)");
conn = ConnectUtilOra.connectDatabase();
stmt = conn.prepareStatement(sbSQL.toString());
stmt.setInt(1,8);
stmt.setString(2, "CakePHP勉強会");
java.sql.Timestamp ts = java.sql.Timestamp.valueOf("2009-12-28 12:0:0");
stmt.setTimestamp(3, ts);
java.sql.Timestamp ts2 = java.sql.Timestamp.valueOf("2009-12-28 17:0:0");
stmt.setTimestamp(4, ts2);
stmt.setString(5, "会議室A");
stmt.setString(6, "http://rururu.sakura.ne.jp/");
stmt.setInt(7, 0);

int resultCount = stmt.executeUpdate();
if (resultCount == 1) {
System.out.println("追加成功");
} else {
System.out.println("追加失敗");
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:40| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(4)


idの値が「1」のデータを検索して、nameとlocationのみを表示するサンプルです。
(検索条件をSQL入力パラメータ化)

import java.sql.*;

public class Test04 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet resultSet = null;
try {
StringBuffer sbSQL = new StringBuffer(60);
sbSQL.append(" SELECT");
sbSQL.append(" name,");
sbSQL.append(" location");
sbSQL.append(" FROM");
sbSQL.append(" seminar");
sbSQL.append(" WHERE id = ?");
conn = ConnectUtilOra.connectDatabase();
stmt = conn.prepareStatement(sbSQL.toString());
stmt.setInt(1,1);
resultSet = stmt.executeQuery();
for(;resultSet.next();) {
System.out.println("name:" + resultSet.getString(1));
System.out.println("location:" + resultSet.getString(2));
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:39| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(3)


全件検索のサンプルの表示箇所とデータベース接続箇所を
別クラスに分けました。

−−−−−−−−−−−−−−−−−−−−−−−
[ConnectUtilOra.java]
−−−−−−−−−−−−−−−−−−−−−−−
import java.sql.*;

public class ConnectUtilOra {
public static Connection connectDatabase() throws SQLException, ClassNotFoundException {
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "HR";
String pass = "HR";
Class.forName("oracle.jdbc.driver.OracleDriver");
return DriverManager.getConnection(url, user, pass);
}
}

−−−−−−−−−−−−−−−−−−−−−−−
[SelectUtil.java]
−−−−−−−−−−−−−−−−−−−−−−−
import java.sql.*;

public class SelectUtil {
public static void displayResult(ResultSet resultSet) throws SQLException {
System.out.println(":" + resultSet.getInt(1));
System.out.println(":" + resultSet.getString(2));
System.out.println(":" + resultSet.getString(3));
System.out.println(":" + resultSet.getString(4));
System.out.println(":" + resultSet.getString(5));
System.out.println(":" + resultSet.getString(6));
System.out.println(":" + resultSet.getInt(7));
}
}

−−−−−−−−−−−−−−−−−−−−−−−
[Test03.java]
−−−−−−−−−−−−−−−−−−−−−−−
import java.sql.*;

public class Test03 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet resultSet = null;
try {
conn = ConnectUtilOra.connectDatabase();
stmt = conn.createStatement();
StringBuffer sbSQL = new StringBuffer(150);
sbSQL.append("SELECT");
sbSQL.append(" id,");
sbSQL.append(" name,");
sbSQL.append(" to_char(startdate,'yyyy/MM/dd hh24:mi:ss'),");
sbSQL.append(" to_char(enddate,'yyyy/MM/dd hh24:mi:ss'),");
sbSQL.append(" location,");
sbSQL.append(" url,");
sbSQL.append(" price");
sbSQL.append(" FROM seminar");
resultSet = stmt.executeQuery(sbSQL.toString());
for(;resultSet.next();) {
SelectUtil.displayResult(resultSet);
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:38| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(2)


全件検索のサンプルを作りました。

・コマンドプロンプトを起動して
sqlplus を起動(sqlplus HR/《HRのパスワード》
・テーブル作成
CREATE TABLE seminar(
id integer not null,
name varchar(50),
startdate date,
enddate date,
location varchar(200),
url varchar(300),
price integer,
primary key(id)
);

・データ登録
insert into seminar values(1,'PHP勉強会',to_date('2009-12-04 19:00','yyyy/MM/dd hh24:mi:ss'),to_date('2009-12-04 20:00','yyyy/MM/dd hh24:mi:ss'),'本社・会議室','http://rururu.sakura.ne.jp/',0);
insert into seminar values(2,'Oracle勉強会',to_date('2009-12-11 19:00','yyyy/MM/dd hh24:mi:ss'),to_date('2009-12-11 20:00','yyyy/MM/dd hh24:mi:ss'),'本社・会議室','http://rururu.sakura.ne.jp/',0);
insert into seminar values(3,'Java勉強会',to_date('2009-12-18 19:00','yyyy/MM/dd hh24:mi:ss'),to_date('2009-12-18 20:00','yyyy/MM/dd hh24:mi:ss'),'本社・会議室','http://rururu.sakura.ne.jp/',0);
insert into seminar values(4,'Ruby勉強会',to_date('2009-12-25 19:00','yyyy/MM/dd hh24:mi:ss'),to_date('2009-12-25 20:00','yyyy/MM/dd hh24:mi:ss'),'本社・会議室','http://rururu.sakura.ne.jp/',0);
insert into seminar values(5,'SQL勉強会',to_date('2009-12-28 19:00','yyyy/MM/dd hh24:mi:ss'),to_date('2009-12-28 20:00','yyyy/MM/dd hh24:mi:ss'),'本社・会議室','http://rururu.sakura.ne.jp/',0);

・全件検索

import java.sql.*;

public class Test02 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet resultSet = null;
try {
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "HR";
String pass = "HR";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, pass);
stmt = conn.createStatement();
resultSet = stmt.executeQuery("SELECT id,name,to_char(startdate,'yyyy/MM/dd hh24:mi:ss'),to_char(enddate,'yyyy/MM/dd hh24:mi:ss'),location,url,price FROM seminar");
for(;resultSet.next();) {
System.out.println(":" + resultSet.getInt(1));
System.out.println(":" + resultSet.getString(2));
System.out.println(":" + resultSet.getString(3));
System.out.println(":" + resultSet.getString(4));
System.out.println(":" + resultSet.getString(5));
System.out.println(":" + resultSet.getString(6));
System.out.println(":" + resultSet.getInt(7));
}
} catch (SQLException ex) {
System.out.println("エラーコード:" + ex.getErrorCode());
System.out.println("SQL状態:" + ex.getSQLState());
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
posted by rururu at 00:36| Comment(0) | TrackBack(0) | Java

Oracle XEを使ってみました(1)


JavaのJDBCでSQLとPL/SQL(※)を実行する方法を掲載していく予定です。
※PL/SQLは最近仕事で2週間ぐらいやっただけなので、
あまり詳しいわけではありません。

−−−−−−−−−−−−−−−−−
インストール
−−−−−−−−−−−−−−−−−
以下のサイトを参照して、ダウンロードおよびインストールを実施
(インストール先はD:\oraclexe)

無料で使える「Oracle Database XE」をインストール
http://builder.japan.zdnet.com/sp/oracle-db-2008/story/0,3800086786,20375936,00.htm

−−−−−−−−−−−−−−−−−
JavaのJDBCドライバの設定
−−−−−−−−−−−−−−−−−
以下の設定をクラスパスに追加
D:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14.jar

−−−−−−−−−−−−−−−−−
JDBC接続ができるかの確認
−−−−−−−−−−−−−−−−−
[ソースコード] Test.java
import java.sql.*;

public class Test {
public static void main(String[] args) {
try {
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "system";
String pass = "xxxx"; // パスワードはインストールしたPCの設定を指定

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user, pass);
con.close();
System.out.println("接続成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}

[コンパイル&実行]
コマンドプロンプトを起動
以下のコマンドを実行
> javac Test.java
> java Test
→ 「接続成功」が表示されればOK
posted by rururu at 00:33| Comment(2) | TrackBack(0) | Java

Apache POIを使ってみました(1)


Apache POI(アパッチ・ポイまたはピーオーアイ)は
JavaでExcel出力を行うためのライブラリです。

Seasar2のセミナーに参加した時に業務システムで使って
いると聞いたので、Javaの仕事はしたことは無いですが、
今後のために使ってみることにしました。

―――――――――――――――――――
環境設定
―――――――――――――――――――
javaのセットアップが完了している環境で
http://poi.apache.org/download.htmlから
poi-bin-3.5-FINAL-20090928.zipをダウンロード
して解凍します。
ダウンロードしたZipファイルを展開すると、
フォルダの中に各種のドキュメントともに4つの
JARファイルがあると思いますので、
使用している環境設定のCLASSPATHに追加します。

poi-3.5-FINAL-20090928.jar
poi-contrib-3.5-FINAL-20090928.jar
poi-ooxml-3.5-FINAL-20090928.jar
poi-scratchpad-3.5-FINAL-20090928.jar

―――――――――――――――――――
新規のワークブックを作成して、
新規のシートのA1に「テスト」と
書き込んでD:\PoiSample001.xlsに
ファイルを保存するサンプルです。
―――――――――――――――――――
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

public class java001 {
public static void main(String[] args) {
try{
// 新規ワークブックを作成
HSSFWorkbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("D:\\PoiSample001.xls");
// 新規ワークシートを作成
HSSFSheet sheet1 = wb.createSheet();
// 作成したシート名を変更
wb.setSheetName(0,"sheet1");
// 行オブジェクトの作成
HSSFRow row2 = sheet1.createRow(0);
// セルオブジェクトの作成
HSSFCell cell = row2.createCell(0);
// セルに値を設定
cell.setCellValue("テスト");
// 作成したワークブックを保存する
wb.write(fileOut);
fileOut.close();
System.out.println("Excelファイルの作成が完了しました!");
}catch(Exception e){
e.printStackTrace();
System.out.println("Excelファイルの作成に失敗しました");
}
}
}
posted by rururu at 00:31| Comment(0) | TrackBack(0) | Java

2010年01月19日

Eclipseの設定からHelloWorldまで


Eclipseの設定からHelloWorldまで行う手順をまとめてみました。
Javaの仕事はやったことが無いので、Eclipseがうまく動作して
くれなくて大変でした。

1、Java SE Development Kit (JDK) 6
以下のサイトからダウンロードしてインストール
(インストール先の指定あり)
http://java.sun.com/javase/ja/6/download.html

2、Tomcat6
(1) ダウンロード
Windows Service Installer版をインストール
http://tomcat.apache.org/download-60.cgi
(2) インストール
ダウンロードしたファイルを実行し、
ウィザードに従ってインストール
(インストール先とパスワードの指定あり)
※Vistaの場合は、デフォルトのProgram Files
にインストールした場合、UACで書き込みが制限
されて起動時にエラーになるので、デフォルト
以外の場所にインストールする必要があります。

3、Eclipse 3.5 (GALILEO)
(1) ダウンロード
Tomcatなどサーバ系Java EE開発をするので、
Eclipse IDE for Java EE Developersをダウンロード
http://www.eclipse.org/downloads/index.php
(2) インストール
任意の場所にファイルを解凍
(3) eclipse.exeを起動
(4) 設定、プラグインの追加
・以下のページから「tomcatPluginV321.zip」というファイルを
ダウンロード
http://www.eclipsetotale.com/tomcatPlugin.html
・ダウンロードしたファイルを展開し、できたディレクトリ
「com.sysdeo.eclipse.tomcat_3.2.1」を、eclipseをインストール
したディレクトリにある「plugins」ディレクトリの中に移動
・移動が完了したらeclipseを起動、または、再起動します。
[参考情報]
Eclipse(Europa)にTomcat Launcher pluginをインストール
http://www.kadoppe.net/2007/12/eclipseeuropatomcat-launcher-p.html

4、PostgreSQL 8.4
(1) ダウンロード
http://www.postgresql.jp/PostgreSQL
(2) インストール
・ダウンロードしたファイルの実行してインストーラを起動
(インストール先とパスワードの指定あり、ポートは基本的に
デフォルトの5432、後は次へでOK)
(3) JDBCドライバのインストール
・インストール後に[スタート]-[すべてのプログラム]-[PostgreSQL8.4]
から[Application Stack Builder]を起動
・リストから[PostgreSQL8.4を選択(5432から)]を選択して[次へ]を押下
・カテゴリの[Database Drivers]から[pgJDBC vxxxx]を選択して[次へ]を押下
※Vistaの場合、管理者権限で実行できなくて失敗する場合があります。
その時はダウンロードしたファイルを手動で管理者として実行します。
[参考情報]
EclipseでPostgreSQLを使う
http://karuvadosu.com/it-soldier/2009/08/eclipsepostgresql.html

-------------------------
サーブレットでHello World!
-------------------------
・Eclipseを起動
・Eclipseのプロジェクトを作成
・メニューの[File]-[New]-[Dynamic Web Project]
・Project Nameに「HelloWorld」と指定、
Target runtimeの[New]を押下して[Apache Tomcat v6.0]を選択
(Tomcat6のインストール先を指定する画面あり)
[Finish]を押下
・HelloWorldプロジェクトを開き、Java Resources: src
を選択
・右クリックメニューの[New]-[Servlet]を選択
・Create Servlet画面でClass nameにHelloWorldを指定して
[Finish]を押下
・HelloWorld.javaを開き、doGetメソッドを以下のように変更
[変更前]
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
[変更後]
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=Windows-31J");
PrintWriter out = response.getWriter();

// HTMLを出力
out.println("<html>");
out.println("<head><title>Hello World</title></head>");
out.println("<body>Hello World!</body>");
out.println("</html>");
}

それから、コードの先頭のimport java.io.IOException;
の左側の[+]をクリックしてからimport java.io.IOExceptionの
下に[import java.io.PrintWriter;]を追加します。

・メニューの[Tomcat]の[Tomcat 再起動]を実行してから、[Tomcat 停止]を実行
・[default package]の左側の[+]をクリックしてから[HelloWorld.java]を選択した状態で、
右クリックメニューの「Run As」→「Run on Server」を選択
・Run On Server画面が表示しますので、以下の設定になっていることを確認し、
[Next]ボタンを押下
Server's host name : localhost
Server name : Tomcat v6.0 Server at localhost
Server runtime environment: Apache Tomcat v6.0
・設定を変更しないで、[Finish]ボタンを押下
・成功するとEclipse内にブラウザが表示して、画面に[Hello World!]と表示されます。

[参考情報]
Web のための Java サーブレット・プログラミング
http://www.db.is.kyushu-u.ac.jp/rinkou/tomcat/index.html
Eclipse 3.4でのアプリケーション開発方法
(swing/JSP/サーブレット) 〜Eclipse 3.4入門〜
http://codezine.jp/article/detail/3485

-------------------------
JSPでHello World!
-------------------------
・サーブレットを作成した時に使用した[Helloword]プロジェクトを
選択した状態で右クリックメニューの[New]-[JSP]を選択
・ファイル名に「HelloWorld.jsp」を指定して、[Finish]ボタンを押下
・以下のコードが画面に表示されます
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
・<body>〜</body>の間に<% out.print("Hello World"); %>
を追加します。
・メニューの[Tomcat 停止]を実行
・[WebContent]の左側の[+]をクリックしてから[HelloWorld.java]を選択した状態で、
右クリックメニューの「Run As」→「Run on Server」を選択
・Run On Server画面が表示しますので、以下の設定になっていることを確認し、
[Next]ボタンを押下
Server's host name : localhost
Server name : Tomcat v6.0 Server at localhost
Server runtime environment: Apache Tomcat v6.0
・設定を変更しないで、[Finish]ボタンを押下
・成功するとEclipse内にブラウザが表示して、画面に[Hello World]と表示されます。

-------------------------
サーブレットの作り方
-------------------------
(1) 必要なパッケージをimport
java.io.*
javax.servlet.*
javax.servlet.http.*
(2) HttpServletクラスを継承
(3) 必要なメソッド(doGet, doPost)をオーバーライド
(4) ContentType(出力形式)の決定
(5) Writerオブジェクトの取得

-------------------------
サーブレット
-------------------------
(1) Cookie(クッキー)
・保存
Cookie ck = new Cookie("[Cookie名]","[値]");
ck.setMaxage(60 * 60 * 24 * 30); // 1ヵ月
res.addCookie(ck);
~~~
レスポンスオブジェクト
≪説明≫
Cookie情報はCookieオブジェクトとしてあつかう。
Cookieのデフォルト保存期間はブラウザを閉じるまで。
Cookieを消すには、setMaxAgeに「0」をセットして、
AddCookieを実行する必要があります。
・取得
(使用例)
Cookie[] cookies = req.getCookies();
String name = "";
if(cookies != null)
{
for(int i = 0; i < cookies.length;i++)
{
if(cookies[i].getName().equals("username"))
{
name = cookies[i].getValue();
}
}
}
(2) Session(セッション)
・オブジェクト化
HttpSession session = req.getSession();
・保存
session.setAttribute("[セッション名]","[値]");
・取得
session.getAttribute("[セッション名]");
(3) ServletContextオブジェクト
Servletが実行されているコンテナ(Tomcatなど)を制御できるオブジェクト
・オブジェクト化
ServletContext sc = getServletContext();
~~~~~~~~~~~~~~~~~~~~
サーバー環境の情報
・RequestDispatcherオブジェクト・・・リクエストの転送(ページの切替)
・取得方法
RequestDispatcher dispatcher = sc.getRequestDispatcher("[URL]");
・実行 ・・・forwardまたはincludeメソッドを使う
・forward
dispatcher.forward(req,res);
~~~ ~~~
↑ ↑
| レスポンスオブジェクト
リクエストオブジェクト
・include
dispatcher.forward(req,res);
~~~ ~~~
↑ ↑
| レスポンスオブジェクト
リクエストオブジェクト
-------------------------
JSPタグ(一部)
-------------------------
(1) <%@ 〜 %> ・・・ディレクティブタグ
→ JSPの設定。ページの先頭に書く。
→ パッケージをimportする場合
<%@page import="[パッケージ名].[クラス名]" %>
※「,」区切りで複数指定可能
(2) <% 〜 %> ・・・スクリプトレットタグ
→ Javaのコードを記述
(3) <%! 〜 %> ・・・宣言タグ
→ フィールドを宣言
(4) <%= 〜 %> ・・・値タグ
→ 変数の値を表示

-------------------------
JSPの暗黙オブジェクト(一部)
→ JSPで定義済みの変数
サーブレット化される時に
自動的に入る宣言式
-------------------------
(1) application ・・・ServletContextオブジェクト
(2) exception ・・・JSP内で発生した例外を表すオブジェクト
(3) out ・・・writerオブジェクト
(4) request ・・・リクエストオブジェクト
(5) response ・・・レスポンスオブジェクト
(6) session ・・・HttpSessionオブジェクト

-------------------------
JSP アクションタグ(一部)
-------------------------
(1) jsp:forward
→ <jsp:forward page="[URL]" />
(2) jsp:include
→ <jsp:include page="[URL]" />
(3) jsp:getProperty
(4) jsp:setProperty
(5) jsp:useBean

-------------------------
JSP 例外処理
-------------------------
・例外時のエラーページ設定
<%@ page errorPage="[URL]" %>

・エラーページ
(例)
<%@page isErrorPage="true" contentType="text/html;charset=Windows-31J" %>
<html>
<body bgcolor="#CCCC99" text="#330033">
<h3>エラーが発生しました。</h3>
<br>
エラーの種類:<%= exception %><br>
エラーの内容:<%= exception.getMessage() %><br>
<hr>
エラーの詳細<br>
<%
StackTraceElement[] st= exception.getStackTrace();
for(int i = 0; i < st.length;i++)
{
out.println(st[i]);
}
%>
</body>
</html>

-------------------------
エラーについて
-------------------------
・行数はあてにならない。
・HTTPステータス 500
→ プログラムのミス
・HTTPステータス 404
→ アドレス,ファイル名がみつからない場合

-------------------------
MVC
-------------------------
Java Beans(※) ← サーブレット
| ↓ ↑
|----→ JSP (表示)

※コンポーネント的な使い方
をするJavaのクラス(部品)

-------------------------
Java Beans
→ Java Beansのルールで書かれたクラス
-------------------------
(1) デフォルトコンストラクタを持つ(引数無しのコンストラクタ)
(2) カプセル化(private)されたプロパティを持つ
(3) プロパティに対するアクセサメソッドを持つ
(4) パッケージ化する
(5) Publicクラスで作る

-------------------------
サーブレットでBeanを使う方法
-------------------------
(1) オブジェクト化
[Bean名] [オブジェクト名] = new [Bean名]();
(2) メソッドの使用
[オブジェクト名].[セッター]("[値]");
[変数] = [オブジェクト名].[ゲッター]();

-------------------------
JSPでBeanを使う方法
-------------------------
(1) Bean使用宣言
<jsp:useBean id="[変数名]" class="[パッケージ名.クラス名]" />
(2) プロパティを操作
<jsp:setProperty name="[変数名]" property="[プロパティ名]" value="[値]" />
<jsp:getProperty name="[変数名]" property="[プロパティ名]" />
posted by rururu at 23:53| Comment(0) | TrackBack(0) | Java