获取数据库连接
要素一:Driver接口实现类
Driver接口介绍
-
java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂使用的,不同数据库厂商提供不同实现
-
在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
-
Oracle的驱动:oracle.jdbc.driver.OracleDriver
-
mySql的驱动:com.mysql.jdbc.Driver
-
代码实现:五种连接方式实现(三种方式为迭代关系)
为什么使用迭代:这里的java程序是面向接口编程的,所以需要有更好的可移植性,那么代码中就需要竟可能的不出现第三方相关的api
public class ConnectionText {
//方式一:
@Test
public void testConnection() throws SQLException {
//获取Driver的实现类对象
//第三方api
Driver driver = new com.mysql.jdbc.Driver();
//jdbc:mysql:协议
//localhost:IP地址
//3306:默认mysql的端口号
//dbtest:mysql中的数据库名称
//String url = "jdbc:mysql://localhost:3306/dbtest";
String url = "jdbc:mysql://localhost:3306/test";
//将用户名和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user","root");//账号
info.setProperty("password","sa123");//密码
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
//方式二:对方式一的迭代,使用反射解决第三方api的出现,使得程序具有更好的可移植性
@Test
public void testConnection2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//获取Driver实现类对象,使用反射
Class aClass = Class.forName("com.mysql.jdbc.Driver");
Driver dri = (Driver) aClass.newInstance();
//提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/test";
//提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","sa123");
Connection connect = dri.connect(url, info);
System.out.println(connect);
}
//方式三:使用DriverManage替换Driver
@Test
public void testConnection3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//获取Drive的实现类对象
Class aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
//提供另外三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "sa123";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
//方式四:
@Test
public void testConnection4() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
//1.提供另外三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "sa123";
//2.获取Drive的实现类对象
//该操作也可以省略,但是不推荐,省略的情况只存在于连接mysql,当连接的是oracle时就不行了
Class.forName("com.mysql.jdbc.Driver");
//相较于方式三,可以省略如下操作
//Driver driver = (Driver) aClass.newInstance();
//注册驱动
//DriverManager.registerDriver(driver);
//为什么可以省略上述操作呢?
/*
* 在mysql的Driver实现类中,声明了如下的操作,它已经使用静态代码块帮助我们实现了注册驱动这步操作
* static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
* */
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
//方式五(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
/*
此方法的好处
1.实现了数据与代码的分离。实现了解藕
*/
@Test
public void getConnection5() throws IOException, ClassNotFoundException, SQLException {
/*
配置文件格式:
user=root
password=sa123
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
*/
//1.读取配置文件中的4个配置信息,使用类加载器
//InputStream resource = ConnectionText.class.getClassLoader().getResourceAsStream("jdbc.properties");
InputStream resource = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pro = new Properties();
pro.load(resource);
String user = pro.getProperty("user");
String password = pro.getProperty("password");
String url = pro.getProperty("url");
String driverClass = pro.getProperty("driverClass");
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}