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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

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

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

5600閲覧

EclipseでjavaとMySQLを接続する際、データベースへのアクセスでエラーが発生しました。とエラーメッセージが出る。

tonaru

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

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

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/06/18 05:09

編集2021/06/18 05:31

前提・実現したいこと

EclipseでjavaとMySQLを接続したい。
下記のURLのやり方でやっています。
https://qiita.com/y0kk0/items/827e0ca99a0c4f4a91d6

■■な機能を実装中に以下のエラーメッセージが発生しました。

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

下記のURLの最後のコードを実行したができない。(userとパスワードのみ変えました)
https://qiita.com/y0kk0/items/827e0ca99a0c4f4a91d6

エラーメッセージ
データベースへのアクセスでエラーが発生しました。

該当のソースコード

java

1 2package java_mysql; 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9public class Test { 10 11 public static void main(String[] args) { 12 13 // 変数の準備 14 Connection con = null; 15 PreparedStatement stmt = null; 16 ResultSet rs = null; 17 18 // SQL文の作成 19 String sql = "SELECT * FROM test"; 20 21 try { 22 // JDBCドライバのロード 23 Class.forName("com.mysql.cj.jdbc.Driver"); 24 // データベース接続 25 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?serverTimezone=JST", "root", "uver3214"); 26 // SQL実行準備 27 stmt = con.prepareStatement(sql); 28 // 実行結果取得 29 rs = stmt.executeQuery(); 30 31 // データがなくなるまで(rs.next()がfalseになるまで)繰り返す 32 while (rs.next()) { 33 String id = rs.getString("id"); 34 String name = rs.getString("name"); 35 36 System.out.println(id + ":" + name); 37 } 38 } catch (ClassNotFoundException e) { 39 System.out.println("JDBCドライバのロードでエラーが発生しました"); 40 } catch (SQLException e) { 41 System.out.println("データベースへのアクセスでエラーが発生しました。"); 42 } finally { 43 try { 44 if (con != null) { 45 con.close(); 46 } 47 } catch (SQLException e) { 48 System.out.println("データベースへのアクセスでエラーが発生しました。"); 49 } 50 } 51 } 52 53}

試したこと

有効そうなサイトが見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

何を書けばいいかわからないので質問いただけると助かります。

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

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

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

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

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

K_3578

2021/06/18 05:19

ソースコードはMarkDownのcode機能で提示してください。 ```(バッククォート3つ)で囲んだ中がコードブロックになります。 ↓コメント欄はMarkDown使えないので型だけ例示 ```言語名 ソースコード ```
K_3578

2021/06/18 05:22 編集

内容読んでなかったので一回訂正する
dodox86

2021/06/18 05:31

> 下記のURLの最後のコードを実行したができない。(userとパスワードのみ変えました) えーと、参考にはしたが中身は理解していない、ということでしょうか。SQLException のエラーの詳細を調べましょう。
tonaru

2021/06/18 05:32

これでよろしいでしょうか?
tonaru

2021/06/18 05:33

ありがとうございます。調べてみます。
K_3578

2021/06/18 06:05

気になったのですが、なぜ質問者さんはこれをやっているのでしょうか。 学習目的だとしたら中身を理解するのが一番の目的だと思うのですが
tonaru

2021/06/18 06:22

会社の研修が終わり、現場に出る前の学習として上司の課題の通過点でこれをやっています。
K_3578

2021/06/18 06:24

上司からJavaとMySQLを接続出来るように学習しておくように指示されたって事ですか?
tonaru

2021/06/18 06:26

そうです。
K_3578

2021/06/18 06:31

多分もう少し基礎から理解された方が良いんじゃないでしょうか。 この記事の内容をそのままコピペして実行しただけでは自分が何をしているかも分からないのでは?
guest

回答2

0

タイムゾーンを消したら直りました。

投稿2021/06/21 01:49

tonaru

総合スコア1

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

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

m.ts10806

2021/06/21 01:53

質問内容とこの解決策が繋がりません。もう少し具体的に記載願います。 あとから見る人が参考にする内容にもなります。
tonaru

2021/06/25 01:00

二つ目のキャッチ文 catch (SQLException e) { System.out.println("データベースへのアクセスでエラーが発生しました。"); を catch (SQLException e) { e.printStackTrace(); System.out.println( e.getErrorCode() ); に変更したらエラー内容が表示されるようになり、データベース接続が出来ていないのがわかったのでデータベース接続のコメントのところの必要か疑問だった?serverTimezone=JSTを消してみたらコンソールに正しい結果が出ました。
tonaru

2021/06/25 01:01

遅れまして申し訳ございません。
m.ts10806

2021/06/25 01:03

「なぜそこが影響していたか」まで突っ込んでおかないとあまり価値のない情報になります。(なので「繋がらない」と書きました) 調べて回答本文に追記をお願いします。
guest

0

ベストアンサー

} catch (SQLException e) {

System.out.println("データベースへのアクセスでエラーが発生しました。"); } finally {

これは「例外を握りつぶす」と表現されるやり方です。
エラーは起きてるが起きてるエラー内容を確認するような実装をしていないという意味です。
e.printStackTrace()
として起きてるエラーを確認してください。

投稿2021/06/18 05:34

m.ts10806

総合スコア80875

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

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

m.ts10806

2021/06/18 05:35

そういえばなぜfinallyでもSQLExceptionを捕捉してるのだろう。
tonaru

2021/06/18 05:54 編集

ご回答ありがとうございます。 e.printStackTrace()として起きてるエラーを確認してください。 上記が理解できないので調べてみます。
m.ts10806

2021/06/18 05:55 編集

dodox86さん 補足ありがとうございます。 そこでException起きる場合は本気で異常事態な気もするのでthrowsで上の階層で処理してしまったほうが良さそうな気もします。個別に書いてあるのと重なってるのがあまり可読性もよろしくない
m.ts10806

2021/06/18 05:56 編集

tonaruさん catchなので「補足」ではなく「捕捉」です。「エラーハンドリング」の基本概念から調べたほうが良いと思います。
dodox86

2021/06/18 05:59 編集

finally節内でのtry~catchで包んだclose()は、旧来のJavaコードで良く見た形態のコードに思います。try-with-resources を使えばもう少しシンプルになるはずですが、close()を使うならどうしてもSQLExceptionをハンドリングしなければいけないし、close()直前に外的要因でコネクションに異常が生じた場合、やはり例外が起きるかもしれないので、まぁ、苦肉の策かもしれませんね。
m.ts10806

2021/06/18 06:01

そうですね。個人的には重なってるのがかなり気持ち悪く感じてしまったので。。
tonaru

2021/06/18 06:04

エラーハンドリングはエラーを認識できるできるようにすることで合っていますか? 申し訳ないのですが、始めたばかりで会話についていけません。何をすればいいのでしょうか?
m.ts10806

2021/06/18 06:07

「Java エラーハンドリング」で調べて どういうものか、何ができるのか、どう有用なのか を理解するようにしてください。
tonaru

2021/06/18 06:09

ありがとうございます。わかりました、わかったらまとめて説明します。
tonaru

2021/06/18 06:10

概要はエラーを認識できるできるようにすることでは足りないでしょうか?
dodox86

2021/06/18 06:12

@質問者さん 私のコメントは「finally節の中でcon.close()をtry~catch (SQLException e) するのは、あり得ないコードではないので、この際仕方が無いでしょう。」と言う程度のコメントですので現段階ではスルーしていただいて結構です。(が、何をやっているか理解されていないのであればそれはそれであとで問題になりますが) 混乱させると思うので、以降はコメントを控えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問