0

0

将 Java 连接到 MySQL 数据库

王林

王林

发布时间:2024-02-22 12:58:14

|

1015人浏览过

|

来源于stackoverflow

转载

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免费学习笔记(深入)”;

java.lang.classnotfoundexception: com.mysql.jdbc.driver

或者

立即学习Java免费学习笔记(深入)”;

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");

…或者直接从数据库驱动程序实例化和配置一个,例如 DataSource (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 以及如何使用它的分步说明:

  1. Download并安装mysql服务器。按照通常的方式做就可以了。每当您更改端口号时,请记住它。默认为 com.mysql.cj.jdbc.mysqldatasource

  2. Download jdbc 驱动程序并放入类路径,解压 zip 文件并将包含的 jar 文件放入类路径中。特定于供应商的 jdbc 驱动程序是 JDBC API (tutorial here) 的具体实现。

    如果您使用的是 eclipse 或 netbeans 等 ide,则可以通过将 jar 文件作为添加到项目中的构建路径,将其添加到类路径中属性。

    如果您在命令控制台中以“普通”方式执行此操作,则需要在执行 java 应用程序时在 AutoCloseable3306 参数中指定 jar 文件的路径。

    java -cp .;/path/to/mysql-connector.jar com.example.yourclass

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

    如果您正在开发基于 servlet 的 war 应用程序,并希望手动管理连接(实际上,这种做法很糟糕),那么您需要确保 jar 最终位于构建的 中。另请参见 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 的示例:JNDI0

    Difeye-敏捷的轻量级PHP框架
    Difeye-敏捷的轻量级PHP框架

    Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例

    下载
  3. 在 mysql 中创建 JNDI1。让我们创建一个数据库:。您当然想要统治世界,所以我们也使用 utf-8。

    create database javabase default character set utf8 collate utf8_unicode_ci;
  4. java 访问 JNDI2,它访问 JNDI3。仅仅是因为使用 /web-inf/lib 是一种不好的做法。

    create user 'java'@'localhost' identified by 'password';
     grant all on javabase.* to 'java'@'localhost' identified by 'password';

    是的,这里 javabase 是用户名,root 是密码。

  5. JNDI4 jdbc url。要使用 java 连接 mysql 数据库,您需要采用以下语法的 jdbc url:

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

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

    • port:您要连接的数据库的名称。那是 3306

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

    jdbc:mysql://localhost:3306/javabase
  6. JNDI5 使用 java 到 mysql。使用 databasename 方法创建一个简单的 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);
     }
    

    如果您收到 javabase,则意味着 jdbc 驱动程序根本没有自动加载,或者 jdbc url 错误(即,任何加载的驱动程序都无法识别它)。另请参见 JNDI6。通常,当您将 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);
     }
    

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

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

    如果您收到 org.gjt.mm.mysql.driverclassnotfoundexception 或 mysql 特定的 sqlexception: 连接被拒绝 ,则意味着数据库根本无法访问。这可能由以下一个或多个原因造成:

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

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

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

    请注意,关闭 --skip-networking 选项 极其非常重要。如果您不关闭连接并在短时间内不断获取大量连接,那么数据库可能会耗尽连接,并且您的应用程序可能会崩溃。始终获取 JNDI8 中的 finally。这也适用于 connectiontry-with-resourcesconnection。另见JNDI9

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

对数据库 statement 使用单例模式和/或 preparedstatement 变量是一种不好的做法。参见其他 see documentation1 这是第一个初学者错误。确保您不会落入这个陷阱。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2132

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1663

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 4.9万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

Python 教程
Python 教程

共137课时 | 11.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号