JDBC连接Mysql数据库的几种方式
-
第三方引入驱动
String url = "jdbc:mysql://localhost:3306/test"; Properties properties = new Properties(); properties.setProperty("user","root"); properties.setProperty("password","root"); // 获取Driver实现类对象 Driver driver = new com.mysql.jdbc.Driver(); Connection connection = driver.connect(url,properties); System.out.println(connection);
在使用driver.connect连接数据库的时候,我们需要获取一个url(访问数据库的路径)和info(也就是几组键值对、有关数据库信息的、其中最少包括user和password),因此我们需要往properties中注入相关信息;url中:jdbc:mysql——代表协议;localhost——ip地址;3306——Mysql默认端口号;test——本地数据库。
在使用这种方式连接数据库的时候、虽然看上去很简便,但是代码中涉及到第三方就是代码中的Driver(),我们在切换的时候就会产生问题或者当第三方不再更新开发的时候会引发不必要的麻烦、对程序的可移植性需要有一点维护能力
-
可移植性开发
String url = "jdbc:mysql://localhost:3306/bigwork"; Properties properties = new Properties(); properties.setProperty("user","root"); properties.setProperty("password","1438"); // 获取Driver实现类对象 Class c = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver)c.newInstance(); Connection connection = driver.connect(url,properties); System.out.println(connection);
我们需要用到的是反射,Class.forName他会帮助我们在整个文档中去寻找指定的类,返回一个Class类,然后我们获取得到了这个类之后还不够,因为我们需要的是Driver类的对象、因此我们需要再去获得它的对象,用这两步就可以得到与上面一样的使用效果,而还可以使得代码不再使用第三方的api
-
DriverManager的使用
String url = "jdbc:mysql://localhost:3306/bigwork"; String user = "root"; String password = "1438"; Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection(url,user,password); System.out.println(connection);
在这里,我们省略了注册与获取对象两个部分,而代码依旧可以连接数据库,是因为mysql自己帮我们完成了注册环节。Driver中,存在一个静态代码块,在类的加载后就会执行,这个静态代码块会帮我们完成注册环节。也可以理解为加载、连接两部分
-
封装信息(推荐)
首先我们需要把我们需要连接数据库的基本信息进行一个封装
user=root password=root url=jdbc:mysql://localhost:3306/test driverClass=com.mysql.jdbc.Driver
新建一个jdbc.properties文件将基本信息填入
InputStream inputStream = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(inputStream); String user = properties.getProperty("user"); String password = properties.getProperty("password"); String url = properties.getProperty("url"); String driverClass = properties.getProperty("driverClass"); Class.forName(driverClass); Connection connection = DriverManager.getConnection(url,user,password); System.out.println(connection);
我们将外部的文件放入properties中,帮助我们完成键值对的配对,再将信息取出来,完成我们的连接
-
连接池的使用(推荐)
在我们使用数据库连接池的时候要注意、外部的properties文件里面的各种键值对编写的方式是有一定约束的、不是随意的编写,例如:
所以我们在编写的时候、要符合对应的规范
username=root password=1438 url=jdbc:mysql://localhost:3306/project driverClassName=com.mysql.jdbc.Driver initialSize=5 maxActive=10
我们给定了初始化时连接的个数以及最大的连接数、这样可以很好的帮我们管理连接
public static DruidDataSource dataSource; static { InputStream inputStream = jdbcutil.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); try { properties.load(inputStream); dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } }public static Connection getConnection(){ Connection connection = null; try { connection = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return connection; }public static void close(Connection connection){ if(connection != null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
在我们连接完成后、最好去关闭连接、这样可以帮我们更好的回收资源以及减少内存的占用。