jdbc接口实现问题,来大神

java1juzi 2016-05-12 04:48:26
最近接触到jdbc,我有个疑问,建立连接的时候调用的都是接口,那么接口的方法是怎么实现的呢?
比如声明:
Connection con;
Statement sql;
ResultSet rs; //Connection 、Statement 、ResultSet 都是接口

con=DriverManage.getConnection("jdbc:odbc:hello”,"",""); // DriverManage是一个类,getConnection是静 态方法,返回类型是Connection接口;
sql=con.createStatement();
rs=sql.executeQuery(“SELECT *FROM table”);


我想问一下,Statement接口的getConnection,ResultSet接口的executeQuery方法都没有看到实现,怎么就直接用了。
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
misterliwei 2016-05-13
  • 打赏
  • 举报
回复
他其实就是遍历到了你刚刚注册的com.mysql.jdbc.Driver对象调用这个对象的connect方法,在connection方法中,它会先创建一个实现了java.sql.Connection接口的对象,然后返回该对象的Connection接口。
键圣 2016-05-13
  • 打赏
  • 举报
回复
就拿连接Mysql为例: //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //拿到连接 conn = DriverManager.getConnection(url); 首先分析注册驱动为什么我叫它注册呢? 看mysql驱动的com.mysql.jdbc.Driver这个类 里面有一个静态块(静态块在加载类的时候会被执行的) static { try { DriverManager.registerDriver(new Driver()); } catch(SQLException E) { throw new RuntimeException("Can't register driver!"); } } } 他去JDK的DriverManager中注册了自己,把Driver类的一个对象传给了DriverManager 然后看JDK的DriverManager类的getConnection方法(private的那个)其中有一段 for(DriverInfo aDriver : registeredDrivers) { // If the caller does not have permission to load the driver then // skip it. if(isDriverAllowed(aDriver.driver, callerCL)) { try { println(" trying " + aDriver.driver.getClass().getName()); Connection con = aDriver.driver.connect(url, info); if (con != null) { // Success! println("getConnection returning " + aDriver.driver.getClass().getName()); return (con); } } catch (SQLException ex) { if (reason == null) { reason = ex; } } } else { println(" skipping: " + aDriver.getClass().getName()); } } 他其实就是遍历到了你刚刚注册的com.mysql.jdbc.Driver对象调用这个对象的connect方法获取Connection对象 这个对象其实是Mysql自己实现的,希望对你有帮助
  • 打赏
  • 举报
回复
多态+1.。。。。。。。。
YuanFY_V 2016-05-12
  • 打赏
  • 举报
回复
多态,有很多子类实现了。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧