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件

  1. [...] けれども、どうやらJavaアプレットからDBに接続に書いた内容とは少し違うものを探しているのではないかという気がしてきたのは、今年に入ってからである。 [...]

コメントをどうぞ