Java学习教程,从入门到精通,JDBC数据库连接语法知识点及案例代码(92)

JDBC数据库连接语法知识点及案例代码

一、JDBC概述

JDBC(Java Database Connectivity)是Java语言中用于执行SQL语句的API,它为多种关系数据库提供统一访问接口,允许Java程序连接数据库,执行SQL语句,处理查询结果等。

二、JDBC连接数据库步骤

  1. 加载数据库驱动
    • 通过Class.forName()方法加载数据库驱动类,使JDBC驱动程序注册到DriverManager中。
    • 不同数据库的驱动类不同,例如MySQL的驱动类为com.mysql.cj.jdbc.Driver
  2. 建立数据库连接
    • 使用DriverManager.getConnection()方法建立与数据库的连接。
    • 需要提供数据库的URL、用户名和密码。
    • 数据库URL格式通常为jdbc:数据库类型://主机名:端口/数据库名,例如MySQL的URL为jdbc:mysql://localhost:3306/数据库名
  3. 创建Statement对象
    • 通过连接对象ConnectioncreateStatement()方法创建Statement对象,用于执行SQL语句。
  4. 执行SQL语句
    • 使用Statement对象的executeQuery()方法执行查询SQL语句,返回ResultSet对象。
    • 使用executeUpdate()方法执行增删改SQL语句,返回受影响的行数。
  5. 处理结果(对于查询操作)
    • 通过ResultSet对象遍历查询结果,获取数据。
  6. 关闭连接
    • 关闭ResultSetStatementConnection对象,释放数据库资源。

三、案例代码 - 查询数据库中的数据

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcExample {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/testdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "SELECT * FROM users";
            rs = stmt.executeQuery(sql);

            // 5. 处理结果
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 6. 关闭连接
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

四、案例代码 - 向数据库中插入数据

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JdbcInsertExample {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/testdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "INSERT INTO users(name, age) VALUES('Tom', 25)";
            int rowsAffected = stmt.executeUpdate(sql);

            // 判断插入是否成功
            if (rowsAffected > 0) {
                System.out.println("插入成功");
            } else {
                System.out.println("插入失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 5. 关闭连接
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

以上代码中的数据库名称、表结构等需要根据实际情况进行调整。在运行代码前,确保数据库已正确安装并运行,且数据库驱动已添加到项目依赖中。

以下是一些更具体的JDBC操作数据库的案例,包括查询、插入、更新和删除操作,每个案例都基于一个假设的"学生信息管理系统"数据库。

一、数据库表结构

假设我们有一个名为students的表,表结构如下:

  • id:学生编号,主键,自增
  • name:学生姓名,字符串类型
  • age:学生年龄,整型
  • gender:学生性别,字符串类型
sql 复制代码
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    gender VARCHAR(10) NOT NULL
);

二、案例代码

1. 查询学生信息

功能描述

查询所有学生的信息,并打印出来。

代码实现
java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class QueryStudents {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/studentdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "SELECT * FROM students";
            rs = stmt.executeQuery(sql);

            // 5. 处理结果
            System.out.println("学生信息列表:");
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                String gender = rs.getString("gender");
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age + ", Gender: " + gender);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 6. 关闭连接
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

2. 插入学生信息

功能描述

students表中插入一条新的学生记录。

代码实现
java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class InsertStudent {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/studentdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "INSERT INTO students(name, age, gender) VALUES('Alice', 20, 'Female')";
            int rowsAffected = stmt.executeUpdate(sql);

            // 判断插入是否成功
            if (rowsAffected > 0) {
                System.out.println("插入成功");
            } else {
                System.out.println("插入失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 5. 关闭连接
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

3. 更新学生信息

功能描述

更新指定学生的信息,例如将学生ID为1的年龄修改为21。

代码实现
java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class UpdateStudent {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/studentdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "UPDATE students SET age = 21 WHERE id = 1";
            int rowsAffected = stmt.executeUpdate(sql);

            // 判断更新是否成功
            if (rowsAffected > 0) {
                System.out.println("更新成功");
            } else {
                System.out.println("更新失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 5. 关闭连接
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

4. 删除学生信息

功能描述

删除指定学生的信息,例如删除学生ID为2的记录。

代码实现
java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DeleteStudent {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String url = "jdbc:mysql://localhost:3306/studentdb";
        String username = "root";
        String password = "123456";

        Connection conn = null;
        Statement stmt = null;

        try {
            // 1. 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 建立数据库连接
            conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement对象
            stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "DELETE FROM students WHERE id = 2";
            int rowsAffected = stmt.executeUpdate(sql);

            // 判断删除是否成功
            if (rowsAffected > 0) {
                System.out.println("删除成功");
            } else {
                System.out.println("删除失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 5. 关闭连接
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

三、注意事项

  1. 数据库连接信息:确保数据库URL、用户名和密码正确无误,并且数据库已正确安装并运行。

  2. 数据库驱动 :确保已将数据库驱动添加到项目依赖中。对于MySQL,可以在pom.xml中添加以下依赖:

    xml 复制代码
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
  3. 异常处理 :在实际项目中,建议使用更详细的异常处理逻辑,例如使用try-catch块捕获不同类型的异常,并进行相应的处理。

  4. 资源关闭 :确保在finally块中关闭所有数据库资源,避免资源泄漏。

相关推荐
dvlinker2 分钟前
大数据技术Kafka详解 ⑤ | Kafka中的CAP机制
大数据·kafka·消费者·生产者·分布式与订阅系统·cap指标·cap机制
PieroPc4 分钟前
通用仓库管理系统开发书 Pyside6 + Sqlite3
数据库·ui·sqlite·pyside6
极客先躯4 分钟前
Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题
大数据·flink·kafka
哭哭啼7 分钟前
redis单机安装
前端·数据库·redis
深色風信子9 分钟前
Kotlin Bytedeco OpenCV 图像图像57 图像ROI
开发语言·opencv·kotlin·roi·bytedeco
wit_@11 分钟前
【全面解析】深入解析 TCP/IP 协议:网络通信的基石
开发语言·网络·网络协议·tcp/ip·网络安全·php
羊小猪~~12 分钟前
深度学习基础--GRU学习笔记(李沐《动手学习深度学习》)
人工智能·rnn·深度学习·学习·机器学习·gru·lstm
编程小筑14 分钟前
Bash语言的语法糖
开发语言·后端·golang
huaqianzkh16 分钟前
数据持久层:构建应用程序与数据源的桥梁
java·数据库·系统架构
顽疲25 分钟前
java 小红书源码 1:1还原 uniapp
java·开发语言·uni-app