FreeBSD で JAVA しよう編
おもちゃ箱
POVRAY編
JDBC ドライバを使って MySQL のデータベースにアクセス![[工事中]](/~ryo2/gif/at_work.gif)
アニメーションのアプレットを作るくらいでは満足できなくなってきた方は、
少々実用的なもの手をのばしてみましょう。データベースを Java アプリケー
ションないし Java アプレットからアクセスしてみます。
FreeBSDに port されているSQLデータベースには、mSQL, MySQL, PostgreSQL
などがあります。たまたま Apache のMySQL用認証モジュールを見つけたので、
MySQL + Apache の組み合わせを使ってみることにしました。
既に mysql を使っている方は i, ii を読み飛ばして下さい。
私自身はデータベースに詳しくないので、間違った記述があれば指摘していた
だけると助かります。
MASTER_SITE_BACKUP?= \
ftp://ftp.jp.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
|
mysql 3306/tcp #mySQLの一行を入れて、 kill -HUP 1 しておきます。 インストール直後に mysqlサーバが勝手に立ち上がるので、mysql とい うデータベースに自ホストからアクセスできるユーザとして、まず root(ないしは相当する管理者) とそれ以外のユーザを最低一人登録し ましょう。サーバが立ち上がっていなければ
mysql.server startして立ち上げておきます。 ここでは仮に、root のパスワードを foo1%bar に、ユーザ www のパス ワードを websql としました。
shell> mysql mysql
INSERT INTO user VALUES ('%','root',password('foo1%bar'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') ;
INSERT INTO user VALUES ('%','root,'','N','N','N','N','N','N','Y','N','Y','Y') ;
INSERT INTO user VALUES ('localhost','www',password('websql'),'N','N','N','N','N','N','Y','N','Y','Y') ;
INSERT INTO user VALUES ('%','www','','N','N','N','N','N','N','Y','N','Y','Y') ;
|
% mysqladmin -uroot -pstable create test
Database "test" created.
以下のコマンドで jdbcというテーブルを作られ、テストデータが挿入されます。
% mysql -uroot -p'foo1%bar' test < jdbcTest.sql
ERROR 1121 at line 11: Column 'r1' is used with UNIQUE or INDEX but is not defined as NOT NULL
これは、INDEX など空欄にしてはいけないフィールドがそのように指定されて
いないというエラーです。そこで、データ入力行のうち r1, r2, r3, r4, r10 の行を
r1 tinyint NOT NULL,
r2 smallint NOT NULL,
r3 mediumint NOT NULL,
r4 int NOT NULL,
:
r10 char(100) NOT NULL,
のように修正してもう一度試すと、何もメッセージが出ずにデータの挿入が成功
すると思います。
|
※注意※
これは私が unofficial に作成した ports で、PHP/FIやPHP3と合わせ
たパッチにはなっていません。
何らかの理由で ports を使いたくない場合は、ports に含まれるパッチ
だけを利用して手動でコンパイル、インストールを行なってもかまいませ
ん。
初回起動は、スーパユーザになって
# /usr/local/sbin/apachectl start
とします。
% mysqladmin -uroot -p'foo1%bar' create http_auth
% mysql -uroot -p'foo1%bar' http_auth
mysql> CREATE TABLE mysql_auth (
-> username char(25) NOT NULL,
-> passwd char(25) NOT NULL,
-> groups char(25),
-> PRIMARY KEY (username)
-> );
Query OK, 0 rows affected (0.12 sec)
mysql>
|
% mysql -uroot -p'foo1%bar' http_auth
mysql> INSERT INTO mysql_auth (username,passwd,groups)
-> VALUES ('www', password('websql'), 'www');
Query OK, 0 rows affected (0.12 sec)
mysql> quit
|
|
<Directory /usr/local/www/data/db> Options FollowSymLinks AllowOverride All </Directory> |
|
Auth_MYSQL on Auth_MYSQL_Authoritative off Auth_MYSQLdatabase http_auth Auth_MYSQLpwd_table mysql_auth Auth_MYSQLgrp_table mysql_auth Auth_MYSQL_nopasswd off Auth_MYSQL_EncryptedPasswords off Auth_MYSQL_ScrambledPasswords on |
% java jms.jmsadmin -P 3306 -uroot -p'foo1%bar' version MySQL system administer with Java, by X.K.ZHU Server version 3.21.29-gamma Protocol version 10 JDBC driver gweMysqlDriver Version 0.93 Connected to jdbc:mysql://localhost:3306/ Uptime 4 hours 52 mins 42 sec Running threads: 1 Questions: 638 Opened_tables: 5 Reloads: 1 Open tables: 5 |
mysql exception: gweMysql.Connect: java.sql.SQLException: Access denied for user: 'root@localhost.your_domain' (Using password: YES) java.sql.SQLException: mysql exception: gweMysql.Connect: java.sql.SQLException: Access denied for user: 'root@localhost.your_domain' (Using password: YES) |
String url = "jdbc:mysql://localhost:3306/test";
// Set up a connection, as user and password (both as
// clear text here - the password is encrypted by the
// driver
// An empty username is changed to "nobody" in mysql
Connection con = DriverManager.getConnection(url, "root", "foo1%bar");
|
//Date r9d = rs.getDate(9); System.out.println("r9d : "+r9d);
//Time r9t = rs.getTime(9); System.out.println("r9t : "+r9t); |
% export CLASSPATH=.:/usr/local/java/lib/classes.zip:/tmp/jms1.3.0b % java test.testSelect 以下のような出力がでれば、正常動作です。 Results : 1 : 20000 : 8000000 : 2000000000 : 9999999999999 : 2.00 : 3.3333 : Y : 970224121120 : This is a fixed string : This is a variable string : This is a tinyblob : This is a blob : This is a mediumblob : This is a longblob : r1 : 1 r2 : 20000 r3 : 8000000 r4 : 2000000000 r5 : 9999999999999 r6 : 2.0 r7 : 3.3333 r8 : true r9ts : 1997-02-24 12:11:20.0 r10 : This is a fixed string r11 : This is a variable string r12 : This is a tinyblob r13 : This is a blob r14 : This is a mediumblob r15 : This is a longblob r15 as byte array : This is a longblob (中略) max(r1)=3 r2=20000 |
[すんません、工事中です]
アプレットベースの市販のアプリケーションである eSuite DevPack に含まれ る JDBC アプレットから MySQL の JDBCドライバを呼び出してみます。 ここではアプレットを呼び出す起点(CODEBASE)を仮に /usr/local/www/date/db にしてみました。 eSuite DevPackが /usr/local/www/date/db にインストールされているものと して、/usr/local/www/date/db/samples/jdbc/index.html を以下のように作っ てみました。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML i18n//EN">
<html><head>
<title>MySQL Access Test for JDBC driver</title>
</head>
<body bgcolor="#c0d0d0">
<h1>LOTUS eSuite DevPack で MySQL JDBCドライバを使うテスト</h1>
<APPLET NAME="dataBase1" CODEBASE="../.."
CODE="lotus.jdbc.JdbcSource"
ARCHIVE="jars/devpack_jdbc_app.jar"
WIDTH=720 HEIGHT=600 >
<PARAM NAME="CABINETS" VALUE="cabs/devpack_infobus.cab,
cabs/devpack_scripthelper_app.cab,cabs/devpack_shared.cab,
cabs/devpack_ic.cab,cabs/devpack_jdbc_app.cab,
cabs/devpack_dbaw.cab">
<PARAM NAME="driver" VALUE="gwe.sql.gweMysqlDriver">
<PARAM NAME="autoload" VALUE="true">
<PARAM NAME="autoExecute" VALUE="false">
<PARAM NAME="database" VALUE="jdbc:mysql://localhost:3306/test">
<PARAM NAME="allowUI" VALUE="true">
<PARAM NAME="user" VALUE="www">
<PARAM NAME="password" VALUE="websql">
<PARAM NAME="autoconnect" VALUE="false">
</APPLET>
</body></html>
|
eSuite Devpackの JDBCアプレットで MySQLに接続した例 |
![]() (Netscape Communiator4.5b1) |