📜  在java程序中使用mysql - SQL(1)

📅  最后修改于: 2023-12-03 14:51:17.920000             🧑  作者: Mango

在Java程序中使用MySQL - SQL

MySQL是一种流行的开源关系型数据库管理系统。在Java应用程序中使用MySQL进行持久化数据存储是一种常见的做法。本文将介绍如何在Java程序中使用MySQL - SQL。

准备工作

在开始编写Java程序之前,需要确保已经安装了MySQL数据库。可以从MySQL官方网站下载并安装MySQL。

添加JDBC驱动器

Java标准库中没有包含MySQL JDBC驱动程序。因此,需要下载并添加MySQL JDBC驱动程序以实现JDBC API。你可以从以下网址下载最新版本的MySQL JDBC驱动器:

https://dev.mysql.com/downloads/connector/j/

将下载的JDBC驱动器jar文件添加到Java类路径。可以将JDBC驱动器文件复制到Java项目中的lib目录中,并将其从构建路径中添加。

连接到MySQL数据库

以下是连接到MySQL数据库并查找Sakila数据库中有多少个电影的Java程序示例:

package com.example;

import java.sql.*;

public class App {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/sakila?useSSL=false&serverTimezone=UTC";
        String username = "username";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM film")) {

            if (rs.next()) {
                int count = rs.getInt(1);
                System.out.println("Number of movies in Sakila database: " + count);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在此示例中,使用DriverManager.getConnection()方法连接到MySQL数据库并获取一个Connection对象。使用该连接对象创建一个Statement对象,并使用该Statement对象来执行查询。使用该ResultSet对象访问查询结果。最后,使用try-with-resources语句关闭所有打开的对象。

在连接字符串中使用以下参数:

  • url: 指定MySQL服务器和端口,以及要连接的数据库。在此示例中,连接到本地MySQL服务器的3306端口,并指定sakila作为数据库。
  • useSSL:指定是否应使用SSL来连接到MySQL服务器。在此示例中,关闭SSL。
  • serverTimezone:指定MySQL服务器时区。在此示例中,使用UTC。
执行SQL语句

可以使用execute()方法执行任何SQL语句,并使用executeQuery()方法执行SELECT语句。以下是执行INSERT语句的Java程序示例:

try (Connection conn = DriverManager.getConnection(url, username, password);
     Statement stmt = conn.createStatement()) {

    int rowsAffected = stmt.executeUpdate("INSERT INTO film (title, description) VALUES ('Star Wars', 'A legendary movie set in a galaxy far, far away...')");
    System.out.println(rowsAffected + " rows affected.");
} catch (SQLException e) {
    e.printStackTrace();
}

在此示例中,使用Statement.executeUpdate()方法执行INSERT语句。该方法返回受影响的行数。

事务

可以使用JDBC API管理事务。以下是使用事务执行INSERT语句的Java程序示例:

try (Connection conn = DriverManager.getConnection(url, username, password)) {
    conn.setAutoCommit(false);

    try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO film (title, description) VALUES (?, ?)")) {
        stmt.setString(1, "The Lord of the Rings");
        stmt.setString(2, "A journey to save Middle-earth from the dark lord Sauron.");

        int rowsAffected = stmt.executeUpdate();
        System.out.println(rowsAffected + " rows affected.");
    }

    conn.commit();
} catch (SQLException e) {
    e.printStackTrace();

    try {
        if (conn != null) {
            conn.rollback();
        }
    } catch (SQLException e1) {
        e1.printStackTrace();
    }
}

在此示例中,使用Connection.setAutoCommit(false)方法启用事务。使用PreparedStatement对象执行INSERT语句。该语句使用PreparedStatement.setString()方法设置参数。使用Connection.commit()方法提交事务。

在发生任何异常时,使用Connection.rollback()方法回滚事务。请注意,如果回滚事务失败,则可能需要手动回滚。

结论

在Java应用程序中使用MySQL进行持久化数据存储很常见。通过使用上述示例,可以连接到MySQL数据库、执行SQL语句、管理事务等。务必要遵循良好的编码实践来保护代码免受SQL注入攻击。