Java数据库编程

引言

在现代应用开发中,与数据库交互是不可或缺的一部分。Java提供了JDBC(Java Database Connectivity) API,允许开发者方便地连接到数据库并执行SQL操作。本文将详细介绍Java数据库编程的基础知识,包括JDBC的基本概念、数据库连接与操作、事务处理、以及使用ORM框架如Hibernate,并通过表格进行总结和示范。

JDBC基础

什么是JDBC?

JDBC是Java数据库连接的标准API,允许Java应用与数据库进行交互。JDBC API提供了与数据库连接、执行SQL查询、更新数据库和处理结果集的方法。

JDBC体系结构

组件描述
DriverManager管理一组JDBC驱动程序,实现数据库连接
Driver用于与数据库通信的JDBC驱动程序
Connection表示与特定数据库的连接,用于执行SQL语句
Statement用于执行SQL查询和更新
ResultSet表示SQL查询的结果,允许迭代和处理结果集
SQLException指示数据库访问错误的异常类

JDBC四大步骤

  1. 加载并注册数据库驱动
  2. 建立数据库连接
  3. 创建并执行SQL语句
  4. 处理结果与关闭资源

数据库连接与操作

连接数据库

使用DriverManager获取数据库连接。

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

public class DatabaseConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            System.out.println("Database connected!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

执行SQL查询

使用Statement执行SQL查询并处理结果集。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectQueryExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

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

            String query = "SELECT * FROM users";
            ResultSet resultSet = statement.executeQuery(query);

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");
                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

更新数据库

使用PreparedStatement执行SQL更新操作。

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

public class UpdateQueryExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             PreparedStatement statement = connection.prepareStatement("UPDATE users SET email = ? WHERE id = ?")) {

            statement.setString(1, "newemail@example.com");
            statement.setInt(2, 1);
            
            int rowsAffected = statement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

JDBC常用类与方法表

类/接口方法描述
DriverManagergetConnection(String, String, String)获取数据库连接
ConnectioncreateStatement()创建Statement实例
prepareStatement(String)创建PreparedStatement实例
close()关闭数据库连接
StatementexecuteQuery(String)执行SQL查询并返回ResultSet
executeUpdate(String)执行SQL更新并返回受影响行数
close()关闭Statement
PreparedStatementsetString(int, String)设置SQL参数值
setInt(int, int)设置SQL参数值
executeUpdate()执行SQL更新并返回受影响行数
executeQuery()执行SQL查询并返回ResultSet
close()关闭PreparedStatement
ResultSetnext()移动到下一行数据
getInt(String)获取当前行指定列的整数值
getString(String)获取当前行指定列的字符串值
close()关闭ResultSet
SQLExceptiongetMessage()获取异常消息
printStackTrace()打印异常堆栈轨迹

事务处理

在数据库操作中,事务用于保证一组操作要么全部成功要么全部失败,确保数据一致性。事务具有四个属性(ACID):原子性、一致性、隔离性和持久性。

使用事务

使用Connection对象的事务控制方法实现数据库事务。

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

public class TransactionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            connection.setAutoCommit(false); // 开始事务

            try (PreparedStatement pst1 = connection.prepareStatement("UPDATE accounts SET balance = balance - ? WHERE id = ?");
                 PreparedStatement pst2 = connection.prepareStatement("UPDATE accounts SET balance = balance + ? WHERE id = ?")) {

                pst1.setDouble(1, 100.0);
                pst1.setInt(2, 1);
                pst1.executeUpdate();

                pst2.setDouble(1, 100.0);
                pst2.setInt(2, 2);
                pst2.executeUpdate();

                connection.commit(); // 提交事务
                System.out.println("Transaction committed successfully.");
            } catch (SQLException e) {
                connection.rollback(); // 回滚事务
                System.out.println("Transaction rolled back.");
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

事务控制方法表

方法描述示例
setAutoCommit(boolean)设置是否自动提交事务connection.setAutoCommit(false);
commit()提交事务connection.commit();
rollback()回滚事务connection.rollback();

使用ORM框架:Hibernate

Hibernate是Java的一个流行的ORM(对象关系映射)框架,通过将Java对象映射到数据库表,简化了数据库操作并提高了生产力。

Hibernate配置

Hibernate通过hibernate.cfg.xml文件进行配置,包括数据库连接信息和映射文件。

示例:hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 数据库连接配置 -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 映射类 -->
        <mapping class="com.example.User"/>
    </session-factory>
</hibernate-configuration>

Hibernate实体类

定义一个实体类,并使用Hibernate注解进行配置。

示例:User实体类

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {
    @Id
    private int id;
    private String name;
    private String email;

    // Getters and setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

使用Hibernate进行数据库操作

使用Hibernate的SessionTransaction进行CRUD(创建、读取、更新、删除)操作。

示例:Hibernate CRUD操作

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class HibernateCRUDExample {
    public static void main(String[] args) {
        // 创建SessionFactory
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

        // 创建Session
        try (Session session = sessionFactory.openSession()) {
            // 创建Transaction
            Transaction transaction = session.beginTransaction();

            // 创建并保存一个新用户
            User user = new User();
            user.setId(1);
            user.setName("John Doe");
            user.setEmail("john.doe@example.com");
            session.save(user);
            System.out.println("User saved!");

            // 提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭SessionFactory
            sessionFactory.close();
        }
    }
}

Hibernate常用类与方法表

类/接口方法描述
Configurationconfigure()加载Hibernate配置文件
buildSessionFactory()创建SessionFactory实例
SessionFactoryopenSession()打开一个新的Session实例
close()关闭SessionFactory实例
SessionbeginTransaction()开始一个新的事务
save(Object)保存一个对象到数据库
update(Object)更新数据库中的一个对象
delete(Object)从数据库中删除一个对象
get(Class, Serializable)根据标识符从数据库中获取一个对象
Transactioncommit()提交事务
rollback()回滚事务

表格总结

JDBC常用类与方法表

类/接口方法描述
DriverManagergetConnection(String, String, String)获取数据库连接
ConnectioncreateStatement()创建Statement实例
prepareStatement(String)创建PreparedStatement实例
close()关闭数据库连接
StatementexecuteQuery(String)执行SQL查询并返回ResultSet
executeUpdate(String)执行SQL更新并返回受影响行数
close()关闭Statement
PreparedStatementsetString(int, String)设置SQL参数值
setInt(int, int)设置SQL参数值
executeUpdate()执行SQL更新并返回受影响行数
executeQuery()执行SQL查询并返回ResultSet
close()关闭PreparedStatement
ResultSetnext()移动到下一行数据
getInt(String)获取当前行指定列的整数值
getString(String)获取当前行指定列的字符串值
close()关闭ResultSet
SQLExceptiongetMessage()获取异常消息
printStackTrace()打印异常堆栈轨迹

事务控制方法表

方法描述示例
setAutoCommit(boolean)设置是否自动提交事务connection.setAutoCommit(false);
commit()提交事务connection.commit();
rollback()回滚事务connection.rollback();

Hibernate常用类与方法表

类/接口方法描述
Configurationconfigure()加载Hibernate配置文件
buildSessionFactory()创建SessionFactory实例
SessionFactoryopenSession()打开一个新的Session实例
close()关闭SessionFactory实例
SessionbeginTransaction()开始一个新的事务
save(Object)保存一个对象到数据库
update(Object)更新数据库中的一个对象
delete(Object)从数据库中删除一个对象
get(Class, Serializable)根据标识符从数据库中获取一个对象
Transactioncommit()提交事务
rollback()回滚事务

总结

本文详细介绍了Java数据库编程的基础知识,包括JDBC的基本概念、数据库连接与操作、事务处理、以及使用ORM框架如Hibernate。通过示例代码和表格总结,帮助读者更好地理解和应用Java中的数据库编程,提高数据操作的效率和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值