Comment vous connectez-vous à une base de données MySQL en Java?
Quand j'essaye, je reçois
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)
Ou
Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Ou
Java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
DriverManager
est une manière assez ancienne de faire les choses. Le meilleur moyen consiste à obtenir un DataSource
, soit en recherchant celui que votre conteneur de serveurs d'applications a déjà configuré pour vous:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("Java:comp/env/jdbc/myDB");
ou en instanciant et en configurant directement un à partir de votre pilote de base de données:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
et ensuite obtenir des connexions, comme ci-dessus:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
Voici une explication pas à pas comment installer MySQL et JDBC et comment l’utiliser:
Téléchargez et installez le serveur MySQL . Faites-le comme d'habitude. Rappelez-vous le numéro de port chaque fois que vous l'avez changé. C'est par défaut 3306
.
Téléchargez le pilote JDBC et mettez le chemin de classe , extrayez le fichier Zip et placez le fichier JAR contenant le chemin de classe. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de JDBC API ( tutoriel ici ).
Si vous utilisez un IDE comme Eclipse ou Netbeans, vous pouvez l'ajouter au chemin de classe en ajoutant le fichier JAR en tant que Library à l'élément Chemin de construction dans les propriétés du projet.
Si vous utilisez "plain Vanilla" dans la console de commande, vous devez spécifier le chemin d'accès au fichier JAR dans l'argument -cp
ou -classpath
lors de l'exécution de votre Java. application.
Java -cp.;/Chemin/vers/mysql-connector.jar com.example.YourClass
Le .
est juste là pour ajouter le répertoire actuel au chemin de la classe afin qu'il puisse localiser com.example.YourClass
et le ;
est le classpath separator tel qu'il est sous Windows. Sous Unix et les clones, :
devrait être utilisé.
Créez un base de données dans MySQL . Créons une base de données javabase
. Vous voulez bien sûr World Domination, alors utilisons aussi UTF-8.
CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Créer un utilisateur pour Java et accorder il y a accès . Tout simplement parce que root
est une mauvaise pratique.
CREATE USER 'Java'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON javabase.* TO 'Java'@'localhost' IDENTIFIED BY 'password';
Oui, Java
est le nom d'utilisateur et password
est le mot de passe ici.
Déterminez l'URL JDBC . Pour connecter la base de données MySQL avec Java, vous avez besoin d'une URL JDBC avec la syntaxe suivante:
jdbc: mysql: // nomhôte: port/nom de la base de données
hostname
: nom d'hôte sur lequel le serveur MySQL est installé. S'il est installé sur la même machine que celle où vous exécutez le code Java, vous pouvez simplement utiliser localhost
. Il peut également s'agir d'une adresse IP telle que 127.0.0.1
. Si vous rencontrez des problèmes de connectivité et que vous utilisez 127.0.0.1
au lieu de localhost
, vous avez un problème de configuration réseau/DNS/hôtes.
port
: port TCP/IP sur lequel le serveur MySQL écoute. Ceci est par défaut 3306
.
databasename
: nom de la base de données à laquelle vous souhaitez vous connecter. C'est javabase
.
Donc, l'URL finale devrait ressembler à:
jdbc: mysql: // localhost: 3306/javabase
Testez la connexion avec MySQL en utilisant Java . Créez une classe Java avec une méthode main()
pour tester la connexion.
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);
}
Si vous obtenez un SQLException: No suitable driver
, cela signifie que le pilote JDBC n’a pas été chargé automatiquement ou que l’URL JDBC est incorrecte (c’est-à-dire qu’il n’a été reconnu par aucun des pilotes chargés). Normalement, un pilote JDBC 4.0 devrait être chargé automatiquement lorsque vous le déposez dans le chemin d'accès aux classes à l'exécution. Pour exclure l'un et l'autre, vous pouvez toujours le charger manuellement comme ci-dessous:
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);
}
Notez que l'appel newInstance()
est pas nécessaire ici. C'est juste pour réparer le vieux et buggé org.gjt.mm.mysql.Driver
. Explication ici . Si cette ligne génère ClassNotFoundException
, le fichier JAR contenant la classe de pilote JDBC n'est tout simplement pas placé dans le chemin d'accès aux classes.
Notez qu'il n'est pas nécessaire de charger le pilote à chaque fois avant la connexion. Une seule fois lors du démarrage de l'application suffit.
Si vous obtenez un SQLException: Connection refused
ou Connection timed out
ou un CommunicationsException: Communications link failure
spécifique à MySQL, cela signifie que la base de données n'est pas du tout accessible. Cela peut avoir une ou plusieurs des causes suivantes:
Pour résoudre l'un ou l'autre, suivez les conseils suivants:
ping
.my.cnf
de la base de données MySQL.--skip-networking option
.finally
.Notez que fermer Connection
est extrêmement très important. Si vous ne fermez pas les connexions et continuez à en obtenir beaucoup dans un court laps de temps, la base de données risque de manquer de connexions et votre application risque de ne plus fonctionner. Obtenez toujours le Connection
dans une instruction try-with-resources
) . Ou, si vous n'êtes pas encore sur Java 7, fermez-le explicitement dans finally
d'un bloc try-finally
. Fermer finally
est juste pour s'assurer qu'il soit fermé aussi en cas d'exception. Ceci s'applique également à Statement
, PreparedStatement
et ResultSet
.
C'était tout ce qui concernait la connectivité. Vous pouvez trouver ici un tutoriel plus avancé sur la procédure de chargement et de stockage des objets de modèle Java dignes de ce nom dans une base de données à l'aide d'une classe DAO de base.
L'utilisation d'un modèle Singleton pour la connexion à la base de données est une mauvaise approche. Voir entre autres questions: http://stackoverflow.com/q/9428573/ . C'est une erreur de départ n ° 1.
Créez un nom d'utilisateur, un mot de passe, une URL et des pilotes de base de données de propriétés constantes, une limite d'interrogation, etc.
// 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
Une fois la connexion établie, il est préférable de la stocker pour la réutiliser.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
L'objet de propriétés contient les informations de connexion, vérifiez si elles sont déjà définies.
// 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;
}
Connectez-vous maintenant à la base de données en utilisant les constantes et les propriétés initialisées.
// 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;
}
Une fois que vous avez terminé vos opérations de base de données, fermez simplement la connexion.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Utilisez cette classe MysqlConnect
directement après avoir changé le nom de la base de données, le nom d'utilisateur et le mot de passe, etc.
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();
}
}
}
}
Initialise la classe de base de données.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
Quelque part d'autre dans votre code ...
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();
}
Ceci est tout ) Si quelque chose à améliorer, éditez-le! J'espère que c'est utile.
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);
Voici le minimum nécessaire pour extraire des données d'une base de données 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();
Ajoutez la gestion des exceptions, la configuration, etc. à votre goût.
Connexion MySQL JDBC avec useSSL.
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);
}
Code court et doux.
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();
}
Pour 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();
}
Vous pouvez voir toutes les étapes pour connecter la base de données MySQL à partir de Java application ici . Pour les autres bases de données, il vous suffit de modifier le pilote dans un premier temps uniquement. Assurez-vous de fournir le bon chemin d'accès à la base de données et de corriger le nom d'utilisateur et le mot de passe.
Visitez http://apekshit.com/t/51/Steps-to-connect-Database-using-Java
vous devez avoir le connecteur mysql jar dans votre chemin de classe.
dans Java L'API JDBC fait tout avec les bases de données. En utilisant JDBC, nous pouvons écrire Java applications sur
1. Envoyer des requêtes ou mettre à jour SQL vers la base de données (toute base de données relationnelle) 2. Récupérer et traiter les résultats depuis la base de données
avec ci-dessous trois étapes, nous pouvons pouvoir récupérer les données de toute base de données
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
J'utilisais il y a quelque temps, cela semblait être le moyen le plus simple, mais il y avait également une recommandation à faire, il y a if
déclaration- exactement
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Ou quelque chose comme ça :)
Il y a probablement un cas, alors que getConnection
peut retourner null
:)
Connexion 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
Méthode 1: définissez la variable CLASSPATH.
export CLASSPATH=".:mysql-connector-Java-VERSION.jar"
Java MyClassFile
Dans la commande ci-dessus, j'ai défini CLASSPATH sur le dossier actuel et le fichier mysql-connector-Java-VERSION.jar. Ainsi, lorsque la commande Java MyClassFile
sera exécutée, le lanceur d’applications Java tentera de charger toute la classe Java dans CLASSPATH. Et il a trouvé que les erreurs Drive
class => BOOM avaient disparu.
Méthode 2:
Java -cp .:mysql-connector-Java-VERSION.jar MyClassFile
Remarque: Class.forName ("com.mysql.jdbc.Driver"); il est déconseillé à ce moment-là le 201 avril.
J'espère que cela peut aider quelqu'un!