※ ChatGPTを利用し、要約された質問です(原文:JavaサーブレットからSQL Server の接続ができません。)
JavaサーブレットからSQL Serverの接続ができない
このQ&Aのポイント
JavaサーブレットからSQL Serverの接続ができないエラーが発生しました。エラーメッセージには「TDS ログイン前応答が不完全です。対象サーバーは SQL Server 2000 以降である必要があります。」と表示されています。デバッグを行った結果、データベースへの接続が失敗することがわかりました。
エラーメッセージには「TDS ログイン前応答が不完全です。対象サーバーは SQL Server 2000 以降である必要があります。」と表示されています。デバッグを行った結果、データベースへの接続が失敗することがわかりました。具体的には、Class.forName(driver);の行までは正常に実行されますが、次の行のcon = DriverManager.getConnection(url,user,passwd);でエラーが発生します。
JavaサーブレットからSQL Serverの接続ができない問題が発生しています。エラーメッセージには「TDS ログイン前応答が不完全です。対象サーバーは SQL Server 2000 以降である必要があります。」と表示されています。デバッグを行った結果、データベースへの接続が失敗しています。該当するコードは、Class.forName(driver);の行までは正常に実行されますが、次の行のcon = DriverManager.getConnection(url,user,passwd);でエラーが発生しています。
JavaサーブレットからSQL Server の接続ができません。
環境は、
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);
}
}
//////////////////////////////////////
お礼
>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"; 以上で、接続を確認できました。 お騒がせ致しました。