数据库中常见的DBConnection、Connection、PreparedStatement的区别

常见的数据库连接代码如下:

    private Connection connection=null; //定义连接对象
    private PreparedStatement ps=null;  //定义数据库操作的语句对象
    private DBConnection jdbc=null;  //定义数据库连接对象

这三条代码分别定义了不同类型的对象,用途和作用场景有明显区别,核心差异在于对象类型及对应的功能

1. private Connection connection=null;

  • 类型java.sql.Connection(JDBC 核心接口)
  • 作用:表示与数据库的物理连接会话,是操作数据库的基础入口。
    通过它可以创建 SQL 执行对象(如PreparedStatement)、管理事务(提交 / 回滚)、关闭连接等。
  • 通俗理解:相当于 Java 程序与数据库之间建立的 "通道",所有数据库操作(查询、新增、修改等)都依赖这个通道。

2. private PreparedStatement ps=null;

  • 类型java.sql.PreparedStatement(JDBC 接口,Statement的子接口)
  • 作用:用于预编译 SQL 语句并执行,是具体执行数据库操作的 "工具"。
    相比Statement,它支持参数化查询(通过?占位符),能防止 SQL 注入,且重复执行时性能更好。
  • 依赖关系:必须通过Connection对象创建(如connection.prepareStatement(sql)),生命周期依附于Connection
  • 通俗理解:相当于通过 "通道"(Connection)发送到数据库的 "指令单",包含要执行的 SQL 逻辑。

3. private DBConnection jdbc=null;

  • 类型DBConnection(自定义类,非 JDBC 标准类)
  • 作用:通常是封装数据库连接逻辑的工具类,用于简化连接的获取与释放。
    例如,该类内部可能封装了加载驱动、获取Connection的代码,对外提供getConnection()等方法,避免重复编写连接逻辑。
  • 通俗理解:相当于 "连接管理器",负责统一处理连接的创建、配置(如 URL、用户名、密码),简化上层代码对连接的使用。

总结:核心差异

代码类型本质作用
Connection数据库连接接口与数据库的 "通道"提供数据库操作的基础环境
PreparedStatementSQL 执行接口执行 SQL 的 "工具"具体执行查询、新增等操作
DBConnection自定义工具类连接管理的 "封装类"简化连接的获取与管理

简单说:DBConnection负责 "创建连接",Connection是 "连接本身",PreparedStatement是 "通过连接执行 SQL 的工具",三者形成 "管理 - 连接 - 操作" 的层级关系。

package com.hexiang.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DBConnection { /** * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(classDriver); return DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(DataSource dataSource) { try { return dataSource.getConnection(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(String jndiName) { try { Context ctx; ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiName); return dataSource.getConnection(); } catch (NamingException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(Properties properties) { try { String driver = properties.getProperty("jdbc.driverClassName"); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Class.forName(driver); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } /** * oracle连接 * * @param path * @return Connection */ public static Connection getOracleConn(String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值