MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JavaとMySQLで発生するJDBCエラー「Unknown database」の原因と解決方法

JDBCエラー「Unknown database」とは?

このエラーは、MySQLに存在しないデータベースを指定して接続しようとした場合に発生します。JDBCでデータベースに接続する際、接続URL内のデータベース名が実際には存在しないと、「Unknown database(不明なデータベース)」という例外がスローされます。

ここでは、まずエラーが実際にどのように表示されるかを確認し、その後の解決方法を解説します。

エラーが発生するサンプルコード

以下はJavaのコード例です。ここでは、存在しないデータベース「onlinebookstore」を接続先として指定しています。

import java.sql.Connection;
import java.sql.DriverManager;
public class UnknownDatabaseDemo {
    public static void main(String[] args) {
        String JdbcURL = "jdbc:mysql://localhost:3306/onlinebookstore?useSSL=false";
        String Username = "root";
        String password = "123456";
        Connection con = null;
        try {
            con = DriverManager.getConnection(JdbcURL, Username, password);
            System.out.println("Connected to MySQL database");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

エラーの出力結果

上記のコードを実行すると、次のようなスタックトレースが出力されます。ポイントは最初の行にある「MySQLSyntaxErrorException: Unknown database 'onlinebookstore'」というメッセージです。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'onlinebookstore'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1714)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2199)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2025)
    at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:778)
    at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at UnknowDatabaseDemo.main(UnknowDatabaseDemo.java:15)

エラー画面のスクリーンショットは以下の通りです。

JavaとMySQLで発生するJDBCエラー「Unknown database」の原因と解決方法

エラーの解決方法

この種のエラーを解消するには、MySQLのコマンドラインにアクセスし、SHOW DATABASESコマンドを使って実際に存在するデータベースの一覧を確認します。そして、その中から本当に存在するデータベースを選んで接続URLに指定すればOKです。

ここでは多数のデータベースの中から「hb_student_tracker」というデータベースを選択します。以下はSHOW DATABASESコマンドで取得した全データベース名の一覧です。

JavaとMySQLで発生するJDBCエラー「Unknown database」の原因と解決方法

修正後のJDBCコード

次に、存在するデータベース「hb_student_tracker」に接続するよう修正したJDBCコードを示します。

import java.sql.Connection;
import java.sql.DriverManager;
public class UnknownDatabaseDemo {
    public static void main(String[] args) {
        String JdbcURL = "jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false";
        String Username = "root";
        String password = "123456";
        Connection con = null;
        try {
            con = DriverManager.getConnection(JdbcURL, Username, password);
            System.out.println("Connected to MySQL database");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

実行すると、今度は正常に接続され、コンソールに「Connected to MySQL database」と表示されます。出力結果のスクリーンショットは以下の通りです。

JavaとMySQLで発生するJDBCエラー「Unknown database」の原因と解決方法

まとめ

JDBCの「Unknown database」エラーは、接続URLに指定したデータベースがMySQLサーバー上に存在しないことが原因です。対処法としては、以下の手順が有効です。

  • MySQLコマンドラインでSHOW DATABASESを実行し、存在するデータベースを確認する
  • 接続URLのデータベース名を、実際に存在するものに修正する
  • データベース名のスペルミスや大文字・小文字の違いがないかも併せてチェックする

もし目的のデータベースがまだ作成されていない場合は、CREATE DATABASE文で事前に作成しておくことも忘れないようにしましょう。

  1. JavaでIPアドレスを指定してMySQLに接続する方法

    JavaからIPアドレス経由でMySQLデータベースに接続するには、DriverManager.getConnection()メソッドの引数にJDBC形式のMySQL URLを指定します。URL内のホスト名の部分にIPアドレスを記述すれば、ネットワーク上の別マシンで稼働しているMySQLサーバーへ直接接続することが可能です。 JDBC URLの構成要素 接続用URLは次のような形式で記述します。 jdbc:mysql://[IPアドレス]:[ポート番号]/[データベース名]?[オプション] IPアドレス:接続先MySQLサーバーが動作しているマシンのアドレス(例:192.168.43.14

  2. JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説

    PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var