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
相关产品推荐
相关产品推荐

