Comment vous connecter à une base de données MySQL en Java?Connexion de Java à une base de données MySQL
Répondre
DriverManager
est une façon assez ancienne de faire les choses. La meilleure façon est d'obtenir un DataSource
, que ce soit en regardant un vers le haut que votre conteneur de serveur d'applications déjà configuré pour vous:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
ou instanciation et la configuration de l'un de pilote de base de données directement:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
et puis obtenir des connexions de lui, 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();
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);
ce qui est votre_base_de_données ici? nom de la base de données? –
Je vais répondre à ma propre question: C'est "yourdatabase" –
* newInstance() * n'est pas nécessaire. Est-ce? –
est ici le strict minimum dont vous avez besoin pour obtenir des données sur 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();
Ajouter la gestion des exceptions, la configuration, etc. au goût.
Voici une explication étape par étape comment installer MySQL et JDBC et comment l'utiliser:
Download et installer le serveur MySQL. Faites-le comme d'habitude. Rappelez-vous le numéro de port chaque fois que vous l'avez modifié. C'est par défaut
3306
.Download le pilote JDBC et mettre en classpath, extraire le fichier ZIP et placez le fichier contenant JAR dans le classpath. Le pilote JDBC spécifique au fournisseur est une implémentation concrète du JDBC API (tutorial here).
Si vous utilisez un IDE comme Eclipse ou Netbeans, vous pouvez l'ajouter à la classpath en ajoutant le fichier JAR comme Library au chemin de génération dans les propriétés du projet. Si vous le faites "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 application Java.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
Le
.
est juste là pour ajouter au classpath répertoire courant afin qu'il puisse localisercom.example.YourClass
et le;
est le séparateur de classpath comme il est dans Windows. Dans Unix et les clones:
doivent être utilisés.Créer un database 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;
Create an user pour Java et grant il accès. Tout simplement parce que l'utilisation de
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 le mot de passe estpassword
ici.Determine l'URL JDBC. Pour connecter la base de données MySQL en utilisant Java, vous avez besoin d'une URL JDBC dans la syntaxe suivante:
jdbc:mysql://hostname:port/databasename
hostname
: Le nom d'hôte où le serveur MySQL est installé. S'il est installé sur la même machine où vous exécutez le code Java, vous pouvez simplement utiliserlocalhost
. Il peut également s'agir d'une adresse IP telle que127.0.0.1
. Si vous rencontrez des problèmes de connectivité et que vous utilisez127.0.0.1
au lieu delocalhost
l'avez résolu, alors vous avez un problème dans votre configuration réseau/DNS/hosts.port
: Le port TCP/IP où le serveur MySQL écoute. C'est par défaut3306
.databasename
: Nom de la base de données à laquelle vous souhaitez vous connecter. C'estjavabase
.
Donc, l'URL finale devrait ressembler à:
jdbc:mysql://localhost:3306/javabase
Test the connection à MySQL en utilisant Java. Créez une classe Java simple 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 soit le pilote JDBC n'a pas été automatiquement chargé du tout ou que l'URL JDBC est erroné (à savoir qu'il n'a pas été reconnu par l'un des pilotes chargés). Normalement, un pilote JDBC 4.0 doit être automatiquement chargé lorsque vous le déposez simplement dans le classpath d'exécution. Pour exclure un et l'autre, vous pouvez toujours 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 est
newInstance()
pas nécessaire ici. C'est juste pour réparer le vieux et buggyorg.gjt.mm.mysql.Driver
. Explanation here. Si cette ligne lanceClassNotFoundException
, le fichier JAR contenant la classe de pilote JDBC n'est simplement pas placé dans le chemin de classe.Notez que vous n'avez pas besoin de charger le pilote à chaque foisavant la connexion. Juste une seule fois au démarrage de l'application est suffisant.
Si vous obtenez un
SQLException: Connection refused
ou unConnection timed out
ou unCommunicationsException: Communications link failure
spécifique à MySQL, cela signifie que le DB n'est pas accessible du tout. Cela peut avoir une ou plusieurs des causes suivantes:- L'adresse IP ou le nom d'hôte dans l'URL JDBC est incorrect.
- Le nom d'hôte dans l'URL JDBC n'est pas reconnu par le serveur DNS local.
- Le numéro de port est manquant ou incorrect dans l'URL JDBC.
- Le serveur de base de données est arrêté.
- Le serveur de base de données n'accepte pas les connexions TCP/IP.
- Le serveur de base de données n'a plus de connexions.
- Quelque chose entre Java et DB bloque les connexions, par ex. un pare-feu ou un proxy.
Pour résoudre l'un ou l'autre, suivez les conseils suivants:
- Vérifiez et testez avec
ping
. - Actualisez DNS ou utilisez l'adresse IP dans l'URL JDBC à la place.
- Vérifiez-le basé sur
my.cnf
de MySQL DB. - Démarrez le DB.
- Vérifiez si mysqld est démarré sans le
--skip-networking option
. - Redémarrez le DB et corrigez votre code en conséquence qu'il ferme les connexions au
finally
. - Désactiver le pare-feu et/ou configurer pare-feu/proxy pour autoriser/transférer le port.
Notez que la fermeture de la
Connection
est extrêmement importante. Si vous ne fermez pas les connexions et n'en conservez pas beaucoup dans un court laps de temps, la base de données risque de manquer de connexions et votre application risque de se casser. Acquiers toujours leConnection
dans untry-with-resources
statement. Ou si vous n'êtes pas encore sur Java 7, fermez-le explicitement dansfinally
d'un bloctry-finally
. La fermeture enfinally
est juste pour s'assurer qu'il se ferme aussi bien en cas d'exception. Ceci s'applique également àStatement
,PreparedStatement
etResultSet
.
C'était aussi loin que les problèmes de connectivité. Vous pouvez trouver here un didacticiel plus avancé sur le chargement et le stockage d'objets de modèle Java complets dans une base de données à l'aide d'une classe DAO de base. L'utilisation d'un motif Singleton pour la connexion DB est une mauvaise approche. Voir entre autres questions: http://stackoverflow.com/q/9428573/. C'est une erreur # 1 étoiles.
Vous pouvez voir toutes les étapes pour connecter la base de données MySQL à partir de l'application Java here. Pour les autres bases de données, il suffit de changer le pilote dans la première étape seulement. Assurez-vous de fournir le bon chemin vers 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 pot de connecteur mysql dans votre classpath.
en Java L'API JDBC crée tout avec des bases de données.en utilisant JDBC, nous pouvons écrire des applications Java pour
1. Envoyer requêtes SQL ou mise à jour de DB (toute base de données relationnelle) 2. Récupérer et traiter les résultats de DB
avec ci-dessous trois étapes que nous pouvons en mesure de récupérer des données à partir de tout 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, il était à la recherche comme la meilleure façon, mais aussi il y avait recommandation pour y faire if
Instruction- exactement
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Ou quelque chose comme de cette façon :)
Probablement, il y a un certain cas, alors que getConnection
peut retourner null
:)
base de données Initialiser constantes
Créer nom d'utilisateur de base de données de propriétés constantes, mot de passe , URL et pilotes, 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
Connexion et Propriétés Initialiser
Une fois la connexion établie, il est préférable de stocker à des fins de réutilisation.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
Créer des propriétés
Les propriétés objet contiennent les informations de connexion, vérifiez si elle est déjà définie.
// 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 la base de données
maintenant se connecter à 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;
}
Débranchez la base de données
Une fois que vous avez terminé avec les opérations de base de données, il suffit de fermer la connexion.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Tout ensemble
Utilisez cette classe MysqlConnect
directement après le changement bdd, nom d'utilisateur et 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();
}
}
}
}
Comment utiliser?
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();
}
C'est tout :) Si quoi que ce soit pour améliorer l'éditer! J'espère que c'est utile.
Mark, est-ce que chaque classe a besoin de maintenir sa propre instance MysqlConnect séparée ouverte à tout moment - en supposant qu'ils doivent interagir avec les données? Je me demande simplement comment cette configuration fonctionne entre les classes. –
Belle classe. Je vous remercie. –
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();
}
MySql JDBC Connection:
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");
JDBC MySQL avec connexion 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);
}
Short Code
public class DB {
public static Connection c;
public static Connection getConnection() throws Exception {
if (c == null) {
Class.forName("com.mysql.jdbc.Driver");
c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password");
}
return c;
}
// Send data TO Database
public static void setData(String sql) throws Exception {
DB.getConnection().createStatement().executeUpdate(sql);
}
// Get Data From Database
public static ResultSet getData(String sql) throws Exception {
ResultSet rs = DB.getConnection().createStatement().executeQuery(sql);
return rs;
}
}
quelque chose ne va pas avec votre indentation, 1 fermeture '}' est manquant, s'il vous plaît vérifier et corriger. Cordialement – YakovL
Merci Bro! YakovL :) –
- 1. Connexion à une base de données MySQL
- 2. Problème de connexion à la base de données mysql distante
- 3. Problème de connexion à la base de données MySQL externe
- 4. Flash Media Server + Connexion à la base de données? Mysql?
- 5. connexion à la base de données phpMyAdmin avec PHP/MySQL
- 6. Connexion à base de données MySQL avec PHP
- 7. mod_rewrite, .htaccess connexion à la base de données mysql
- 8. Connexion locale à la base de données
- 9. Java autogénéré Codage de la connexion à la base de données MySQL
- 10. Connexion à la base de données PHP
- 11. Python Connexion à une base de données Fermer
- 12. Écran de connexion de l'application iPhone + Base de données MySQL
- 13. Mocking une connexion de base de données
- 14. Sécuriser une base de données à partir de clients Java
- 15. problème de connexion de base de données mysql en php
- 16. Connexion de FLEX 3.0, JAVA avec MYSQL
- 17. Meilleure façon de gérer la connexion à une base de données pour une servlet Java
- 18. Connexion à une autre base de données mysql et mise à jour des tables de base de données lorsqu'une autre base de données est mise à jour
- 19. problèmes de connexion de base de données SQLite java/Eclipse
- 20. Fluent Nhibernate: Impossible de créer une connexion de base de données à MySQL
- 21. Java JDBC connexion à MySQL
- 22. Connexion de l'applet Java avec la base de données
- 23. Connexion de l'iPhone à une base de données ODBC
- 24. système de connexion avec base de données mySql
- 25. Comment forcer un thread Java à fermer une connexion de base de données locale de thread
- 26. Connexion à une base de données Access avec un mot de passe de base de données
- 27. Java + Tomcat, Connexion de base de données Mourir?
- 28. Java-Mysql Erreur de connexion
- 29. C# connexion à la base de données
- 30. Connexion à la base de données PHPBB
comment les autres exemples utilisent 'com.mysql.jdbc.Driver'? cette méthode est-elle meilleure? –
Je pense que c'est la vieille classe de pilote qui fonctionne avec le mécanisme de pilote à l'ancienne. 'MysqlDataSource' implémente' javax.sql.DataSource' qui est le mécanisme le plus récent. –
@SeanOwen +1 pour une bonne explication. Je n'étais pas au courant de cette méthode, car la plupart des gens parlent de DriverManager. –