(1) 什么是JDBC?
数据库供应商为自己的数据库产品各自设计了不同的协议。Sun公司想让Java应用程序能够跨数据库运行,提出了JDBC。说白了, JDBC就是Java为与数据库连接提供的一套标准通信技术(也有人认为,JDBC是Java连接数据库的API)。 有了它,我们所写的Java程序就可以很容易的不受具体数据库供应商的限制了。
(2) JDBC设计
Sun公司为了Java应用程序能与各种数据库正常通信,设计了一套标准数据库通信协议。
简单的说:这套通信标准包括三个部分:面向应用程序端的API,面向JDBC驱动器的API,以及一个JDBC驱动管理器。想要做到Java语言与数据库的通信,必须做到:
首先,数据库的供应商必须为数据库设计一个JDBC驱动器,这个驱动器一方面满足某一数据库的具体访问协议。另一方面必须满足JDBC驱动管理器API所提出的要求。这样,这个特定数据库的驱动程序就可以注册到驱动器管理器了。
然后,应用程序开发商只需要使用JDBC API,调用驱动管理器中指定的驱动程序就可以连接上某一数据库了。
这种数据库通信方式,对应用程序开发十分方便。我们的应用程序之需要改变被加载驱动程序的名称,其他的代码都不需要变化,就可以方便的从一个数据库产品移动到另一个数据库产品上。
另外,ODBC是Microsoft为C语言访问数据库提供的一套编程接口。如果数据库供应商只提供了ODBC驱动器。那么可以通过JDBC-ODBC桥来进行连接。
(3) JDBC连接实例
这里有一段JAVA应用程序连接MySql数据库的例子:
我们首先需要一个MySql的JDBC驱动程序: mysql-connector-java-5.1.6-bin.jar(见附件).
//连接数据库 public class SqlUtil { /**与特定数据库的连接*/ private static Connection conn=null; /**数据库连接驱动程序,值为{@value}*/ private static String driverClassName="com.mysql.jdbc.Driver"; /**数据库URL,值为{@value}*/ private static String url="jdbc:mysql://127.0.0.1:3306/fcdb?useUnicode=true&characterEncoding=gbk"; /**数据库用户名,值为{@value}*/ private static String username = "xxxx"; /**数据库用户密码,值为{@value}*/ private static String password = "xxxx"; /**创建数据库连接*/ static{ try{ //动态加载mysql的驱动 Class.forName(driverClassName); //DriverManager 类用于跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。 conn=DriverManager.getConnection(url,username,password); }catch(Exception e){ e.printStackTrace(System.err); } } } /**获取数据库中数据*/ public static void getData(){ try{ Statement st=conn.createStatement(); String sql="......."; ResultSet rs=st.executeQuery(sql); rs.getString("name"); }catch(Exception e){ e.printStackTrace(); } } }
对于上面的例子。在《数据库编程(二)》中会有详细讲解。 这里提一点,上面的应用程序所使用的所有类,方法都是JDBC面向应用程序端提供的API,至于供应商所要使用的面向JDBC驱动程序的API都封装在mysql-connector-java-5.1.6-bin.jar里了。
这里我用别人的一段话,形象的阐述一下JDBC到底是什么,干什么用?
在这我就举个连接数据库的例子吧,我们JAVA程序员肯定会经常和数据库打交道,所以SUN公司肯定会给我们提供链接和操作数据库的方法吧,但是我们再仔细想想,全世界的数据库厂商不止一家吧!它里面的实现原理肯定也大有不同吧!那么SUN公司给你们每个数据库厂商都要写上一大堆的方法去连接和操作你,如果真的那么做了,SUN公司肯定会疯的,再说了谁知道以后还有什么新的数据库会出现,所以那样做肯定是相当不现实的,这时接口可就要发威了。 SUN公司会提供大量的接口,里面会写好多空方法,SUN还会给这些方法起个比较有意义的名字,作用就是要让实现我这接口的类明白你要做什么事,但具体怎么做我就不管了,然后SUN会把这些接口都装到一个大盒子里(JDBC) 。如果哪家数据库厂商想跟我连接那你就去实现我这些接口然后你们自己去写大量的代码来实现我的所有的方法,这就是你们数据库厂商的事了,比如说SQLserver和oracle它们分别用不同的方法实现了SUN给的那些接口,然后把这些类再打成 jar包(驱动类),我们就可以通过这些包对相应的数据库进行操作了。这下发现JAVA接口的作用了吧!