将Java连接到MySQL数据库

如何连接到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以及如何使用它的逐步说明:

  1. 下载并安装MySQL服务器。照常做就行了。无论何时更改端口号,都要记住它。它默认为3306

  2. 下载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和克隆中,应使用

  3. 创建一个数据库。让我们创建一个数据库javabase。你当然想要统治世界,所以让我们也使用UTF-8

    创建数据库javabase默认字符集utf8 COLLATE utf8\u unicode\u ci;
    
  4. 为Java和授予it访问权限。仅仅因为使用root是一种糟糕的做法

    创建由“密码”标识的用户“java”@“localhost”;
    将javabase.*上的所有内容授予由“密码”标识的“java”@“localhost”;
    

    是,java是用户名,password是这里的密码

  5. 确定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
  6. 使用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的通信异常:
    通信链路故障
    ,则表示数据库根本无法访问。这可能有以下一个或多个原因:

    1. JDBC URL中的IP地址或主机名错误
    2. 本地DNS服务器无法识别JDBC URL中的主机名
    3. JDBC URL中缺少端口号或端口号错误
    4. 数据库服务器已关闭
    5. DB服务器不接受TCP/IP连接
    6. 数据库服务器的连接已用完
    7. Java和DB之间的某些东西正在阻止连接,例如防火墙或代理。

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

    1. ping验证并测试它们
    2. 刷新DNS或改用JDBC URL中的IP地址
    3. 根据MySQL数据库的my.cnf进行验证
    4. 启动数据库
    5. 验证mysqld是否在没有--跳过网络选项的情况下启动
    6. 重新启动数据库并相应地修复代码,使其在中最终关闭连接
    7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

    请注意,关闭连接非常重要。如果不关闭连接并在短时间内保持大量连接,则数据库可能会耗尽连接,应用程序可能会中断。始终在a<a href=”中获取连接https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html“rel=”noreferrer“>尝试使用资源语句。或者,如果您还没有使用Java 7,请在try finally块的finally中显式关闭它。最后关闭只是为了确保在出现异常时也关闭它。这也适用于语句PreparedStatementResultSet

就连接性而言就是这样。您可以找到这里有一个更高级的教程,介绍如何借助基本DAO类在数据库中加载和存储完整的Java模型对象


对DB连接使用单例模式是一种糟糕的方法。除其他问题外,请参见:http://stackoverflow.com/q/9428573/。这是一个1号起跑手的错误

发表评论