Java で MySQL データベースに接続するにはどうすればよいですか?
試してみると
java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
または
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
または
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
ベストアンサー1
MySQL と JDBC のインストール方法と使用方法を段階的に説明します。
ダウンロードそして、MySQL サーバーをインストールします。通常の方法で実行してください。ポート番号を変更したときは、それを覚えておいてください。これはデフォルトです
3306
。ダウンロードJDBCドライバをダウンロードしてクラスパスに配置し、ZIPファイルを解凍して、その中のJARファイルをクラスパスに配置します。ベンダー固有のJDBCドライバは、JDBC API(チュートリアルはこちら)。
Eclipse や Netbeans などの IDE を使用している場合は、プロジェクトのプロパティのビルド パスにJAR ファイルをライブラリとして追加することで、クラスパスに追加できます。
コマンド コンソールで「プレーン バニラ」を実行する場合は、 Java アプリケーションを実行するときに、
-cp
または引数で JAR ファイルへのパスを指定する必要があります。-classpath
java -cp .;/path/to/mysql-connector.jar com.example.YourClass
は、現在のディレクトリをクラスパスに追加して、ディレクトリを特定できるようにするための
.
ものであり、Windows の場合と同様に、はクラスパスの区切り文字です。Unix では、およびクローンを使用する必要があります。com.example.YourClass
;
:
/WEB-INF/lib
サーブレットベースの WAR アプリケーションを開発していて、手動で接続を管理したい場合 (実際にはあまり良い方法ではありません)、JAR がビルドに含まれるようにする必要があります。java.lang.ClassNotFoundException に遭遇せずに JAR ライブラリを WAR プロジェクトに追加する方法 クラスパスとビルド パスと /WEB-INF/lib の違いより良い方法は、物理 JDBC ドライバー JAR ファイルをサーバー自体にインストールし、JDBC 接続プールを作成するようにサーバーを構成することです。Tomcat の例を次に示します。サーブレット ベースのアプリケーションで JDBC データベース/データ ソースに接続するにはどうすればよいですか?作成するデータベースMySQL でデータベースを作成しましょう
javabase
。もちろん World Domination が目的なので、UTF-8 も使用しましょう。CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ユーザーを作成するJavaおよび付与アクセスします。単に使用するのは
root
悪い習慣だからです。CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
はい、
java
ユーザー名は 、password
パスワードは です。決定するJDBC URL。Javaを使用して MySQL データベースに接続するには、次の構文の JDBC URL が必要です。
jdbc:mysql://ホスト名:ポート/データベース名
hostname
: MySQL サーバーがインストールされているホスト名。Java コードを実行するのと同じマシンにインストールされている場合は、 を使用できますlocalhost
。 のような IP アドレスにすることもできます127.0.0.1
。接続の問題が発生し、127.0.0.1
ではなく を使用してもlocalhost
解決しない場合は、ネットワーク/DNS/ホスト構成に問題があります。port
: MySQL サーバーが listen する TCP/IP ポート。これはデフォルトです3306
。databasename
: 接続するデータベースの名前。 ですjavabase
。
したがって、最終的な URL は次のようになります。
jdbc:mysql://localhost:3306/javabase
接続をテストするJava を使用して MySQL に接続します
main()
。接続をテストするメソッドを含む簡単な Java クラスを作成します。String url = "jdbc:mysql://localhost:3306/javabase"; String username = "java"; String password = "password"; System.out.println("Connecting database ..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); }
が表示された場合は
SQLException: No suitable driver
、JDBC ドライバーがまったく自動ロードされなかったか、JDBC URL が間違っている (つまり、ロードされたドライバーのいずれにも認識されなかった) ことを意味します。悪名高い java.sql.SQLException: 適切なドライバーが見つかりません通常、JDBC 4.0 ドライバーは、ランタイム クラスパスにドロップするだけで自動的にロードされます。一方または他方を除外するには、次のように手動でロードすることができます。System.out.println("Loading driver ..."); try { Class.forName("com.mysql.cj.jdbc.Driver"); // Use com.mysql.jdbc.Driver if you're not on MySQL 8+ yet. System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); }
newInstance()
ここでの呼び出しは必要ないことに注意してください。MySQL の場合は、古くてバグのある を修正するだけですorg.gjt.mm.mysql.Driver
。説明はこちらこの行が をスローする場合ClassNotFoundException
、JDBC ドライバー クラスを含む JAR ファイルがクラスパスに配置されていないだけです。また、コードの実行を抑制したり、スタック トレースを印刷して残りのコードを続行するのではなく、例外をスローしてコードの実行がすぐにブロックされるようにすることが非常に重要であることにも注意してください。また、接続する前に毎回 ドライバーをロードする必要はないことに注意してください。アプリケーションの起動時に 1 回だけロードすれば十分です。
SQLException: Connection refused
または 、あるいはConnection timed out
MySQL 固有の が表示された場合CommunicationsException: Communications link failure
、DB にまったくアクセスできないことを意味します。これには、次の 1 つ以上の原因が考えられます。- JDBC URL の IP アドレスまたはホスト名が間違っています。
- JDBC URL 内のホスト名がローカル DNS サーバーによって認識されません。
- JDBC URL にポート番号がないか、間違っています。
- DBサーバーがダウンしています。
- DB サーバーは TCP/IP 接続を受け入れません。
- DB サーバーの接続が不足しています。
- Java と DB の間にある何か (ファイアウォールやプロキシなど) が接続をブロックしています。
どちらか一方の問題を解決するには、次のアドバイスに従ってください。
- で検証し、テストします
ping
。 - DNS を更新するか、代わりに JDBC URL で IP アドレスを使用してください。
my.cnf
MySQL DB に基づいて検証します。- DBを起動します。
- mysqld が なしで起動されているかどうかを確認します
--skip-networking option
。 - DB を再起動し、接続を閉じるようにコードを修正します
finally
。 - ファイアウォールを無効にするか、またはポートを許可/転送するようにファイアウォール/プロキシを構成します。
を閉じることは非常に
Connection
重要です。接続を閉じずに短時間に大量の接続を取得し続けると、データベースの接続が不足し、アプリケーションが機能しなくなる可能性があります。 を常にConnection
try-with-resources
声明Statement
。これは、PreparedStatement
およびにも適用されますResultSet
。以下も参照してください。JDBC では、Connection、Statement、ResultSet をどのくらいの頻度で閉じる必要がありますか?
接続性に関しては以上です。ここ基本的な DAO クラスを使用して、完全な Java モデル オブジェクトをデータベースにロードして保存する方法を説明する、より高度なチュートリアルです。
static
DBにシングルトンパターンや変数を使用するのは悪い習慣Connection
です。マルチスレッド システムで静的 java.sql.Connection インスタンスを使用するのは安全ですか?これは初心者が犯す一番の間違いです。この罠に陥らないように注意してください。