日期:2014-05-20  浏览次数:20756 次

java各接口中的函数是在哪里实现的
问题一:package   java.sql;

public   interface   Statement   {
        ResultSet   executeQuery(String   sql)   throws   SQLException;
        int   executeUpdate(String   sql)   throws   SQLException;
        void   close()   throws   SQLException;
        int   getMaxFieldSize()   throws   SQLException;
        void   setMaxFieldSize(int   max)   throws   SQLException;
}    
就比方说以上几个,我只列了这几个。我们用数据库查询功能时直接写Statement   语句,但这些函数也直接用了,不知这些函数是如何实现的?
      请高手指教!谢谢!
问题二:
    java中有native函数,这是通过java调用本地虚拟机中的函数实现的,这个和以上函数实现的方式有区别吗?


------解决方案--------------------
每个JDBC,你不是先要加载数据库的驱动程序嘛?这些就是在驱动程序中实现的。
------解决方案--------------------
這些接口是你倒入的數據庫類庫中的類實現的,比如class12.jar
------解决方案--------------------
JDBC是一套标准,没有源码,要说源码,基本上全是接口定义。
也就是说,JDBC定义了所有的接口标准,具体代码交给驱动程序编写者去实现。
做为应用开发人员,研究驱动程序代码意义不大,JDBC的初衷就是要让数据访问透明化,将不同数据库的访问方式统一起来。再说,驱动程序的底层代码相当多,而且一般是不开源的。
------解决方案--------------------
JDBC 一般通过 TCP/IP 协议与数据库连接的,也需要使用 Socket 的,具体的实现各种数据库都不相同,可能与 DBMS 的物理结构、设计以及与外部通信协议有关系吧。

SQL Server 和 Oracle 的驱动没有看到过源代码,但 MySQL 可以找到源代码,这些驱动的代码量是非常庞大的,不熟悉 DBMS 的架构的话,是很难看懂的。
------解决方案--------------------
帮顶,接分
------解决方案--------------------
那些东西是在驱动里实现的。

比如Oracle是在class12.jar这个驱动里实现的。

SQL Server2000有三个jar:msbase.jar,mssqlserver.jar msutil.jar。

不是写在JDK源码里的,因为不同的数据库实现的方式不一样,这些东西是靠各数据产商写的,而不是SUN公司写的,SUN公司只是提供了这个接口。

就像你的电脑上的USB接口一样,可以接MP3,又可以接游戏手柄,也可以接打印机一样。电脑主板只是提供这个接口。USB的接口有四条线,两条数据线,两条电源线,只要接上去的部件依照这个接口来做,就可以正常工作。

就像Connection这个接口,有个createStatement方法,这个方法体是空的,具体的实现在不同的JDBC驱动里是不一样的。