使用JDBC,我们能够利用不同的数据库驱动来创建于数据库的连接,进而实现数据库的各种操作。
本文共列举了四种方式,四种方法逐渐完善前一种的缺点,所以第四种是最好的也是最常用创建连接方式。
方式一
-
使用Driver获取一个实例对象。
-
使用 Driver 的 connect() 方法 返回一个Connection的实例对象,有这个实例对象就创建了连接.
**connect()的参数需要一个url和info,url是数据库的目标,info是一个properties对象,需要有user和password两个参数,用作连接数据库的用户和密码。
缺点:
这个com.mysql.jdbc.Driver类,不是属于java本身的,是第三方库,导致的问题就是如果在编译前引入第三方库,将会导致编译失败.
//方式一
@Test
public void test1() throws SQLException {
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","root");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
方式二
在第一种方式的基础上,使用反射获取Driver类的实例,其他地方一样
//方式二
@Test
public void test2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//1.获取Driver实现类对象,利用反射
Class clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","root");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
方式三
在第二种方式的基础上,使用DriverManager的getConnection()方法获取Connection实例
-
利用反射获取一个Driver实例对象。
-
用DriverManager的 静态方法registerDriver() 注册这个数据库驱动Driver。(可以省略,原因是在Driver实例化的时候,其源码中有一个静态代码块,执行了这一注册操作)。
-
用DriverManager的getConnection()方法获取Connection实例对象。
getConnection需要三个String类型的参数:
url:指向数据库目标地址
user:登录数据库用户名
password:登录用户密码
缺点:
但是这种方式还是不够好,因为在编译后,类似于url,user,password这类参数将不能修改,一般情况,我们将编译好的项目部署在服务器上时,需要修改这些参数就只能重新编译,但这样往往不显示,一个项目可能有很多个模块很复杂,这样非常不利于开发工作。
@Test
public void test3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
方式四(最常用)
改进第三种方式的缺点,选择从本地加载配置文件,便于编译后也能随便修改参数。此外,还有一个好处,对于不会代码的人来说,直接在代码层面修改数据库的参数很危险,但是修改配置文件却不难。
1.获取类加载器,引入配置文件输入流。
2.实例化Properties对象,将配置文件内容加载进去.。
3.将配置文件中指定的Driver类载入内存(重要!重要!重要!)。
4.用DriverManager的静态方法getConnection() 获取Connection对象实例。
@Test
public void test4() throws IOException, ClassNotFoundException, SQLException {
InputStream is = Test1.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//加载驱动
Class.forName(driverClass);
//获取链接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}