You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Connection接口createStatement()返回Statement引用及接口实例创建原理问询

关于Connection.createStatement()的常见疑问解答

1. 为什么Connection接口的createStatement()能返回Statement类型引用?

这是面向接口编程的典型设计:

  • Connection和Statement都是JDBC定义的接口,它们只约定了必须实现的方法规范,不关心具体实现细节。
  • Java的多态特性允许接口引用指向其任意实现类的对象,所以createStatement()可以返回任何实现了Statement接口的类实例,用Statement类型引用接收完全合法。

2. 代码stmt=con.createStatement();的作用

这行代码完成两个核心操作:

  • 调用Connection实例con的createStatement()方法,创建一个具备Statement接口功能的对象。
  • 将该对象的引用赋值给Statement类型变量stmt,后续就能通过stmt调用Statement接口定义的方法(比如executeQuery()执行查询、executeUpdate()执行增删改)来操作数据库。

3. 无法直接创建接口实例,这种场景是怎么实现的?

JDBC靠驱动实现类+工厂模式解决这个问题:

  • 你通过DriverManager.getConnection()或DataSource获取的Connection实例,本质是JDBC驱动(比如MySQL、Oracle驱动)提供的Connection接口实现类对象,比如MySQL的com.mysql.cj.jdbc.ConnectionImpl。
  • 这个驱动实现类内部已经实现了createStatement()方法,执行该方法时会创建并返回对应驱动的Statement实现类对象(比如MySQL的com.mysql.cj.jdbc.StatementImpl)。
  • 开发者不需要关心具体实现类的名称和细节,只需要基于JDBC接口编程即可,这也是JDBC能兼容不同数据库的核心原因——驱动厂商负责实现接口,开发者面向接口编码。

内容的提问来源于stack exchange,提问作者Salman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:35:11