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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

1回答

3359閲覧

ハンドルさていない Win32のエラー mysql にて

kit_break

総合スコア14

MySQL

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2017/08/07 04:05

編集2022/01/12 10:55

###前提・実現したいこと
eclipse環境でC++を使いMYSQLに接続しデータを取得しようとしています。
ドライバの生成まではできるようになっているのですが、connection でデータベースに接続しようとすると
ファイル名 . exeハンドルさていない Win32のエラー といった表示がされプログラムが終了してしまいます。C++でデータベースに接続できれば良いだけなのですがうまくいっていません。

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

エラーメッセージ ファイル名 . exeハンドルさていない Win32のエラー

###該当のソースコード

#include <stdlib.h> #include <iostream> #include "driver/mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; int main(void) { try { sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; driver = get_driver_instance(); //ここでWin32の例外が発生 con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cout << "# ERR: SQLException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line "<< __LINE__ << endl; cout << "# ERR: " << e.what(); cout << " (MySQL error code: " << e.getErrorCode(); cout << ", SQLState: " << e.getSQLState() << " )" << endl; } cout << endl; return EXIT_SUCCESS; }

###試したこと
アドオンを消して実行してみましたが結果は変わらず。
そもそもデバッガーの動作からライブラリの中に入って例外が発生しているようで直接的な原因を絞り込めていません。

###補足情報(言語/FW/ツール等のバージョンなど)
eclipse 4.4
COnnector/C++ 1.19

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

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

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

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

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

hmmm

2017/08/07 09:15

catchをstd::exceptionに変更してそれでも駄目ならイベントログの出力内容を確認してください。
kit_break

2017/08/07 09:53

std::exception に変更しても結果は変わりませんでした。そもそもバインドされていないエラーですから、try catch で拾えないのではないのでしょうか?後、申し訳ありませんがイベントログの出力内容はどうすれば確認できますか?
kit_break

2017/08/07 10:03

すみません。イベントログの内容が確認できました エラーログを載せます アプリケーション ポップアップ: Visual Studio Just-In-Time Debugger : An unhandled win32 exception occurred in connect.exe [6784]. Just-In-Time debugging this exception failed with the following error: No installed debugger has Just-In-Time debugging enabled. In Visual Studio, Just-In-Time debugging can be enabled from Tools/Options/Debugging/Just-In-Time. Check the documentation index for 'Just-in-time debugging, errors' for more information. ちなみに現場の環境でeclipse で開発を行っていますので visual studio はインストールしてません
kit_break

2017/08/07 11:00

原因特定できました。エラーコード 0xc0000005 のメモリアクセス違反でした。どうやらmysqlcppconn.dll ライブラリでメモリに不正アクセスしているようです。ありがとうございました。
hmmm

2017/08/07 11:13

アクセス違反とかはc++の言語機能と関係ないところの話なので、構造化例外処理というのでキャッチします。MSの独自仕様です。eclipseで使えるかは知りません。
guest

回答1

0

まずはご自身のコード内で例外をキャッチして原因を特定すべきかと思います。

参考:MySQL Connector/C++ Developer Guide / Getting Started with Connector/C++: Usage Examples / Complete Example 1

投稿2017/08/07 04:26

can110

総合スコア38233

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

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

kit_break

2017/08/07 04:54

一応、このテストコードも実行してみたのですが、ハンドルされていない Win32エラーのためか try catch で拾えないようなんですよね。おかげで強制終了してしまいます。 原因は con = driver ->connect() で接続しようとすると発生することはわかっているのですが。。。
can110

2017/08/07 05:11

念のため、質問本文のコードを、try/catchを追加したコードに修正ください。 またEclipseでの手順は不明ですが、通常の開発環境(IDE)であればデバッグ実行することによりハンドルしていない例外内容を確認できますが、確認できますでしょうか?
kit_break

2017/08/07 05:22

ハンドルされていない例外内容なのですが、ファイル名.exe [エラー番号] ハンドルされていない と表示されます。このエラー番号なのですが固定値ではなく、1000 ~ 10000程度の間で様々な数値になるため余りあてになりませんでした。もしかしたら、ポインタがNULLを指しているのではと考えたりしましたが原因はわかっていません。一応、コードを添付します。 #include <stdlib.h> #include <iostream> #include "driver/mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; int main(void) { try { sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; driver = get_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cout << "# ERR: SQLException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line "<< __LINE__ << endl; cout << "# ERR: " << e.what(); cout << " (MySQL error code: " << e.getErrorCode(); cout << ", SQLState: " << e.getSQLState() << " )" << endl; } cout << endl; return EXIT_SUCCESS; }
kit_break

2017/08/07 05:23

結果は 変わらず con = driver -> connect() をコールすると強制終了してしまいます。
can110

2017/08/07 05:35

コードはコメント欄ではなく質問本文に記載(追記)すると整形されるので見やすいです。 Eclipseにてデバッグ実行(コードをステップ実行)し、 ・driver変数はNULLではない。 ・con = driver~を実行してもcatch句に移行せず、Eclipse上でもWin32例外を捕捉できない ということでしょうか?
kit_break

2017/08/07 05:45

・driver変数はNULLではない。 -> driver = NULL で定義し、get_driver_instance() 実行後、NULLではなくなっていることは確認しています ・con = driver~を実行してもcatch句に移行せず、Eclipse上でもWin32例外を捕捉できない ということでしょうか? -> その通りです。catch せずに飛ばず実行後数秒でエラーが発生してしまいます。
can110

2017/08/07 06:10

例外が捕捉できないと原因の特定は難しいですね。。。 あとは完全に推測ですが ・MySQLにTCP接続できない状態(設定)になっている ・ユーザー、パスワードに誤りがある くらいでしょうか。お役に立てずすみません。
kit_break

2017/08/07 06:37

試しているのですがユーザー、パスワードは関係ないようです con = driver->connect("", "", ""); このようにポート、ユーザー、パスワードを未入力で実行しても同じ結果が返ってきました。もっと根本的な問題のような気がしてきました。 後、TCPの設定はデフォルトなのでTCPの接続は有効になっていました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問