关于sql 包中的 statement 接口

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:54:10
在 java 的sql 包里不是有很多接口么,像我们常用的 Connection 、Driver 、ResultSet 、statement ,而我们连数据库的时候,只是执行statement的execute() 方法,方法里什么也没有,那它是怎么实现查询命令的?还有,接口里的方法没有完全实现,系统也没有报错,为什么?

你只知道什么是接口,却不知道为什么要使用接口。

听说接口回调这个说法吗。你必须关心statement是怎么来的。

Statement statement=connection.creStatement();

问题就在这句话里面。 connection.creStatement();返回的到底是什么?

请你仔细想好再回答。

其实connection.creStatement();返回的是一个实现了statement接口的类。

当然你不知道到底是哪个类,你只要知道它实现了statement接口就行,然后用接口的引用去指向那个类就叫接口回调。 你想想,你要开灯只要按一下那个开关,相当于那个接口引用,至于那个开关具体是怎么实现开关灯功能的你不知道,你也不需要知道,对使用者来说,这就是接口的一大好处。因为具体返回哪个类由Connection类来决定,而且恰恰那个类也不用你写。

那么现在你应该知道 了,statement.execute();实现了没有。 也就是人家帮你实现了那个接口,你只管用,不用关具体怎么实现的,因为,那个方法需要什么参数,有什么功能在接口里已经写的很清楚了。

再给你一个接口回调的例子。迭代器的实现

HashSet set=new HashSet();
Iterator it=set.iterator();

由hashset来决定怎么去实现iterator接口,你只管定义接口引用,然后就去使用接口里有的方法就行。

由厂商的提供的JDBC驱动实现,比如MySQL和Oracle的驱动不同的,如果SUn不用接口用类把它实现了,那就麻烦大了,接口只是定出了一个协议,规定你必须实现什么,怎么实现的就不关心

Connection对象.createStatement(); 实际上就是创造了一个Statement的接口实现类 所以能够new,也可以执行execute方法