Connecting to MySQL Using JDBC Driver

在本教程中,您将学习如何使用 JDBC Connection 对象连接到 MySQL 数据库。

要从Java程序连接MySQL数据库,您需要执行以下步骤:

  1. 将 MySQL Connector/J 加载到您的程序中。
  2. DriverManager类创建一个新的 Connection 对象。然后您可以使用此 Connection 对象来执行查询。

将 MySQL Connector/J 加载到您的程序中

要将 MySQL Connector/J 加载到您的程序中,请执行以下三个步骤:

首先,在 NetBeans IDE 中,从项目名称中单击鼠标右键并选择属性菜单项。将出现项目属性对话框。

mysql jdbc 项目属性

其次,在项目属性对话框左侧的“类别”部分中,选择“库”项。

mysql jdbc 选择库

第三,单击“添加 JAR 文件夹”按钮,浏览到安装 MySQL Connector/J 的位置,然后选择 JAR 文件,如下图所示;之后单击“确定”按钮。

mysql jdbc 添加jar
添加了 jar 文件

连接到 MySQL 数据库

首先,您需要从 java.sql.* 包中导入三个类:SQLException、DriverManager 和 Connection。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;Code language: Java (java)

其次,调用 DriverManager 类的 getConnection() 方法来获取 Connection 对象。您需要将三个参数传递给 getConnection() 方法:

  1. url:数据库 URL,格式为 jdbc:subprotocol:subname。对于 MySQL,您使用 jdbc:mysql://localhost:3306/mysqljdbc,即您正在连接到服务器名称为 localhost、端口为 3006 且数据库为 mysqljdbc 的 MySQL。
  2. user:将用于连接 MySQL 的数据库用户。
  3. 密码:数据库用户的密码。
Connection conn = null;
try {
    // db parameters
    String url       = "jdbc:mysql://localhost:3306/mysqljdbc";
    String user      = "root";
    String password  = "secret";
	
    // create a connection to the database
    conn = DriverManager.getConnection(url, user, password);
    // more processing here
    // ...	
} catch(SQLException e) {
   System.out.println(e.getMessage());
} finally {
	try{
           if(conn ! null)
             conn.close()
	}catch(SQLException ex){
           System.out.println(ex.getMessage())
	}
}Code language: Java (java)

当连接到 MySQL 时,任何事情都可能发生,例如数据库服务器不可用、用户名或密码错误等,在这种情况下,JDBC 会抛出SQLException 。因此,当您创建 Connection 对象时,应始终将其放入 try catch 块中。此外,一旦通过调用 Connection 对象的close()方法完成与数据库的交互,您应该始终关闭数据库连接。

从 Java 7 开始,还有另一个很好的语句,称为try-with-resources ,它允许您将上面的代码简化如下:

// db parameters
String url       = "jdbc:mysql://localhost:3306/mysqljdbc";
String user      = "root";
String password  = "secret";

Connection conn = null;

try(conn = DriverManager.getConnection(url, user, password);) {
	// processing here
} catch(SQLException e) {
   System.out.println(e.getMessage());
}Code language: Java (java)

一旦程序完成,它会自动调用 Connection 对象的 close() 方法。正如您所看到的,它更干净、更优雅。然而…

当您像上面那样在代码中硬编码数据库参数时,它既不安全也不灵活。如果您更改数据库服务器或密码;你必须更改代码,重新编译,这不是一个好的设计。

为了避免在代码中对所有数据库参数进行硬编码,您可以使用 Java 属性文件来存储它们。如果发生更改,您只需在属性文件中更改它们,而不必重新编译代码。

让我们看一下名为 db.properties 的属性文件:

# MySQL DB parameters
user=root
password=secret
url=jdbc:mysql://localhost:3306/mysqljdbcCode language: PHP (php)

您可以使用属性文件中的参数重写创建 Connection 对象的代码,如下所示:

Connection conn = null;

try(FileInputStream f = new FileInputStream("db.properties")) {
    // load the properties file
    Properties pros = new Properties();
    pros.load(f);

    // assign db parameters
    String url       = pros.getProperty("url");
    String user      = pros.getProperty("user");
    String password  = pros.getProperty("password");
    // create a connection to the database
    conn = DriverManager.getConnection(url, user, password);
} catch(IOException e) {
   System.out.println(e.getMessage());
} finally {
    try{
        if(conn != null)
            conn.close();
    }catch(SQLException ex){
        System.out.println(ex.getMessage());
    }
    
}Code language: Java (java)

对于与 MySQL 数据库的每次交互,您都需要创建一个新连接。您将在所有地方使用相同的代码来执行此操作。您可以创建一个新类来处理连接创建,而不是这样做:

package org.mysqltutorial;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 *
 * @author mysqltutorial.org
 */
public class MySQLJDBCUtil {

    /**
     * Get database connection
     *
     * @return a Connection object
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        Connection conn = null;

        try (FileInputStream f = new FileInputStream("db.properties")) {

            // load the properties file
            Properties pros = new Properties();
            pros.load(f);

            // assign db parameters
            String url = pros.getProperty("url");
            String user = pros.getProperty("user");
            String password = pros.getProperty("password");
            
            // create a connection to the database
            conn = DriverManager.getConnection(url, user, password);
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        return conn;
    }

}Code language: Java (java)

从下一个教程开始,我们将使用MySQLJDBCUtil类创建与 MySQL 的新连接,如下所示:

package org.mysqltutorial;

import java.sql.Connection;
import java.sql.SQLException;

/**
 *
 * @author mysqltutorial.org
 */
public class Main {

    public static void main(String[] args) {
        // create a new connection from MySQLJDBCUtil
        try (Connection conn = MySQLJDBCUtil.getConnection()) {
            
            // print out a message
            System.out.println(String.format("Connected to database %s "
                    + "successfully.", conn.getCatalog()));
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }
}Code language: Java (java)

在本教程中,我们逐步向您展示了如何使用 JDBC Connection 对象连接到 MySQL 并使用属性文件来存储数据库参数。在本教程的最后,我们开发了一个实用程序类,您可以在每次创建与数据库的连接时重用它。

本教程有帮助吗?