我们要通过JDBC操作数据库,那么最基本的条件就是首先获得与数据库的连接,接下来简述获取数据库连接的几种逐级演化的方式,当然,在这几种方式中我们最常使用的是最后一种。
获取数据库连接对象的方式1:
代码演示:
private static void methodOne() throws SQLException { //获取连接的第一种方式 //1.javax包下的Driver类的对象的创建实现对不同数据库厂商的驱动的加载 Driver driver=new com.mysql.jdbc.Driver(); //根据driver对象获得连接对象 Properties properties=new Properties(); properties.setProperty("user","root"); properties.setProperty("password","123456"); Connection connect = driver.connect("jdbc:mysql://localhost:3306/db1", properties); System.out.println(connect); connect.close(); }
我们来分析一下上面的代码:
Driver driver=new com.mysql.jdbc.Driver();
上面的代码中两个Driver是不同的,蓝色的Driver是sun公司制定的数据库厂商实现驱动的接口,橙色的Driver是MySql数据库根据sun公司制定的Driver接口的实现类,在我们创建Driver对象的时候,我们就已经实现了MySql数据库的驱动的加载和注册,我们可以查看一下Driver类的源码:
获取数据库连接对象的方式2:
代码如下:
private static void methodTwo() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { //第二种方式: // 使用反射的方式获得Driver对象 Class clazz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver) clazz.newInstance(); //驱动中的Driver类实现了java.sql中的Driver接口 //通过Driver对象获得连接对象 Properties properties=new Properties(); properties.setProperty("user","root"); properties.setProperty("password","123456"); Connection connect = driver.connect("jdbc:mysql://localhost:3306/db1", properties); System.out.println(connect); connect.close(); }
通过第一种方式我们知道,在Driver类被加载的时候MySql的驱动就会被注册,所以我们不需要通过new的方式创建Driver类的对象。
获取数据库连接对象的方式3:
代码如下:
private static void methodThree() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { //第三种方式:使用DriverManager替代Driver Class clazz = Class.forName("com.mysql.jdbc.Driver");//使用DriverManager类获得连接对象 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "123456"); System.out.println(connection); connection.close(); }
以为我们不再使用Driver类的独享获取连接对象,所以不需要再创建driver类的对象。
获取数据库连接对象的方式4:
代码如下:
private static void methodFive() throws SQLException { //第五种方式: //不用手动加载Driver类,直接获得连接对象,但是这种方式不建议使用,因为如果是其他的数据库可能就不会支持这一种方法 //不用手动加载的原因是在mysql的驱动jar包中含有META-INF.service.java.sql.Driver文件有驱动中Driver类中的全类名 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "123456"); System.out.println(connection); connection.close(); }
这种方式的通用性差,有的数据库厂商并不支持这一种方式,所以不建议省略类加载的过程。
获取数据库连接对象的方式5:
public class TestJDBC { public static void main(String[] args) throws Exception { //最终方式:加载配置文件的方式 InputStream is = TestJDBC.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties prop=new Properties(); prop.load(is); String driverClass = prop.getProperty("driverClass"); String url = prop.getProperty("url"); String user = prop.getProperty("user"); String password = prop.getProperty("password"); //加载驱动 Class.forName(driverClass);//加载驱动里面包含了注册驱动 //获取连接对象 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); connection.close(); }
在实际的开发中我们常常将Driver类的类路径,连接的数据库服务的地址,用户名,密码单独的写在一个配置文件中,使用加载配置文件的方式获得相应的信息,这样有利于程序的开发。
值得注意的是:类加载器加载文件的默认路径是类路径下,也就是src下