使用JDBC驱动程序连接到MySQL

时间:2019-11-20 08:52:36  来源:igfitidea点击:

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

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

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

  • 从DriverManager类中创建一个新的Connection对象。
    然后,您可以使用此Connection对象执行查询。

将MySQL Connector / J加载到程序中

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

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

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

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

连接到MySQL数据库

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

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

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

  • url:格式为jdbc:subprotocol:subname的数据库URL。
    对于MySQL,请使用jdbc:mysql:// localhost:3306 / mysqljdbc,即您要使用服务器名称localhost,端口3006和数据库mysqljdbc连接到MySQL。

  • 用户:将用于连接MySQL的数据库用户。

  • 密码:数据库用户的密码。

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())
	}
}

连接到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());
}

程序完成后,它将自动调用Connection对象的close()方法。
如您所见,它更干净,更优雅。
然而…

当您在上面的代码中对数据库参数进行硬编码时,它既不安全也不灵活。
如果您更改数据库服务器或密码;您必须更改代码,然后再次编译,这不是一个好的设计。

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

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

# MySQL DB parameters
user=root
password=secret
url=jdbc:mysql://localhost:3306/mysqljdbc

您可以重写代码,以使用属性文件中的参数来创建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());
    }
    
}

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

package org.theitroad;

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 theitroad.local
 */
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;
    }

}

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

package org.theitroad;

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

/**
 *
 * @author theitroad.local
 */
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());
        }
    }
}

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