java——jdbc编程

JDBC(Java Database Connectivity)是Java的一种数据库访问标准,它提供了一套API,使得我们可以通过Java程序来访问和操作各种关系型数据库。

在这里插入图片描述

下面我们详细介绍JDBC编程,包括JDBC的概念、JDBC的常用API以及示例代码。

JDBC的概念

JDBC是Java的一种数据库访问标准,它提供了一套API,使用这些API可以让Java程序连接各种关系型数据库,并且进行数据的增、删、改、查等操作。

JDBC的架构分为两部分:JDBC API和JDBC Driver。JDBC API定义了Java程序与数据库之间的接口规范;JDBC Driver则负责将Java程序中的JDBC API调用转换成特定数据库的协议,实现与特定数据库的通信。

在JDBC编程中,开发者需要关注以下几个核心概念:

  • Connection(连接对象):表示与数据库的连接。
  • Statement(语句对象):表示执行SQL语句的对象。
  • ResultSet(结果集对象):表示查询结果集的对象。
  • PreparedStatement(预编译语句对象):表示一个预编译的SQL语句对象,可以有效地防止SQL注入攻击。
  • CallableStatement(存储过程对象):表示调用存储过程的对象。

JDBC的常用API

  1. 加载驱动程序

在使用JDBC之前,需要先加载相应的数据库驱动程序。可以通过Class.forName()方法实现。

Class.forName("com.mysql.jdbc.Driver");
  1. 建立连接

使用DriverManager.getConnection()方法建立与数据库的连接。

String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
  1. 创建Statement对象

通过Connection对象创建Statement对象。

Statement stmt = conn.createStatement();
  1. 执行SQL语句

通过Statement对象执行SQL语句。

String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql); // 查询操作
  1. 处理查询结果

对于查询操作,可以通过ResultSet对象获取查询结果集中的数据。

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);
}
  1. 关闭资源

在使用完JDBC资源后,需要及时关闭它们,以释放内存和资源。

if (rs != null) {
    rs.close();
}
if (stmt != null) {
    stmt.close();
}
if (conn != null) {
    conn.close();
}

JDBC示例代码

下面是一个使用JDBC进行简单查询的示例代码。

import java.sql.*;

public class JdbcDemo {
    public static void main(String[] args) {
        try {
            // 加载MySQL驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            // 建立与MySQL的连接
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            Connection conn = DriverManager.getConnection(url, user, password);
            // 创建Statement对象
            Statement stmt = conn.createStatement();
            // 执行查询操作
            String sql = "SELECT * FROM users WHERE age > 18";
            ResultSet rs = stmt.executeQuery(sql);
            // 处理查询结果
            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);
            }
            // 关闭资源
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException
         e) {
            e.printStackTrace();
        }
    }
}

上面的代码使用了JDBC连接到MySQL数据库,并执行了一个查询操作,将年龄大于18岁的用户信息打印出来。在代码中使用了try-catch语句块捕获了异常,并在finally块中关闭了资源。

需要注意的是,在实际开发中,建议使用连接池来管理数据库连接,以提高性能和可靠性。常用的连接池有Apache Commons DBCP和C3P0等。

下面再来介绍一些JDBC的高级特性。

PreparedStatement

使用PreparedStatement可以有效地防止SQL注入攻击,并提升SQL语句执行效率。它是Statement的一个子类,用于预编译SQL语句,然后在执行时只需要传递参数即可。

下面是一个使用PreparedStatement执行插入操作的示例代码。

import java.sql.*;
import org.apache.commons.dbcp2.BasicDataSource;

public class JdbcDemo {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        // 设置数据库连接信息
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        try {
            // 从连接池中获取连接
            Connection conn = dataSource.getConnection();
            // 创建PreparedStatement对象
            String sql = "INSERT INTO users(name, age) VALUES (?, ?)";
            PreparedStatement stmt = conn.prepareStatement(sql);
            // 设置参数值
            stmt.setString(1, "Tom");
            stmt.setInt(2, 25);
            // 执行插入操作
            int count = stmt.executeUpdate();
            System.out.println(count + " rows affected.");
            // 关闭资源
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,使用了PreparedStatement的setXXX()方法设置参数值,然后通过executeUpdate()方法执行插入操作。

CallableStatement

使用CallableStatement可以调用存储过程,它是PreparedStatement的另一个子类。

下面是一个使用CallableStatement调用存储过程的示例代码。

import java.sql.*;
import org.apache.commons.dbcp2.BasicDataSource;

public class JdbcDemo {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        // 设置数据库连接信息
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        try {
            // 从连接池中获取连接
            Connection conn = dataSource.getConnection();
            // 创建CallableStatement对象
            String sql = "{CALL get_user(?, ?)}";
            CallableStatement stmt = conn.prepareCall(sql);
            // 设置参数值
            stmt.setInt(1, 1);
            // 注册输出参数类型
            stmt.registerOutParameter(2, Types.VARCHAR);
            // 执行存储过程
            stmt.execute();
            // 获取输出参数值
            String name = stmt.getString(2);
            System.out.println("User name: " + name);
            // 关闭资源
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,使用了CallableStatement的registerOutParameter()方法注册输出参数类型,并使用getString()方法获取输出参数值。

总结一下,JDBC是Java的一种数据库访问标准,它提供了一套API,使用这些API可以让Java程序连接各种关系型数据库,并且进行数据的增、删、改、查等操作。JDBC的核心概念包括Connection、Statement、ResultSet、PreparedStatement和CallableStatement等。在实际开发中,建议使用连接池来管理数据库连接,常用的连接池有Apache Commons DBCP和C3P0等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧有白泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值