質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

1回答

4961閲覧

JavaWebアプリからSQL Serverに接続できない

suno907

総合スコア6

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2017/11/22 05:59

編集2017/11/23 01:39

###前提・実現したいこと
Linuxサーバーを構築、Webアプリを作成したところ、
別サーバーのSQLServerへの接続でエラーが発生します。
Eclipse上で実行した場合は接続できるのですが、
Tomcatにデプロイしブラウザで実行すると接続できません。

###発生している問題・エラーメッセージ

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host 192.168.10.174¥MSSQL_E01, port 1433 has failed. Error: "192.168.10.174¥MSSQL_E01: ??????????????. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
###該当のソースコード
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html; charset=UTF-8"); String connectionUrl = "jdbc:sqlserver://192.168.10.174¥¥MSSQL_E01;" + "databaseName=DB01;user=User001;password=******;"; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(connectionUrl); String SQL = "SELECT TOP 10 * FROM TABLE001"; stmt = con.createStatement(); rs = stmt.executeQuery(SQL); response.setContentType("text/html; charset=UTF-8"); while (rs.next()) { out.println("<br />"); out.println(rs.getString(1) + " " + rs.getString(2)); } } catch (Exception e) { out.println(e); e.printStackTrace(); } finally { if (rs != null) try { rs.close(); } catch(Exception e) {} if (stmt != null) try { stmt.close(); } catch(Exception e) {} if (con != null) try { con.close(); } catch(Exception e) {} } }

}

###試したこと
同じ接続方法でJavaアプリを作成し同じサーバーから実行したところ、正常に接続できました。

###補足情報(言語/FW/ツール等のバージョンなど)
【Webサーバー】
Centos7
Apache2.4.6 + Tomcat7.0.76
openjdk version 1.8.0_151

【DBサーバー】
WindowsServer2012
SQLServer2014

【開発環境】
Eclipse Oxygen(Tomcat7)

【JDBCドライバ】
mssql-jdbc-6.2.2.jre8.jar

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuniku

2017/11/22 06:28 編集

「 同じ接続方法でJavaアプリを作成し同じサーバーから実行 」 は、SQLServerのインスタンスが稼働するサーバとJavaアプリが同じサーバということでしょうか? ローカルでは接続できて、別サーバから実行できないのであれば、 DBサーバ Windows Server 2012 での ファイアウォール機能が有効のため、PORT解放されておらず、Webサーバ側から接続できないのではないでしょうか?
suno907

2017/11/22 06:41

わかりにくい記述で申し訳ありません。WebサーバーでJavaアプリを実行し、別サーバーのSQLServerに接続が出来たという意味です。
退会済みユーザー

退会済みユーザー

2017/11/22 15:02

エラーを見よう。 ホスト名として解決できないことがかかれてるじゃろ
suno907

2017/11/22 16:44 編集

Eclipse で実行するとホスト名が解決出来て、デプロイすると解決出来ないという事でしょうか。どのようにすればデプロイしても接続出来るようになるのか、ご教示願えませんでしょうか。
退会済みユーザー

退会済みユーザー

2017/11/23 00:20

`host: 192.168.10.174¥MSSQL_E01` をみたらプログラムを教えた幼稚園児でもピンとくるとおもうぞ
suno907

2017/11/23 01:46

上のソースでは¥が一つですが、この事ですか?実際のソースでは¥¥です。上のソース訂正しておきます。
kuniku

2017/11/24 04:42 編集

ホスト名に誤りがあるとしたら、SQLServerのインスタンス名、DB名の大文字・小文字を正しく記載しているかを確認した方がよいです
suno907

2017/11/24 06:40

ホスト名(IPアドレス)、インスタンス名、DB名に誤りはありません。もし誤りがあればeclipseとJavaアプリから接続出来るはずがありませんので。なぜWebサーバーにデプロイした場合に接続できなくなるのかが不明なのです。
退会済みユーザー

退会済みユーザー

2017/11/24 06:50

WindowsとLinuxでは\(円記号)の意味合いが違うからインスタンス名がホスト名に含まれている。(というかODBC経由以外で繋げたかしら)
guest

回答1

0

JDBC接続文字列があっているのに接続できない場合は、指定したIPアドレスではそのネットワークでは参照できないか、ポート1433がファイアウォールの設定によりブロックされている可能性があります。

投稿2017/11/24 16:01

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問