アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境は、
OS:win XP
Webサーバ:tomcat5.5
統合開発環境:eclipse3.2
DB:SQL server 2005
です。

SQLserverのJDBCドライバ(sqljdbc.jsp)を、%CATALINA_HOME%common/libに配置し、DB接続用のサーブレットを作成、デバッグを行いましたが、

com.microsoft.sqlserver.jdbc.SQLServerException: TDS ログイン前応答が不完全です。対象サーバーは SQL Server 2000 以降である必要があります。

とのエラーが表示され接続できませんでした。
またデバッグを行ったところ、
Class.forName(driver);
までは通りますが、次の行の
con = DriverManager.getConnection(url,user,passwd);
でエラーになるようです。次のステップは、データベース切断の
public synchronized void close() throws Exception {
行に飛んでしまいます。

どなたかお気づきの方がおられればご回答願います。

ソースは以下の通りです。
////////////////////////////////////////////
package report.pack;
import java.sql.*;

public class DatabaseAccess {
private String driver;
private String url;
private String user;
private String passwd;
private Connection con;
private Statement stmt;
private ResultSet rs;

/**
* コンストラクタ
*/
public DatabaseAccess() {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://localhost:8080;databaseName=testdb;";
user = "";
passwd = "";
}
/**
* データベースに接続
*/
public synchronized void open() throws Exception {
// ドライバクラスをロード
Class.forName(driver);
// データベースへ接続
con = DriverManager.getConnection(url,user,passwd);
// ステートメントオブジェクトを生成
stmt = con.createStatement();
}
/**
* データベースから切断
*/
public synchronized void close() throws Exception {
if (stmt!=null) {
stmt.close();
}
if (con!=null) {
con.close();
}
}

/**
* クエリーを実行(検索)
*/
public ResultSet executeQuery(String sql) throws Exception {
return stmt.executeQuery(sql);
}
/**
* クエリーを実行(新規、更新、削除)
*/
public int executeUpdate(String sql) throws Exception {
return stmt.executeUpdate(sql);
}
}
//////////////////////////////////////

A 回答 (1件)

接続URLのportが8080になっていますが、これはTomcatのportでは


ないですか?
SQLServerの場合は、規定値 1433で、変更していなければ指定する必要はないと思いますが。
url = "jdbc:sqlserver://localhost:8080;databaseName=testdb;";

参考URL:http://msdn.microsoft.com/ja-jp/library/ms378428 …
    • good
    • 0
この回答へのお礼

>rooksanさん
すみません、一週間以上も音信不通になりまして・・・。
結局、試行錯誤の末、自己解決しました。
(ポートは8080で大丈夫のようです。)

DBに接続の際のユーザ名とパスワードが間違っていたという、凡ミスでした。。。

Microsoft SQL Server Management StudioでDB管理を行っておりましたが、その際のログインアカウント「Windows認証」でログインしていました。

「SQL server認証」のアカウントを作って試したところ、接続することができました。

以下、私が行った手順を示します。
1.Microsoft SQL Server Management Studioを起動します。
2.「Windows認証」か「SQLserver認証」でログインします。
3.「オブジェクトエクスプローラ」の「<サーバ名>」-「セキュリティ」-「ログイン」を右クリックし、「新しいログイン」を選択します。
4.以下の設定をします。
<<全般タグ>>
・ログイン名「sqlserver」(任意)
・「SQL Server認証」にチェック。
・パスワード「sqlserver」(任意)
・「パスワードポリシー」と「パスワードの期限を適用する」と「ユーザーは次回ログイン時にパスワードを変更する」のチェックを外す。
・「規定のデータベース」に「testdb」を選択します。
・「規定の言語」に「Japanese」を選択します。
<<サーバーロール>>
・「sysadmin」にチェックを入れる。
<<ユーザー マッピング>>
・[「testdb」の「マップ」にチェックを入れる。
<<状態>>
・データベースエンジンに接続する権限:許可
・ログイン:有効
5.OKをクリック。
6.以下のソースを変更。
public DatabaseAccess() {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://localhost:8080;databaseName=testdb;";
user = "";
passwd = "";
}
↓ 変更後
public DatabaseAccess() {
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://localhost:8080;databaseName=testdb;";
user = "sqlserver";
passwd = "sqlserver";

以上で、接続を確認できました。

お騒がせ致しました。

お礼日時:2008/07/30 19:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!