Maison > Java > Connectez Java à la base de données MySQL

Connectez Java à la base de données MySQL

王林
Libérer: 2024-02-22 12:58:14
avant
802 Les gens l'ont consulté

L'éditeur php Banana vous propose une question et une réponse spéciales sur la connexion de Java à une base de données MySQL. Cet article vous expliquera comment vous connecter à une base de données MySQL dans une application Java, vous permettant ainsi de maîtriser facilement les connaissances pertinentes et d'améliorer vos compétences en programmation. Que vous soyez débutant ou développeur expérimenté, vous pouvez trouver dans cet article une solution qui vous convient pour rendre les opérations de base de données plus efficaces et plus pratiques. Allons-y !

Contenu de la question

Comment se connecter à la base de données MySQL en utilisant Java ?

Quand j'essaye, j'obtiens

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)
Copier après la connexion

ou

java.lang.classnotfoundexception: com.mysql.jdbc.driver
Copier après la connexion

ou

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Copier après la connexion

Solution

数据源

drivermanager 是一种相当古老的做事方式。更好的方法是获取 DataSource Objet. Vous pouvez utiliser JNDI pour trouver le conteneur du serveur d'applications qui a été configuré pour vous :

context context = new initialcontext();
datasource datasource = (datasource) context.lookup("java:comp/env/jdbc/mydb");
Copier après la connexion

…ou instancier et configurer un directement à partir du pilote de base de données, par exemple com.mysql.cj.jdbc.mysqldatasource (voir la documentation) :

mysqldatasource datasource = new mysqldatasource();
datasource.setuser("scott");
datasource.setpassword("tiger");
datasource.setservername("mydbhost.example.org");
Copier après la connexion

…puis obtenez la connexion, 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();
Copier après la connexion

En Java moderne, utilisez la syntaxe try-with-resources pour fermer automatiquement les ressources jdbc (maintenant AutoCloseable).

try (
    connection conn = datasource.getconnection();
    statement stmt = conn.createstatement();
    resultset rs = stmt.executequery("select id from users");
) {
    …
}
Copier après la connexion

Voici des instructions étape par étape sur la façon d'installer MySQL et jdbc et comment les utiliser :

  1. Téléchargez et installez le serveur MySQL. Faites-le simplement de la manière habituelle. N'oubliez pas cela chaque fois que vous modifiez le numéro de port. La valeur par défaut est 3306.

  2. Téléchargez le pilote jdbc et placez-le dans le chemin de classe, décompressez le fichier zip et placez le fichier jar inclus dans le chemin de classe. Les pilotes jdbc spécifiques au fournisseur sont des implémentations concrètes de l'API JDBC (tutoriel ici).

    Si vous utilisez un IDE comme Eclipse ou Netbeans, vous pouvez ajouter le fichier jar au chemin de classe en l'ajoutant en tant que bibliothèque à la propriété Build Path de votre projet.

    Si vous faites cela de la manière "normale" dans la console de commande, vous devez spécifier le chemin d'accès au fichier jar dans le paramètre -cp-classpath lors de l'exécution de l'application Java.

    java -cp .;/path/to/mysql-connector.jar com.example.yourclass
    Copier après la connexion

    . 只是将当前目录添加到类路径中,以便它可以找到 com.example.yourclass 是类路径分隔符,因为它在视窗。在 unix 和克隆中,应使用 :.

    Si vous développez une application de guerre basée sur des servlets et que vous souhaitez gérer les connexions manuellement (en fait, c'est une mauvaise pratique), alors vous devez vous assurer que le fichier jar se retrouve dans le /web-inf/lib de votre build. Voir aussi Comment ajouter des bibliothèques JAR au projet WAR sans faire face à java.lang.ClassNotFoundException ? Classpath vs Build Path vs /WEB-INF/lib. Une meilleure approche consiste à installer le fichier jar du pilote physique jdbc sur le serveur lui-même et à configurer le serveur pour créer un pool de connexions jdbc. Voici un exemple pour Tomcat : Comment dois-je me connecter à la base de données/source de données JDBC dans une application basée sur un servlet ?

  3. Créez une base de données dans MySQL. Créons une base de données javabase. Bien sûr, vous voulez gouverner le monde, c'est pourquoi nous utilisons également utf-8.

    create database javabase default character set utf8 collate utf8_unicode_ci;
    Copier après la connexion
  4. java accède à Créer un utilisateur, qui accède à grant. Tout simplement parce qu'utiliser root est une mauvaise pratique.

    create user 'java'@'localhost' identified by 'password';
     grant all on javabase.* to 'java'@'localhost' identified by 'password';
    Copier après la connexion

    Oui, voici java 是用户名,password le mot de passe.

  5. Déterminez URL jdbc. Pour vous connecter à la base de données MySQL à l'aide de Java, vous avez besoin de l'URL jdbc avec la syntaxe suivante :

    jdbc:mysql://hostname:port/databasename
    Copier après la connexion
    • hostname:安装 mysql 服务器的主机名。如果它安装在运行 java 代码的同一台机器上,那么您可以只使用 localhost。它也可以是 ip 地址,例如 127.0.0.1。如果您遇到连接问题,并且使用 127.0.0.1 而不是 localhost 解决了该问题,那么您的网络/dns/主机配置有问题。

    • port:mysql 服务器监听的 tcp/ip 端口。默认情况下为 3306

    • databasename:您要连接的数据库的名称。那是 javabase

    所以最终的 url 应如下所示:

    jdbc:mysql://localhost:3306/javabase
    Copier après la connexion
  6. Test the connection 使用 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);
     }
    
    Copier après la connexion

    如果您收到 sqlexception: no合适的驱动程序,则意味着 jdbc 驱动程序根本没有自动加载,或者 jdbc url 错误(即,任何加载的驱动程序都无法识别它)。另请参见 The infamous java.sql.SQLException: No suitable driver found。通常,当您将 jdbc 4.0 驱动程序放入运行时类路径中时,应该会自动加载它。要排除其中一个或另一个,您可以随时手动加载它,如下所示:

     System.out.println("Loading driver ...");
    
     try {
         Class.forName("com.mysql.cj.jdbc.Driver"); // Use com.mysql.jdbc.Driver if you're not on MySQL 8+ yet.
         System.out.println("Driver loaded!");
     } catch (ClassNotFoundException e) {
         throw new IllegalStateException("Cannot find the driver in the classpath!", e);
     }
    
    Copier après la connexion

    请注意,此处不需要调用 newinstance() 。对于mysql,只是为了修复旧的且有缺陷的org.gjt.mm.mysql.driverExplanation here。如果此行抛出 classnotfoundexception,则说明包含 jdbc 驱动程序类的 jar 文件根本没有放置在类路径中。另请注意,抛出异常非常重要,以便立即阻止代码执行,而不是仅仅打印堆栈跟踪然后继续执行其余代码来抑制它。

    另请注意,您不需要每次在连接之前加载驱动程序。只需在应用程序启动期间一次就足够了。

    如果您收到 sqlexception: 连接被拒绝 connection timed out 或 mysql 特定的 communicationsexception: 通信链路故障 ,则意味着数据库根本无法访问。这可能由以下一个或多个原因造成:

    1. jdbc url 中的 ip 地址或主机名错误。
    2. 本地 dns 服务器无法识别 jdbc url 中的主机名。
    3. jdbc url 中的端口号缺失或错误。
    4. 数据库服务器已关闭。
    5. 数据库服务器不接受 tcp/ip 连接。
    6. 数据库服务器已耗尽连接。
    7. java 和 db 之间的某些东西正在阻塞连接,例如防火墙或代理。

    要解决其中一个问题,请遵循以下建议:

    1. 使用 ping 验证并测试它们。
    2. 刷新 dns 或在 jdbc url 中使用 ip 地址。
    3. 根据mysql db的my.cnf进行验证。
    4. 启动数据库。
    5. 验证 mysqld 是否在没有 --skip-networking 选项 的情况下启动。
    6. 重新启动数据库并相应地修复代码,使其关闭 finally 中的连接。
    7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

    请注意,关闭 connection 极其非常重要。如果您不关闭连接并在短时间内不断获取大量连接,那么数据库可能会耗尽连接,并且您的应用程序可能会崩溃。始终获取 try-with-resources statement 中的 connection。这也适用于 statementpreparedstatementresultset。另见How often should Connection, Statement and ResultSet be closed in JDBC?

    这就是连接问题。您可以在 here 找到更高级的教程,了解如何借助基本 dao 类在数据库中加载和存储完整的 java 模型对象。

    对数据库 connection 使用单例模式和/或 static 变量是一种不好的做法。参见其他 Is it safe to use a static java.sql.Connection instance in a multithreaded system? 这是第一个初学者错误。确保您不会落入这个陷阱。

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal