jdbc是sun公司为了简化,统一Java操作不同的数据库而定义的一套标准java类库,jdbc独立于任何数据库管理系统,使用统一的方式开来访问数据库,屏蔽了很多细节,使用方便。
JAVA程序只需要使用java.sql包下的api来访问数据库,而不需要关心不同数据库的差异,这里jdbc其实是定义了一组接口,这组接口包含两个层次,一是面向应用到API,二是面向数据库的API,面向应用的API由java程序中使用,而面向数据库的API又具体数据库厂商实现(即JDBC驱动)。这里使用的时候主要是体会到了面向接口编程,我们面向JDBC这一组接口编程,而这些具体的实现是在各个数据库厂商的驱动中。
访问数据的相关内容
Driver接口java.sql.Driver接口是所有JDBC驱动的都需要实现的,这个接口由各个厂商具体实现,我不关心。在程序中可是使用实现了Driver接口的类,但是一种更为好的方式是使用驱动管理类(java.sql.DriverManager),让驱动管理区调用这些具实现类。
加载与注册JDBC驱动
加载 JDBC 驱动需调用 Class 类的静态方法 forName() ,向其传递要加载的 JDBC 驱动的类名DriverManager 类是驱动程序管理器类,负责管理驱动程序
通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例
建立连接
直接调用DriverManager的getConnection方法的到应用程序和数据的连接这里会用到具体的三个字符串:JDBC url:JDBC url的标准由三部分组成,各部分间用冒号分隔。
- jdbc:<子协议>:<子名称>
协议:JDBC URL中的协议总是jdbc
子协议:子协议用于标识一个数据库驱动程序
子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
例如:jdbc:MySQL://localhost:3306/testjdbc - username:连接数据库的用户名。
- password:连接数据库的密码。
连接数据库
1.通过具体的Driver对象的实现类来连接数据库
@Test
public void testDriver() throws Exception {
// 1.创建一个Driver实现类的对象
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/testjdbc";
Properties properties = new Properties();
properties.put("user", "tuxianchao");
properties.put("password", "123456");
// 2.调用driver接口的connect方法
Connection connection = driver.connect(url, properties);
System.out.println(connection);
}
2.通过驱动的管理类DriverManager来连接数据库,并且将数据库的配置分离到jdbc.properties文件中去
/**
* 通过DriverManager获取数据库连接
*
* DriverManager是驱动的管理类
*
* 1.可以通过重载的getconnection方法获取数据库连接,使用时调用具体驱动的获取数据库,使用方便
*
* 2.可以同时管理多个驱动程序,连接多个数据库
*
* @throws Exception
*/
@Test
public void testDriverManager() throws Exception {
String driverClass = null;// driver实现驱动的全类名
String url = null;// 数据库服务器地址
String user = null;// 数据库用户名
String password = null;// 数据库密码
// 获取类路径下的jdbc.properties配置文件
InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties pro = new Properties();
pro.load(in);
driverClass = pro.getProperty("driver");
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
// 加载驱动(注册驱动) 可以加载多个驱动,同时连接不同的数据库
/**
* DriverManager.registerDriver((Driver)
* Class.forName(driverClass).newInstance());
*
* 无须使用这种方法,因为Calss.forName(driverClass)时候,具体的实现类有一个静态代码块来做相关的工作
*/
Class.forName(driverClass);
// 连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
```