在本教程中,您将学习如何使用 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;
Code language: Java (java)
其次,调用 DriverManager 类的 getConnection() 方法来获取 Connection 对象。您需要将三个参数传递给 getConnection() 方法:
- url:数据库 URL,格式为 jdbc:subprotocol:subname。对于 MySQL,您使用 jdbc:mysql://localhost:3306/mysqljdbc,即您正在连接到服务器名称为 localhost、端口为 3006 且数据库为 mysqljdbc 的 MySQL。
- user:将用于连接 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())
}
}
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/mysqljdbc
Code 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 并使用属性文件来存储数据库参数。在本教程的最后,我们开发了一个实用程序类,您可以在每次创建与数据库的连接时重用它。