JDBC连接数据库
这里我先上一段简单的连接操作:
// 导入类
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
public class FirstJdbcExample {
@Test
public void connection() throws Exception {
// MySQL用户名和密码
String user = "username";
String password = "password";
// URL地址
String url = "jdbc:mysql://localhost:3306/jdbcdata?useSSL=true&rewriteBatchedStatements=true";
// 驱动名称,这里是MySQL
String driverClass = "com.mysql.cj.jdbc.Driver";
// 注册驱动
Class.forName(driverClass);
// 创建连接
Connection con = DriverManager.getConnection(url, user, password);
System.out.println(con);
// 关闭连接
con.close();
}
}
运行结果:
com.mysql.cj.jdbc.ConnectionImpl@25df00a0
运行成功后,输出的是JDBC连接实例对象的地址。
当我们的MySQL驱动程序添加到依赖后,就可以使用JDBC建立一个数据库连接了。建立连接只有简单的四个步骤,如下:
- 导入JDBC包:在Java代码中,用import语句添加你需要的类
- 注册JDBC驱动程序:这一步将使得JVM加载所需的驱动程序到内存中执行,这样才能实现你的JDBC请求。
- 数据库URL制定:通过创建一个正确的URL地址来指向你想要连接的数据库。
- 创建连接对象:调用DriverManager对象的getConnection()方法来建立实际的数据库连接。
导入JDBC包
// JDBC类
import java.sql.*;
注册JDBC驱动程序
方法一:Class.forName()
Class.forName() 是注册驱动程序中最常用的方法,该方法可以将驱动程序动态的加入到内存中,并自动注册。该方法较其它方法更优越些,因为它允许用户直接对驱动配置进行修改,便于移植。
// 驱动名称,这里是MySQL
String driverClass = "com.mysql.cj.jdbc.Driver";
// 注册驱动
Class.forName(driverClass);
方法二:DriverManager.registerDriver()
// 该方法在某些版本已经进行了优化,下述以未优化的版本通过JDBC连接Oracle数据库为例
Driver myDriver = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( myDriver );
// MySQL
Driver myDriver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver( myDriver );
// 8.0.28版本的MySQL驱动Jar包已进行了优化并做出了如下解释:
// Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Driver driver = new Driver();
DriverManager.registerDriver(driver);
数据库URL制定
当你加载了驱动程序之后,你可以通过 DriverManager.getConnection() 方法建立一个连接。为方便参考,以下列出了三个加载 DriverManager.getConnection() 方法:
- getConnection(String url)
- getConnection(String url, Properties prop)
- getConnection(String url, String user, String password)
可以看出,该方法需要一个数据库URL,该URL是指向待连接数据库的地址。在建立数据库连接时,大多数的问题都来自URL的配置。
MySQL的URL如下:
jdbc:mysql://hostname/ databaseName
// 例子:jdbc:mysql://localhost:3306/jdbcdata,表示连接本地的mysql的名为jdbcdata的数据库。
创建连接对象
连接方式就是通过getConnection()方法进行连接,上述已给出了三种方式。
第一种,将必要信息放在URL中:
@Test
public void connection1() throws Exception{
// 将用户名和密码放在URL中传入
String url = "jdbc:mysql://localhost:3306/jdbcdata?user=YourName&password=YourPassword";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url);
System.out.println(con);
con.close();
}
第二种方式,使用Properties类传入必要信息:
@Test
public void connection2() throws Exception{
// Properties对象
Properties info = new Properties();
info.put("user","YourName");
info.put("password","YourPassword");
String url = "jdbc:mysql://localhost:3306/jdbcdata";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url, info);
System.out.println(conn);
conn.close();
}
其中的第三种,单独传入数据库用户名和密码:
@Test
public void connection3() throws Exception {
// 用户名和密码
String user = "YourName";
String password = "YourPassword";
// URL
String url = "jdbc:mysql://localhost:3306/jdbcdata";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url, user, password);
System.out.println(con);
con.close();
}
关闭连接
在 JDBC 程序的末尾,它必须明确关闭所有的连接到数据库的连接,以结束每个数据库会话。但是,如果忘了,Java 垃圾收集器也会关闭连接,它会完全清除过期的对象。
但是依托垃圾收集器,特别是在数据库编程,是非常差的编程习惯。你应该养成用 close()方法关闭连接对象的习惯。
为了确保连接被关闭,你可以在代码中的 ‘finally’ 程序块中执行。 无论异常是否发生,finally 程序是肯定会被执行的。
conn.close();
上述过程的完整代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import org.junit.Test;
public class FirstJdbcExample {
@Test // 实例代码
public void connection() throws Exception {
// MySQL用户名和密码
String user = "Yourname";
String password = "YourPassword";
// URL地址
String url = "jdbc:mysql://localhost:3306/jdbcdata?useSSL=true&rewriteBatchedStatements=true";
// 驱动名称,这里是MySQL
String driverClass = "com.mysql.cj.jdbc.Driver";
// 注册驱动
Class.forName(driverClass);
// 创建连接
Connection con = DriverManager.getConnection(url, user, password);
System.out.println(con);
// 关闭连接
con.close();
}
@Test
public void connection3() throws Exception {
String user = "YourName";
String password = "YourPassword";
String url = "jdbc:mysql://localhost:3306/jdbcdata";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url, user, password);
System.out.println(con);
con.close();
}
@Test
public void connection1() throws Exception{
String url = "jdbc:mysql://localhost:3306/jdbcdata?user=YourName&password=YourPassword";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url);
System.out.println(con);
}
@Test
public void connection2() throws Exception{
Properties info = new Properties();
info.put("user","YourName");
info.put("password","YourPassword");
String url = "jdbc:mysql://localhost:3306/jdbcdata";
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url, info);
System.out.println(conn);
conn.close();
}
}