如何连接到Java中的MySQL数据库
当我尝试时,我得到
java.sql.SQLException:找不到适合jdbc的驱动程序:mysql://database/table
位于java.sql.DriverManager.getConnection(DriverManager.java:689)
位于java.sql.DriverManager.getConnection(DriverManager.java:247)
或
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
或
java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver
下面是如何安装MySQL和JDBC以及如何使用它的逐步说明:
-
下载并安装MySQL服务器。照常做就行了。无论何时更改端口号,都要记住它。它默认为3306
-
下载JDBC驱动程序并放入类路径中,解压缩ZIP文件并将包含的JAR文件放入类路径中。特定于供应商的JDBC驱动程序是JDBC API(此处为教程)
如果您使用的是像Eclipse或Netbeans这样的IDE,那么您可以通过将JAR文件作为库添加到项目属性中的构建路径来将其添加到类路径中
如果您是在命令控制台中“普通”执行,那么在执行Java应用程序时,需要在
-cp或-classpath参数中指定JAR文件的路径java-cp/path/to/mysql-connector.jar.com.example.YourClass
只是将当前的目录添加到类路径中,这样它就可以定位com.example.YourClass和是类路径分隔符,就像在Windows中一样。在Unix和克隆中,应使用: -
创建一个数据库。让我们创建一个数据库
javabase。你当然想要统治世界,所以让我们也使用UTF-8创建数据库javabase默认字符集utf8 COLLATE utf8\u unicode\u ci; -
为Java和授予it访问权限。仅仅因为使用
root是一种糟糕的做法创建由“密码”标识的用户“java”@“localhost”; 将javabase.*上的所有内容授予由“密码”标识的“java”@“localhost”;是,
java是用户名,password是这里的密码 -
确定JDBC URL。要使用Java连接MySQL数据库,需要以下语法的JDBC URL:
jdbc:mysql://hostname:port/databasename
-
主机名:安装MySQL服务器的主机名。如果它安装在运行Java代码的同一台机器上,那么只需使用localhost。它也可以是IP地址,如127.0.0.1。如果遇到连接问题,并使用127.0.0.1而不是localhost解决了问题,则网络/DNS/hosts配置中存在问题 -
端口:MySQL服务器侦听的TCP/IP端口。这是默认值3306 -
databasename:要连接到的数据库的名称。这是javabase
因此,最终的URL应该如下所示:
jdbc:mysql://localhost:3306/javabase
-
-
使用Java测试与MySQL的连接。使用
main()方法创建一个简单的Java类来测试连接String url=“jdbc:mysql://localhost:3306/javabase"; 字符串username=“java”; 字符串password=“password”; System.out.println(“连接数据库…”); try(Connection-Connection=DriverManager.getConnection(url、用户名、密码)){ System.out.println(“数据库已连接!”); }捕获(SQLE异常){ 抛出新的IllegalStateException(“无法连接数据库!”,e); }如果您得到一个
SQLException:No合适的驱动程序,则表示JDBC驱动程序根本没有自动加载,或者JDBC URL错误(即,任何加载的驱动程序都无法识别它)。通常,当您将JDBC4.0驱动程序放到运行时类路径中时,它应该自动加载。要排除一个和另一个,您始终可以按如下方式手动加载它:System.out.println(“加载驱动程序…”); 试一试{ Class.forName(“com.mysql.jdbc.Driver”); System.out.println(“驱动程序已加载!”); }catch(classnotfounde异常){ 抛出新的IllegalStateException(“在类路径中找不到驱动程序!”,e); }请注意,
newInstance()调用在这里是不需要的。这只是为了修复旧的bugorg.gjt.mm.mysql.Driver此处说明。如果这一行抛出ClassNotFoundException,那么包含JDBC驱动程序类的JAR文件就不会放在类路径中请注意,无需在每次连接前加载驱动程序。在应用程序启动期间只需一次就足够了
如果您得到一个
SQLException:Connection-densed或连接超时或一个特定于MySQL的通信异常:,则表示数据库根本无法访问。这可能有以下一个或多个原因:
通信链路故障- JDBC URL中的IP地址或主机名错误
- 本地DNS服务器无法识别JDBC URL中的主机名
- JDBC URL中缺少端口号或端口号错误
- 数据库服务器已关闭
- DB服务器不接受TCP/IP连接
- 数据库服务器的连接已用完
- Java和DB之间的某些东西正在阻止连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
- 用
ping验证并测试它们 - 刷新DNS或改用JDBC URL中的IP地址
- 根据MySQL数据库的
my.cnf进行验证 - 启动数据库
- 验证mysqld是否在没有
--跳过网络选项的情况下启动 - 重新启动数据库并相应地修复代码,使其在
中最终关闭连接 - 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
请注意,关闭
连接非常重要。如果不关闭连接并在短时间内保持大量连接,则数据库可能会耗尽连接,应用程序可能会中断。始终在a<a href=”中获取连接https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html“rel=”noreferrer“>尝试使用资源语句。或者,如果您还没有使用Java 7,请在try finally块的finally中显式关闭它。最后关闭只是为了确保在出现异常时也关闭它。这也适用于语句、PreparedStatement和ResultSet
就连接性而言就是这样。您可以找到这里有一个更高级的教程,介绍如何借助基本DAO类在数据库中加载和存储完整的Java模型对象
对DB连接使用单例模式是一种糟糕的方法。除其他问题外,请参见:http://stackoverflow.com/q/9428573/。这是一个1号起跑手的错误