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

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

新規登録して質問してみよう
ただいま回答率
85.36%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JDBC

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

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

367閲覧

android studio jdbc:sqlserver に接続できない

inko7050

総合スコア1

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JDBC

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

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2024/10/25 06:51

編集2024/10/25 06:53

実現したいこと

android studio JAVAの言語でjdbcを使用し MS SQL SERVERに接続に接続しデータを抽出したいです。
最終的には、 MS SQL SERVERからデータが抽出できればOK

発生している問題・分からないこと

エラーが出ているようで接続が出来ません。
エラー内容は下記
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "failed to connect to localhost/127.0.0.1 (port 1433) from /127.0.0.1 (port 60424) after 328ms: isConnected failed: ECONNREFUSED (Connection refused). 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.".

ファイアーフォールのポートの開放やSQLSERVER側のサービスなどの受入れ状態は、可能にしてあるつもりです。そもそもがサーバー側にたどり着いてないようにも見えますが、問題解決できず行き詰りました。

該当のソースコード

java

1android studio 2build.gradle へ追記------------------- 3  implementation libs.mssql.jdbc 4 5libs.versions.toml へ追記------------------- 6[versions] 7 mssqlJdbc = "10.2.0.jre8" 8[libraries] 9  mssql-jdbc = { module = "com.microsoft.sqlserver:mssql-jdbc", version.ref = "mssqlJdbc" } 10 11MainActivety.java から MSSQLConnection.java を呼び出し------- 12public class MSSQLConnection { 13 private static final String DB_URL = "jdbc:sqlserver://localhost\\SQLEX:1433;databaseName=MainDB;encrypt=false;integratedSecurity=false;"; 14 private static final String USER = "AAA"; 15 private static final String PASS = "BBBBB"; 16 17 String errMSS = "errだよ"; 18 19 public String getData() { 20 String result = ""; 21 try { 22 Log.d("LogD","接続中"); 23 Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); 24 25 if (connection != null) { 26 //System.out.println("接続成功!"); 27 Log.d("LogD","接続成功!"); 28 } else { 29 //System.out.println("接続失敗..."); 30 Log.d("LogD","接続失敗..."); 31 } 32 33 Statement stmt = connection.createStatement(); 34 String sql = "SELECT 〇〇 FROM dbo.T_×××"; 35 ResultSet rs = stmt.executeQuery(sql); 36 37 while (rs.next()) { 38 result += "データ: " + rs.getString("列") + "\n"; 39 } 40 41 rs.close(); 42 stmt.close(); 43 connection.close(); 44 } catch (Exception e) { 45 e.printStackTrace(); 46 Log.d("LogD",errMSS + ":" + DB_URL); 47 result = result + "接続エラー ???"; 48 } 49 return result; 50 } 51 52} 53 54Connection connection の所でエラーが出てるっぽい

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

基本的な実装とjdbc:sqlserver://の記入例

補足

接続成功! とも 接続失敗... のところまでたどりついていません。

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

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

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

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

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

jimbe

2024/10/25 13:46

sql server が localhost とは・・・android 内で sql server が動作しているのでしょうか? android studio で開発しているからといって android のコードが開発マシン(windows?) で動いているわけではありません。 エミュレータで動かしているなら localhost はエミュレータ自身です。 エミュレータからホストへのアクセス方法はドキュメントがありますので参考にされては如何でしょうか。 https://developer.android.com/studio/run/emulator-networking?hl=ja
inko7050

2024/10/27 03:23

ご回答ありがとうございます。 localhost はエミュレータ自身。 確かにと思いエミュレータを実行時にはドキュメンを参考にさせいただけたらと思います。先だって エミュレータを使用していましたので実機(Android端末)へ直接インストールし実行してみました。 するとSSL暗号化通信をしているつもりはないですが、SSLに関してエラーがでています。 これはエミュレータ実行時でも出てきているエラーだったりしてますが。。。 SSL暗号化有りで通信しろってことですかね? com.microsoft.sqlserver.jdbc.SQLServerException: "encrypt" プロパティが "false" に設定され、"trustServerCertificate" プロパティが "true" に設定されていますが、ドライバーは Secure Sockets Layer (SSL) 暗号化を使用して SQL Server へのセキュリティで保護された接続を確立できませんでした: エラー: Socket closed。
guest

回答1

0

ベストアンサー

簡単な回答になりますが、MSが提供しているjdbcには何故か修正されないバグがありsql serverの接続はできません。(具体的には通信時の暗号化の復号に失敗します)
代わりにJTDSドライバーに切り替えてください。
ソースコードはそのまま使えます。

また、接続文字列は正しく接続できるものを使用してください。

投稿2024/10/26 13:44

utm.

総合スコア320

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

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

inko7050

2024/10/27 03:25

JTDSドライバー?について調べてみます。
utm.

2024/10/27 03:38

まず先にlocalhostへ接続しに行こうとしているのを修正するのが懸命かと
inko7050

2024/11/02 16:17

String connectionUrl = "jdbc:sqlserver://192.168.xx.xxx\\SQLEXPRESS;databaseName=Main;user=xx;password=xxxxx;encrypt=false;trustServerCertificate=true;"; localhostから実際のIPへ置き換えました。接続はMSSQLSERVERにたどりついている感じはするのですが、 com.microsoft.sqlserver.jdbc.SQLServerException: "encrypt" プロパティが "false" に設定され、"trustServerCertificate" プロパティが "true" に設定されていますが、ドライバーは Secure Sockets Layer (SSL) 暗号化を使用して SQL Server へのセキュリティで保護された接続を確立できませんでした: エラー: Socket closed。 JTDSドライバーであればこのような問題はなくなると思っていいのでしょうか?
utm.

2024/11/03 08:27

1週間前にそう書いたと思いますが...
inko7050

2024/11/04 02:18

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 今までかなりこの問題に悩んでいましたが JTDSドライバーに切り替えにて接続文字列は少し修正しましが、シンプルな接続文字であっさり接続できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問