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
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();
以下に、MySQLとJDBCのインストール方法と使用方法を順を追って説明します。
ダウンロード およびMySQLサーバーをインストールします。普通の方法でやってください。ポート番号を変更したときは必ず覚えておいてください。デフォルトでは3306
です。
ダウンロード 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およびクローンでは、:
を使用する必要があります。
MySQLで データベース を作成します。データベースjavabase
を作成しましょう。もちろんあなたは世界支配を望んでいるので、UTF-8も使用しましょう。
CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ユーザーの作成 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
はパスワードです。
決定 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
接続をテストする 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つ以上の原因が考えられます。
どちらか一方を解決するには、次のアドバイスに従ってください。
ping
を使用してそれらを検証およびテストします。my.cnf
に基づいて検証します。--skip-networking option
なしでmysqldが起動されていることを確認します。finally
の接続を閉じます。Connection
を閉じることはextremely重要であることに注意してください。接続を閉じずに短時間で多くの接続を取得し続けると、データベースが接続を使い果たし、アプリケーションが壊れる場合があります。常に try-with-resources
ステートメント でConnection
を取得します。または、Java 7をまだ使用していない場合は、try-finally
ブロックのfinally
で明示的に閉じます。 finally
で閉じることは、例外が発生した場合にも確実に閉じられるようにするためです。これは、Statement
、PreparedStatement
、およびResultSet
にも適用されます。
接続に関する限り、それはそれでした。基本的なDAOクラスの助けを借りて、データベースに完全なJavaモデルオブジェクトをロードおよび保存する方法について、より高度なチュートリアル here を見つけることができます。
DB接続にシングルトンパターンを使用するのは、悪いアプローチです。他の質問をご覧ください: http://stackoverflow.com/q/9428573/ 。これは最初の間違いです。
定数プロパティデータベースのユーザー名、パスワード、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();
}
これで全部です :) 何か改善するためにそれを編集してください!これが役に立つことを願っています。
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);
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();
例外処理、構成などを好みに合わせて追加してください。
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);
}
短くてスウィートなコード。
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();
}
MySQLデータベースをJavaアプリケーション here から接続するためのすべてのステップを見ることができます。他のデータベースの場合は、最初のステップでドライバを変更するだけです。データベースへの正しいパスと、正しいユーザー名とパスワードを指定してください。
http://apekshit.com/t/51/Steps-to-connect.co.jpbase-using-Java にアクセスしてください。
あなたはあなたのクラスパスに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");
}
Connection
私が少し前に使っていた、それは最も簡単な方法のように見えていました、しかしまたif
ステートメントを作るように勧められました - 正確に
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
またはそのようなもの:)
getConnection
はnull
:)を返すことができますが、おそらくいくつかのケースがあります
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");
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
方法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月現在、これは非推奨です
これが誰かに役立つことを願っています!