MSDE2000をJavaの開発環境に利用しようというフトドキな企画です。
入手 †
- MSDE2000ホームページ
から、JPN_MSDE2000A.exe をダウンロードする。
- JPN_MSDE2000A.exeには、MS-SQLServer2000SP3が適用済み
- MSDE自習書「MSDEを使おう」がある。
- このメモの内容の大部分はMSDE自習書からの抜き書き
- 微妙な間違えが多い
インストール †
- JPN_MSDE2000A.exeをダブルクリックすると、C:\MSDERelA に解凍される。
- コマンドプロンプトで、以下のようにsetup.exeを起動します
C:\MSDERelA>setup.exe SECURITYMODEL=SQL SAPWD=password
- SECURITYMODEL=SQL : Windows認証とSQL認証の両方を使います。SQLServerの管理者[sa]を有効にするため。
- Windows認証 : Windowsにログインしているユーザは認証されているとする
- SQL認証 : MS-SQLServer独自の認証
- どのような権限を認可するかは別の話
- SAPWD=password : [sa]ユーザのパスワード
- しばらくすると、再起動を要求される
- 再起動後に [コントロールパネル]-[管理ツール]-[サービス] で SQLSERVICE が
起動しているのを確認できたらインストール終了
データベースの作成 †
- GUIベースのフロントエンド(SQL Server Web Data Administrator)があるけど、IIS+APS.netが必要なので使わない
- コマンドラインからデータベースを作成して、後はMS-ACCESSなどを使う
- osqlでログイン
osql.exe -U sa -P password
起動オプション | 説明 |
-U | ログインID |
-P | パスワード |
-S | 接続サーバ名(省略時はローカルサーバ) |
-c | コマンド終端文字。規定値はgo |
-i | 入力ファイル(バッチ・ストアドプロシージャ) |
-O | 出力ファイル(-iで指定したバッチ・ストアドプロシージャーの結果) |
コマンド | 説明 |
GO | ステートメントの実行 |
RESET | ステートメントの破棄 |
ED | エディタの呼び出し |
!! | DOSコマンドの実行 |
QUIT,EXIT() | osqlの終了 |
Ctrl+c | クエリの終了(osqlは終了しない) |
- データベース作成
CREATE DATABASE Sandbox
ON(
NAME = SandBox_dat,
FILENAME = 'C:\MSDE2000\Data\SandBoxDB.mdf',
SIZE = 10MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5MB
)
LOG ON (
NAME = SandBox_log,
FILENAME = 'C:\MSDE2000\Data\SandBoxDB.ldf',
SIZE = 10MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5MB
)
GO
- ON=データファイルの設定
- LOG ON=ログ(トランザクション)ファイルの設定
- NAME=ファイル論理名
- FILENAME=ファイル物理名
- SIZE=初期容量
- MAXSIZE=最大容量
- FILEROWTH=ファイルサイズ増加幅
- データベースプロパティ変更
ALTER DATABASE Sandbox
MODIFY FILE(
NAME = SandBox_dat,
SIZE = 20MB
)
GO
- データベースの削除
DROP DATABASE Sandbox
GO
テーブルの作成 †
- データベースの選択
USE SandBox
GO
- テーブルの作成(実験パラメータと実験結果)
CREATE TABLE ExamParam (
ExamNo int NOT NULL PRIMARY KEY,
RecDate datetime NOT NULL,
Param1 int,
Param2 int,
Param3 int
)
CREATE TABLE ExamResult (
ResultNo int NOT NULL PRIMARY KEY,
ExamNo int NOT NULL,
RecDate datetime NOT NULL,
Result1 int,
Result2 int,
Result3 int
)
GO
- データの作成(実験パラメータ)
INSERT INTO ExamParam VALUES (1,'2004/11/11 11:11',1,11,111)
INSERT INTO ExamParam VALUES (2,'2004/11/11 11:12',2,22,222)
INSERT INTO ExamParam VALUES (3,'2004/11/11 11:13',3,33,333)
INSERT INTO ExamParam VALUES (4,'2004/11/11 11:14',4,44,444)
INSERT INTO ExamParam VALUES (5,'2004/11/11 11:15',5,55,555)
GO
- テーブルの削除
DROP TABLE ExamParam
DROP TABLE ExamResult
GO
ユーザの管理 †
- [sa]ユーザでログインできない場合は、SQLServerのモードがWindows認証モードになっているかもしれない。
現象:
\>osql -U sa -P password
ユーザー 'sa' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。
対処法:
regedit.exeで、
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSqlserver\MSSqlServer\LoginMode
を1(Windows認証)から2(混合モード認証)に変更する
- ユーザの作成
- ログインの作成
sp_addlogin jdbc_user,password,SandBox
GO
jdbc_user = ユーザ名
password = パスワード
SandBox = デフォルトデータベース
- データベースへの登録
USE SandBox
GO <--USEの後のGOは重要
sp_grantdbaccess jdbc_user
GO
- データベースへの権限設定
USE SandBox
GO
sp_addrolemember db_datareader,jdbc_user
GO
sp_addrolemember db_datawriter,jdbc_user
GO
権限一覧(強い順に)
public db_owner db_accessadmin db_securityadmin db_ddladmin(テーブル作成・削除)
db_backupoperator db_datareader db_datawriter
db_denydatareader(読み込み拒否) db_denydatawriter(書き込み拒否)
- 権限の確認
USE SandBox
GO
sp_helprolemember
GO
- パスワードの変更
sp_password @old = 'password', @new = 'newpwd', @loginame ='sa'
GO
- ユーザの削除
- データベースからの削除
sp_revokedbaccess ユーザ名
GO
- ログインの削除
sp_droplogin ユーザ名
GO
DDLファイルの実行 †
>osql.exe -U sa -P -iIn.sql -oOut.txt
ODBC接続の作成 †
- [コントロールパネル]-[管理ツール]-[データソース(ODBC)] をダブルクリック
- SQLサーバ(MS-SQLServer2000)を選択する
- 適当に
- 適当に
- 適当に
- 適当に
- 接続テストでつながったようです
J2EEでJDBC-ODBCドライバを使用する時の設定 †
- Java側(J2EE)でコネクションプーリングを行うときなどは、ODBC側のコネクションのプーリングを停止する必要があるかもしれない。
JDBC-ODBCドライバの使用法 †
- プログラム:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:SandBox","jdbc_user","password");
Statement stmt = conn.createStatement();
ResultSet res = stmt.executeQuery("SELECT * from ExamParam");
while (res.next()) {
int examNo = res.getInt("ExamNo");
Timestamp recDate = res.getTimestamp("RecDate");
int param1 =res.getInt("Param1");
int param2 =res.getInt("Param2");
int param3 =res.getInt("Param3");
System.out.println( "実験番号:" + examNo + "(記録:" + recDate + ")" );
System.out.println( "\tパラメータ1:" + param1 );
System.out.println( "\tパラメータ2:" + param2 );
System.out.println( "\tパラメータ3:" + param3 );
}
res.close();
stmt.close();
conn.close();
- 実行結果:
実験番号:1(記録:2004-11-11 11:11:00.0)
パラメータ1:1
パラメータ2:11
パラメータ3:111
実験番号:2(記録:2004-11-11 11:12:00.0)
パラメータ1:2
パラメータ2:22
パラメータ3:222
実験番号:3(記録:2004-11-11 11:13:00.0)
パラメータ1:3
パラメータ2:33
パラメータ3:333
実験番号:4(記録:2004-11-11 11:14:00.0)
パラメータ1:4
パラメータ2:44
パラメータ3:444
実験番号:5(記録:2004-11-11 11:15:00.0)
パラメータ1:5
パラメータ2:55
パラメータ3:555
JDBC-Type4ドライバの使用法 †
- 配布元
- Microsoft SQL Server 2000 Driver for JDBC
- Microsoft SQL Server 2000 Driver for JDBC Service Pack 2
- 64bit対応
- メッセージの文字化けに対処
- MSDEの設定
- TCP/IP経由の接続を受け付けるようにする (DOS窓から svrnetcn.exe )
- 必要があればクライアント側の設定をする (DOS窓から cliconfg.exe )
- Classpath
SET MSJDBC=C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
SET CLASSPATH=%CLASSPATH%;%MSJDBC%\msbase.jar;%MSJDBC%\mssqlserver.jar;%MSJDBC%\msutil.jar
- サンプルプログラム
- プログラム:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn
= DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=SandBox;SelectMethod=cursor",
"jdbc_user",
"password");
((以下JDBC-ODBCのときと同じ))
- SelectMethod?=cursor がミソらしい
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B313181
Computer