Connection.prepareStatement()如何理解?

查看API时可以看到Connection和PrepareStatement都是接口;可是在接口Connection中又有prepareStatement()方法,可以通过... 查看API 时可以看到Connection和PrepareStatement都是接口;可是在接口Connection中又有prepareStatement()方法,可以通过该方法创建prepareStatement对象。 .....现在我迷糊了:1.一个接口中怎么有和另外一个接口名一样的方法?(这个方法和那个同名接口有什么关系?) 2.一个接口怎么能创建另外一个接口?(接口不是用来继承的么);
类似的还有DriverManager类中也有Connection()方法....
请教高手答疑解惑,感谢~
展开
 我来答
jamxval
2014-05-05 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1379万
展开全部
首先, 一个变量只是一个符号,接口类型的变量并不表示你必须用接口来 new 一样,这是面向对象的基本概念,任何一个对象实例都能赋值给它的父类型。
你应该先理解面向对象的概念,你这些问题表示你没有理解概念。

class Child implements Parent {
}
class Child extends parent {
}
Parent k = new Child(); // 上面两种情况都可以这样操作。

看完完整的样例再说,prepareStatement 是带参数的,一般来说数据库对于我们跑循环的情况(调用几百次但仅是参数不同的时候)会有优先的空间的,因为在SQL被数据库执行前它先要编译它把它翻译成一些内部指令,而这个过程对于 prepareStatement 来说只需要编译一次,当我们把参数 hard code 到 createStatement 中时因为SQL语句变了,所以数据库需要每次都重新编译而浪费了时间(很多复杂的SQL 几千个字符,涉及到N多表时编译和制定执行计划是很费时间的),当然像 Oracle 也够聪明,它发现你的SQL跟它缓存的已经编译过的SQL精确相同(连空格和大小写都完全相同)时也不再重新编译,其它的数据库就难说。

例如下面这条SQL语句:
select userid, username from tableA where email = ? order by username;

通过编译后的内部的指令可能是,只是举个例子,我并不了解内部细节:
1,从字典中找出tableA 所有的表空间数据文件,
2,email 是不是一个索引中的列?如果是我们不需要读取所有数据块,只需要根据索引来快速得到数据(因为是精确查询)
3,从表空间中分析出 tableA 大致在哪块 block 块中。
4,在这些块对比 email 列得到记录。
5,排序么?
6,在符合条件的记录中提取字段usrid 和 username。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式