php小编香蕉为您带来关于将Java连接到MySQL数据库的专题问答。本文将为您解答如何在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
解决方法
数据源
drivermanager
是一种相当古老的做事方式。更好的方法是获取 DataSource
对象。可以使用 JNDI 查找已为您配置的应用服务器容器:
context context = new initialcontext(); datasource datasource = (datasource) context.lookup("java:comp/env/jdbc/mydb");
…或者直接从数据库驱动程序实例化和配置一个,例如 com.mysql.cj.jdbc.mysqldatasource
(see documentation):
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();
在现代 java 中,使用 try-with-resources 语法自动关闭 jdbc 资源(现在为 AutoCloseable
)。
try ( connection conn = datasource.getconnection(); statement stmt = conn.createstatement(); resultset rs = stmt.executequery("select id from users"); ) { … }
以下是如何安装 mysql 和 jdbc 以及如何使用它的分步说明:
-
Download并安装mysql服务器。按照通常的方式做就可以了。每当您更改端口号时,请记住它。默认为
3306
。 -
Download jdbc 驱动程序并放入类路径,解压 zip 文件并将包含的 jar 文件放入类路径中。特定于供应商的 jdbc 驱动程序是 JDBC API (tutorial here) 的具体实现。
如果您使用的是 eclipse 或 netbeans 等 ide,则可以通过将 jar 文件作为库添加到项目中的构建路径,将其添加到类路径中属性。
如果您在命令控制台中以“普通”方式执行此操作,则需要在执行 java 应用程序时在
-cp
或-classpath
参数中指定 jar 文件的路径。java -cp .;/path/to/mysql-connector.jar com.example.yourclass
.
只是将当前目录添加到类路径中,以便它可以找到com.example.yourclass
和;
是类路径分隔符,因为它在视窗。在 unix 和克隆中,应使用:
。如果您正在开发基于 servlet 的 war 应用程序,并希望手动管理连接(实际上,这种做法很糟糕),那么您需要确保 jar 最终位于构建的
/web-inf/lib
中。另请参见 How to add JAR libraries to WAR project without facing java.lang.ClassNotFoundException? Classpath vs Build Path vs /WEB-INF/lib。更好的做法是在服务器本身中安装物理 jdbc 驱动程序 jar 文件,并配置服务器以创建 jdbc 连接池。以下是 tomcat 的示例:How should I connect to JDBC database / datasource in a servlet based application? -
在 mysql 中创建 database。让我们创建一个数据库
javabase
。您当然想要统治世界,所以我们也使用 utf-8。create database javabase default character set utf8 collate utf8_unicode_ci;
-
java 访问 Create a user,它访问 grant。仅仅是因为使用
root
是一种不好的做法。create user 'java'@'localhost' identified by 'password'; grant all on javabase.* to 'java'@'localhost' identified by 'password';
是的,这里
java
是用户名,password
是密码。 -
Determine jdbc url。要使用 java 连接 mysql 数据库,您需要采用以下语法的 jdbc url:
jdbc:mysql://hostname:port/databasename
-
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
-
-
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); }
如果您收到
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); }
请注意,此处不需要调用
newinstance()
。对于mysql,只是为了修复旧的且有缺陷的org.gjt.mm.mysql.driver
。 Explanation here。如果此行抛出classnotfoundexception
,则说明包含 jdbc 驱动程序类的 jar 文件根本没有放置在类路径中。另请注意,抛出异常非常重要,以便立即阻止代码执行,而不是仅仅打印堆栈跟踪然后继续执行其余代码来抑制它。另请注意,您不需要每次在连接之前加载驱动程序。只需在应用程序启动期间一次就足够了。
如果您收到
sqlexception: 连接被拒绝
或connection timed out
或 mysql 特定的communicationsexception: 通信链路故障
,则意味着数据库根本无法访问。这可能由以下一个或多个原因造成:- jdbc url 中的 ip 地址或主机名错误。
- 本地 dns 服务器无法识别 jdbc url 中的主机名。
- jdbc url 中的端口号缺失或错误。
- 数据库服务器已关闭。
- 数据库服务器不接受 tcp/ip 连接。
- 数据库服务器已耗尽连接。
- java 和 db 之间的某些东西正在阻塞连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
- 使用
ping
验证并测试它们。 - 刷新 dns 或在 jdbc url 中使用 ip 地址。
- 根据mysql db的
my.cnf
进行验证。 - 启动数据库。
- 验证 mysqld 是否在没有
--skip-networking 选项
的情况下启动。 - 重新启动数据库并相应地修复代码,使其关闭
finally
中的连接。 - 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
请注意,关闭
connection
极其非常重要。如果您不关闭连接并在短时间内不断获取大量连接,那么数据库可能会耗尽连接,并且您的应用程序可能会崩溃。始终获取try-with-resources
statement 中的connection
。这也适用于statement
、preparedstatement
和resultset
。另见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? 这是第一个初学者错误。确保您不会落入这个陷阱。
以上是将 Java 连接到 MySQL 数据库的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器