Java获取连接数据库的方式(通过JDBC)
多种方式只是一层一层的迭代,一种一种的改进
如需调用,直接看方式五即可
-
方式一
- 创建一个Driver对象
- 调用connect方法,其中要传两个参数
- String url:连接数据库的地址
- Properties info:用来保存登录MySQL数据库的用户名密码的集合
@Test public void test1() throws SQLException { //1.获取Driver实现类的对象 Driver driver = new com.mysql.cj.jdbc.Driver(); /* jdbc:mysql 协议 localhost IP 3306 默认mysql的端口号 test 访问的数据库名称 serverTimezone=UTC 时区 characterEncoding=utf-8 字符集 useSSL=false 是否SSL连接 */ String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"; Properties info = new Properties(); //用来存储登录MySQL的用户名密码 info.setProperty("user","root"); info.setProperty("password","Hkx123"); //2.调用connect方法 Connection connect = driver.connect(url, info); System.out.println(connect); }
-
方式二
为了代码具有更好的可移植性,我们采用反射的方式来获取mysqljdbcimpl
@Test public void test2() throws Exception { //1.获取Driver实现类的对象,通过反射机制 Class clazz = Class.forName("com.mysql.cj.jdbc.Driver"); Driver driver = (Driver) clazz.newInstance(); //2.提供需要连接的数据库 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"; //3.提供连接数据库的用户名密码 Properties info = new Properties(); info.setProperty("user","root"); info.setProperty("password","Hkx123"); Connection connect = driver.connect(url, info); System.out.println(connect); }
-
方式三
使用DriverManager代替Driver
@Test public void test3() throws Exception { //1.获取Driver实现类的对象,通过反射机制 Class clazz = Class.forName("com.mysql.cj.jdbc.Driver"); Driver driver = (Driver) clazz.newInstance(); //2.注册驱动 DriverManager.registerDriver(driver); //提供另外3个基本信息 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "Hkx123"; //3.连接数据库 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
-
方式四
方式三的一种简化写法
@Test public void test4() throws Exception { //1.提供另外3个基本信息 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"; String user = "root"; String password = "Hkx123"; //2.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // Driver driver = (Driver) clazz.newInstance(); // DriverManager.registerDriver(driver); //3.连接数据库 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
我们可以发现不需要自己定义DriverManager类也可以实现数据库的连接,这是为什么呢?
因为driver类的静态方法帮我们创建了Driver并注册了驱动
//driver类的静态方法 public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { } static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } }
-
方式五(最终版)
此方法是最优写法,将需要提供的数据写入配置文件中
优点:实现了数据与代码的分离,解耦
如果需要修改配置文件信息,不需要将代码重新打包
@Test public void test5() throws Exception { //1.读取配置文件 InputStream is = ConnectTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(is); //2.获取配置文件信息 String user = properties.getProperty("user"); String password = properties.getProperty("password"); String url = properties.getProperty("url"); String driverClass = properties.getProperty("driverClass"); //3.注册驱动 Class.forName(driverClass); //4.连接数据库 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); } ------------------------------------------------------------------------------------------------------- //以下是配置文件,需放在src目录下 jdbc.properties user=root password=Hkx123 url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false driverClass=com.mysql.cj.jdbc.Driver