Linux

Java で、JDBC を使って MySQL にアクセスする方法

Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。

ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。

以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。

import java.sql.*; public class MySQLJDBCTest {
public static void main(String[] args) {

    try {
        // ドライバをロード
        Class.forName("org.gjt.mm.mysql.Driver");

        // データベースへ接続
        String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                   + "useUnicode=true&characterEncoding=UTF-8";
        Connection con = DriverManager.getConnection(url);

        // SQL 文を生成
        Statement s = con.createStatement();
        String sql = "SELECT * FROM `users`";

        // クエリーを実行して結果セットを取得
        ResultSet rs = s.executeQuery(sql);

        // 検索された行数分ループ
        while(rs.next()){
            String name     = rs.getString("name");  // ユーザー名
            String password = rs.getString("pass");  // パスワード

            // 表示
System.out.println(name + " / " + password);
        }

        // データベースから切断
        s.close();
        con.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

コンパイル

# javac MySQLJDBCTest.java

実行

# java MySQLJDBCTest
続きを読む

Ant で、com.sun.tools.javac.Main is not on the classpath. というエラーへの対処

$JAVA_HOME を正しく設定していて、コンパイラが正常に動作しているのも関わらず以下のエラーに遭遇したとき、


build.xml:xxx: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK

Linux の場合は、$JAVA_HOME/lib にある tools.jar を、$JAVA_HOME/jre/lib/ext にコピーしてあげればよい (試してはいないが、Windows その他でもこの方法でイケると思う)。


# cp $JAVA_HOME/lib/tools.jar $JAVA_HOME/jre/lib/ext
続きを読む

Linux に、Ant をインストールする

Ant は Java 版の make だと思ってよい。

以下の URL にアクセスして Apache Ant をゲット。

コンソールから以下のコマンドを実行


# ./build.sh

ビルドが成功すると、dist ディレクトリが作成されていて、その中に bin と lib というディレクトリができている。bin にある ant (シェルスクリプト) と、lib にあるすべての jar ファイルを以下のディレクトリにコピーする。


# cp ./bin/ant <font color="blue">/usr/local/bin</font>
# cp ./lib/*.* <font color="blue">/usr/java/jdk1.5.0_06/jre/lib/ext</font>
続きを読む

Perl で、データベースを使う

Perl で、データベース (ここでは MySQL を使うときの基本) をおさらいしよう。Perl でのデータベースへのアクセスは、DBI モジュールを使う。このモジュールは XS で書かれているため、Linux などにインストールするには gcc のコンパイル環境が必要である。レンタルサーバは予め DBI がインストールされているところを選んでおけば間違いないが、そうでない場合は自力でインストールする必要があるため注意しよう。
さて、以下はデータベース中のテーブルのフィールドが id、name、value となっていてそれらを扱う場合の例である。最初のデータベースの定義のところで、mysql のところを Pg とするだけで PostgreSQL に対応できる (ようである)。
スクリプト中ではデータベースのテーブルを変数でマッピング (定義) している (ハッシュを使う方法もあると思うのでもっといい方法があったら教えて欲しい)。こうしておくと後でテーブルの定義を変更したときなど柔軟に対応できるだろう。
foreach の中の「$_」は、Perl では「現在処理中のデータ」であり、

foreach my $data (@$DATA) {
$id    $data->$T_FIELD[$T_ID];
$name  $data->$T_FIELD[$T_NAME];
$value $data->$T_FIELD[$T_VALUE];
}

などするのと同義である。
DBI->selectrow_arrayref は、selectrow_array と似ているが、結果をリファレンスで複数行返すところが異なる。リファレンスなのでその後の処理も高速である (と思われる)。

使用するモジュール


use DBI;
#!/usr/bin/perl use DBI; # データベースの設定 our $DB_NAME = 'DBI:mysql:your_database_name'; our $DB_USERNAME = 'your_username'; our $DB_PASSWORD = 'your_password'; our $DB_TABLE = 'your_table_name'; # テーブルの定義 our $T_ID = 0; our $T_NAME = 1; our $T_VALUE = 2; our @T_FIELD = (
'`id`',
'`name`',
'`value`'
); # データベースに接続 my $DB = DBI->connect($DB_NAME, $DB_USERNAME, $DB_PASSWORD)
   || die "Connection error";
# データを検索 my $DATA = $DB->selectall_arrayref(
                        qq|SELECT * FROM `$DB_TABLE` |
                      . qq|WHERE $T_FIELD[$T_ID]='ここに検索したい ID を書く'|
                    );
# データがあれば if(@$DATA) {
my $id, $name;

# データを出力
foreach (@$DATA)    {

    $id    = $_->[$T_ID   ];    # $T_ID    = 0
    $name  = $_->[$T_NAME ];    # $T_NAME  = 1
    $value = $_->[$T_VALUE];    # $T_VALUE = 2

    print "$id / $name / $value\n";      # データを表示
}
} # データベースの接続を切断 $DB->disconnect(); 1;
続きを読む
Linux を購読