web-dev-qa-db-ja.com

JavaをMySQLデータベースに接続する

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
292
abson

DriverManagerは、かなり古いやり方です。もっと良い方法はDataSourceを取得することです、あなたのアプリケーションサーバーコンテナがすでにあなたのために設定されているかを調べることによってです。

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("Java:comp/env/jdbc/myDB");

またはデータベースドライバから直接インスタンス化して設定する:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

それから上記と同じように、そこから接続を取得します。

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
193
Sean Owen

以下に、MySQLとJDBCのインストール方法と使用方法を順を追って説明します。

  1. ダウンロード およびMySQLサーバーをインストールします。普通の方法でやってください。ポート番号を変更したときは必ず覚えておいてください。デフォルトでは3306です。

  2. ダウンロード JDBCドライバーとclasspathに配置し、Zipファイルを抽出して、含まれるJARファイルをクラスパスに配置します。ベンダー固有のJDBCドライバーは、 JDBC APIチュートリアルはこちら )の具体的な実装です。

    EclipseやNetbeansなどのIDEを使用している場合は、JARファイルをLibraryとしてBuild Pathに追加することにより、クラスパスに追加できます。 =プロジェクトのプロパティ内。

    コマンドコンソールで「プレーンバニラ」を実行する場合は、Javaを実行するときに、-cpまたは-classpath引数でJARファイルへのパスを指定する必要があります。応用。

    Java -cp。;/path/to/mysql-connector.jar com.example.YourClass

    .は、クラスパスにcurrentディレクトリを追加するためだけにあり、com.example.YourClassを見つけることができ、;はそのままクラスパスセパレーターです。 Windowsで。 Unixおよびクローンでは、:を使用する必要があります。

  3. MySQLデータベース を作成します。データベースjavabaseを作成しましょう。もちろんあなたは世界支配を望んでいるので、UTF-8も使用しましょう。

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. ユーザーの作成 for Javaおよび grant it access。単にrootを使用するのは悪い習慣だからです。

    CREATE USER 'Java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'Java'@'localhost' IDENTIFIED BY 'password';
    

    はい、ここでJavaはユーザー名で、passwordはパスワードです。

  5. 決定 JDBC URL Javaを使用してMySQLデータベースに接続するには、次の構文のJDBC URLが必要です。

    jdbc:mysql:// hostname:port/databasename
    • hostname:MySQLサーバーがインストールされているホスト名。 Javaコードを実行するのと同じマシンにインストールされている場合は、localhostを使用できます。 127.0.0.1のようなIPアドレスにすることもできます。接続の問題が発生し、localhostの代わりに127.0.0.1を使用して解決した場合、ネットワーク/ DNS /ホストの設定に問題があります。

    • port:MySQLサーバーがリッスンするTCP/IPポート。これはデフォルトで3306です。

    • databasename:接続したいデータベースの名前。それはjavabaseです。

    したがって、最終URLは次のようになります。

    jdbc:mysql:// localhost:3306/javabase
  6. 接続をテストする 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が間違っている(つまり、ロードされたドライバーのいずれでも認識されていない)ことを意味します。通常、JDBC 4.0ドライバーは、ランタイムクラスパスにドロップするだけで自動ロードされる必要があります。いずれかを除外するには、次のようにいつでも手動でロードできます。

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    newInstance()呼び出しはここではnot必要ではないことに注意してください。古くてバグのあるorg.gjt.mm.mysql.Driverを修正するだけです。 ここの説明 。この行がClassNotFoundExceptionをスローする場合、JDBCドライバークラスを含むJARファイルはクラスパスに配置されていません。

    ドライバをロードする必要がないことに注意してくださいeverytimebefore接続。アプリケーションの起動時に一度だけで十分です。

    SQLException: Connection refusedまたはConnection timed outまたはMySQL固有のCommunicationsException: Communications link failureを取得する場合、DBにまったく到達できないことを意味します。これには、次の1つ以上の原因が考えられます。

    1. JDBC URLのIPアドレスまたはホスト名が間違っています。
    2. JDBC URLのホスト名は、ローカルDNSサーバーによって認識されません。
    3. JDBC URLにポート番号が欠落しているか間違っています。
    4. DBサーバーがダウンしています。
    5. DBサーバーはTCP/IP接続を受け入れません。
    6. DBサーバーの接続が不足しています。
    7. JavaとDBの間の何かが接続をブロックしています。ファイアウォールまたはプロキシ。

    どちらか一方を解決するには、次のアドバイスに従ってください。

    1. pingを使用してそれらを検証およびテストします。
    2. DNSを更新するか、JDBC URLで代わりにIPアドレスを使用してください。
    3. MySQL DBのmy.cnfに基づいて検証します。
    4. DBを起動します。
    5. --skip-networking optionなしでmysqldが起動されていることを確認します。
    6. DBを再起動し、それに応じてコードを修正して、finallyの接続を閉じます。
    7. ファイアウォールを無効にするか、ポートを許可/転送するようにファイアウォール/プロキシを構成します。

    Connectionを閉じることはextremely重要であることに注意してください。接続を閉じずに短時間で多くの接続を取得し続けると、データベースが接続を使い果たし、アプリケーションが壊れる場合があります。常に try-with-resourcesステートメントConnectionを取得します。または、Java 7をまだ使用していない場合は、try-finallyブロックのfinallyで明示的に閉じます。 finallyで閉じることは、例外が発生した場合にも確実に閉じられるようにするためです。これは、StatementPreparedStatement、およびResultSetにも適用されます。

接続に関する限り、それはそれでした。基本的なDAOクラスの助けを借りて、データベースに完全なJavaモデルオブジェクトをロードおよび保存する方法について、より高度なチュートリアル here を見つけることができます。


DB接続にシングルトンパターンを使用するのは、悪いアプローチです。他の質問をご覧ください: http://stackoverflow.com/q/9428573/ 。これは最初の間違いです。

455
BalusC

データベース定数を初期化する

定数プロパティデータベースのユーザー名、パスワード、URLとドライバ、ポーリング制限などを作成します。

// init database constants
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit

接続とプロパティを初期化する

接続が確立されたら、再利用目的で保管することをお勧めします。

// init connection object
private Connection connection;
// init properties object
private Properties properties;

プロパティを作成する

プロパティオブジェクトは接続情報を保持しています。それがすでに設定されているか確認してください。

// create properties
private Properties getProperties() {
    if (properties == null) {
        properties = new Properties();
        properties.setProperty("user", USERNAME);
        properties.setProperty("password", PASSWORD);
        properties.setProperty("MaxPooledStatements", MAX_POOL);
    }
    return properties;
}

データベースに接続する

今すぐ初期化された定数とプロパティを使って、データベースに接続します。

// connect database
public Connection connect() {
    if (connection == null) {
        try {
            Class.forName(DATABASE_DRIVER);
            connection = DriverManager.getConnection(DATABASE_URL, getProperties());
        } catch (ClassNotFoundException | SQLException e) {
            // Java 7+
            e.printStackTrace();
        }
    }
    return connection;
}

データベースを切断する

データベース操作が完了したら、接続を閉じます。

// disconnect database
public void disconnect() {
    if (connection != null) {
        try {
            connection.close();
            connection = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

すべて一緒に

Database_name、ユーザー名、パスワードなどを変更した後は、このクラスMysqlConnectを直接使用してください。

import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.SQLException;
import Java.util.Properties;

public class MysqlConnect {
    // init database constants
    private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";
    private static final String MAX_POOL = "250";

    // init connection object
    private Connection connection;
    // init properties object
    private Properties properties;

    // create properties
    private Properties getProperties() {
        if (properties == null) {
            properties = new Properties();
            properties.setProperty("user", USERNAME);
            properties.setProperty("password", PASSWORD);
            properties.setProperty("MaxPooledStatements", MAX_POOL);
        }
        return properties;
    }

    // connect database
    public Connection connect() {
        if (connection == null) {
            try {
                Class.forName(DATABASE_DRIVER);
                connection = DriverManager.getConnection(DATABASE_URL, getProperties());
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

    // disconnect database
    public void disconnect() {
        if (connection != null) {
            try {
                connection.close();
                connection = null;
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使い方?

データベースクラスを初期化します。

// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();

あなたのコードのどこか他の場所で...

String sql = "SELECT * FROM `stackoverflow`";
try {
    PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
    ... go on ...
    ... go on ...
    ... DONE ....
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    mysqlConnect.disconnect();
}

これで全部です :) 何か改善するためにそれを編集してください!これが役に立つことを願っています。

33
Madan Sapkota
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";

// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
23
heffaklump

MySQLデータベースからデータを取得するために最低限必要なものは次のとおりです。

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/foo", "root", "password");

Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();

例外処理、構成などを好みに合わせて追加してください。

13
Kilian Foth

UseSSLによるMySQL JDBC接続。

private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");

private String connectToDb() throws Exception {
   String jdbcDriver = "com.mysql.jdbc.Driver";
   String dbUrl = "jdbc:mysql://" + db_server  +
        "?verifyServerCertificate=false" +
        "&useSSL=true" +
        "&requireSSL=true";
    System.setProperty(jdbcDriver, "");
    Class.forName(jdbcDriver).newInstance();

    Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
    Statement statement = conn.createStatement();
    String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\"";
    ResultSet resultSet = statement.executeQuery(query);
    resultSet.next();
    return resultSet.getString(1);
}
4
AJC

短くてスウィートなコード。

try
    {       
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver Loaded");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
        //Database Name - testDB, Username - "root", Password - ""
        System.out.println("Connected...");         
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

SQL Server 2012の場合

try
    {
        String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; 
       //KHILAN is Host and 1433 is port number     
        Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("Driver Loaded");
        conn = DriverManager.getConnection(url);
        System.out.println("Connected...");
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
3
KhiLan PaTeL

MySQLデータベースをJavaアプリケーション here から接続するためのすべてのステップを見ることができます。他のデータベースの場合は、最初のステップでドライバを変更するだけです。データベースへの正しいパスと、正しいユーザー名とパスワードを指定してください。

http://apekshit.com/t/51/Steps-to-connect.co.jpbase-using-Java にアクセスしてください。

3
Jwalant

あなたはあなたのクラスパスにmysqlコネクタjarを持っている必要があります。

java JDBC APIでは、データベースを使ってすべてのものを作成できます。 JDBCを使ってJavaアプリケーションを書くことができます
1。クエリを送信するか、SQLをDB(任意のリレーショナルデータベース)に更新します。2. DBから結果を取得して処理します。

以下の3つのステップで、任意のデータベースからデータを取得することができます。

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");

while (rs.next()) {
    int x = rs.getInt("a");
    String s = rs.getString("b");
    float f = rs.getFloat("c");
}
3
kapil das

Connection私が少し前に使っていた、それは最も簡単な方法のように見えていました、しかしまたifステートメントを作るように勧められました - 正確に

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);
if (con != null){
 //..handle your code there 
}

またはそのようなもの:)

getConnectionnull :)を返すことができますが、おそらくいくつかのケースがあります

2
xxxvodnikxxx

MySql JDBC接続:

Class.forName("com.mysql.jdbc.Driver");     

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");         
Statement stmt=con.createStatement();            
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");  
0
Sarat Chandra
  • クイックサンプルを実行するようにドライバを設定するには
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J

2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:

No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development

Java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
  • CLASSPATHを設定する

方法1:CLASSPATH変数を設定します。

export CLASSPATH=".:mysql-connector-Java-VERSION.jar"
Java MyClassFile

上記のコマンドでは、CLASSPATHを現在のフォルダとmysql-connector-Java-VERSION.jarファイルに設定しました。そのため、Java MyClassFileコマンドが実行されると、JavaアプリケーションランチャーはCLASSPATH内のすべてのJavaクラスをロードしようとします。そしてDrive class => BOOMエラーがなくなったことがわかりました。

方法2:

Java -cp .:mysql-connector-Java-VERSION.jar MyClassFile

注:Class.forName( "com.mysql.jdbc.Driver"); 2019年4月現在、これは非推奨です

これが誰かに役立つことを願っています!

0
Nhat Dinh