JavaアプレットからDBに接続

帰宅して、JavaアプレットからMySQLのデータベースに接続するプログラムを書いてみる。いや、正しくは先日作成したJavaアプリケーションやJSPのソースをコピーしただけと言ったほうが正しいかも。まずはJavaアプレットから。

package javadb;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.sql.*;

public class DBConnectApplet extends JApplet {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private Connection db = null;

    public void init() {
        try {
            //JDBCドライバの読み込み
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void start() {
        String sql_server = "localhost";
        String sql_user    = "hogehoge";
        String sql_pass    = "fizzbuzz";
        String sql_db    = "dbname";
        //String sql_url    = "jdbc:mysql://localhost/" + sql_db;
        String sql_url = "jdbc:mysql://localhost/dbname?user=hogehoge&password=fizzbuzz";
        try {
            //MySQLのデータベースへ接続
            //db = DriverManager.getConnection(sql_url, sql_user, sql_pass);
            db = DriverManager.getConnection(sql_url);

            //目的のテーブルを操作

            //ステートメントオブジェクトの取得
            Statement stmt = db.createStatement();

            //クエリの準備
            String query = "select id, name, address, tel, fax, mail, site, station from company";

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

            //テーブルカラムの設定
            String[] tableColumn = {    " id",    "name",    "address",    "tel",    "fax",    "mail",    "site",    "station",    };

            DefaultTableModel tableModel = new DefaultTableModel(tableColumn, 0);
            JTable table = new JTable(tableModel);

            //検索された行数分ループ
            while (rs.next()) {
                Object[] tableData = {
                        String.format("%4d", rs.getInt("id")),
                        rs.getString("name"),
                        rs.getString("address"),
                        rs.getString("tel"),
                        rs.getString("fax"),
                        rs.getString("mail"),
                        rs.getString("site"),
                        rs.getString("station"),
                };

                //テーブルデータをテーブルに登録
                tableModel.addRow(tableData);

                //コンソールにも出力してみる
                System.out.printf("%2dt%st%st%st%st%st%st%sn",
                        rs.getInt("id"),
                        rs.getString("name"),
                        rs.getString("address"),
                        rs.getString("tel"),
                        rs.getString("fax"),
                        rs.getString("mail"),
                        rs.getString("site"),
                        rs.getString("station")
                );
            }

            //スクロールペインにテーブルを登録
            JScrollPane scroll = new JScrollPane();
            scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scroll.getViewport().add(table);

            //スクロールペインをアプレットに登録
            getContentPane().add(scroll);

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

            //MySQLのデータベースとの接続を切断
            db.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

次に、HTMLファイル中のappletタグの部分を抜粋。

<applet height="480" archive="./mysql-connector-java-5.1.5-bin.jar" width="640" code="javadb.DBConnectApplet.class"></applet>

違うのは、JDBCドライバを登録する部分と、データを表示させる部分ぐらいかもしれない。JDBCドライバは、Javaアプレットの場合は<applet>タグに指定する形になる。ちなみにJavaアプレットでは、セキュリティの関係上からDBに接続することはほとんど無い模様。いろいろと制約があるので、確かに不便かも。

データを表示させる部分は、コンソール出力に加えて、アプレットなのでJTableを使用してみた。

コンソール出力の結果はどこで確認出来るかというと、Internet Explolerの場合だと、Javaコンソールで確認出来る。

追記: Javaアプレットからデータベースに接続する (2009/11/08追加)

package javadb;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.sql.*;

public class DBConnectApplet extends JApplet {
/**
*
*/
private static final long serialVersionUID = 1L;

private Connection db = null;

public void init() {
try {
//JDBCドライバの読み込み
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
}

public void start() {
String sql_server = “localhost”;
String sql_user    = “hogehoge”;
String sql_pass    = “fizzbuzz”;
String sql_db    = “dbname”;
//String sql_url    = “jdbc:mysql://localhost/” + sql_db;
String sql_url = “jdbc:mysql://localhost/dbname?user=hogehoge&password=fizzbuzz”;
try {
//MySQLのデータベースへ接続
//db = DriverManager.getConnection(sql_url, sql_user, sql_pass);
db = DriverManager.getConnection(sql_url);

//目的のテーブルを操作

//ステートメントオブジェクトの取得
Statement stmt = db.createStatement();

//クエリの準備
String query = “select id, name, address, tel, fax, mail, site, station from company”;

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

//テーブルカラムの設定
String[] tableColumn = {    ” id”,    “name”,    “address”,    “tel”,    “fax”,    “mail”,    “site”,    “station”,    };

DefaultTableModel tableModel = new DefaultTableModel(tableColumn, 0);
JTable table = new JTable(tableModel);

//検索された行数分ループ
while (rs.next()) {
Object[] tableData = {
String.format(“%4d”, rs.getInt(“id”)),
rs.getString(“name”),
rs.getString(“address”),
rs.getString(“tel”),
rs.getString(“fax”),
rs.getString(“mail”),
rs.getString(“site”),
rs.getString(“station”),
};

//テーブルデータをテーブルに登録
tableModel.addRow(tableData);

//コンソールにも出力してみる
System.out.printf(“%2d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n”,
rs.getInt(“id”),
rs.getString(“name”),
rs.getString(“address”),
rs.getString(“tel”),
rs.getString(“fax”),
rs.getString(“mail”),
rs.getString(“site”),
rs.getString(“station”)
);
}

//スクロールペインにテーブルを登録
JScrollPane scroll = new JScrollPane();
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.getViewport().add(table);

//スクロールペインをアプレットに登録
getContentPane().add(scroll);

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

//MySQLのデータベースとの接続を切断
db.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}

1件のコメント

コメントは受け付けていません。