这里以mysql为例
public class mysqldemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
Statement st = conn.createStatement();
String sql = "select * from testtable";
//返回值为获取到结果集
ResultSet resultSet = st.executeQuery(sql);
}
}
代码解析
Class.forName("com.mysql.cj.jdbc.Driver");
作用为:要求jvm查找并加载指定的类(com.mysql.cj.jdbc.Driver),加载类就意味着需要需要执行静态代码块。
查看com.mysql.cj.jdbc.Driver源码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
/**
* Construct a new driver and register it with DriverManager
*
* @throws SQLException
* if a database error occurs.
*/
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
类中有一个静态代码块,在类被加载的时候,会制定该静态代码带块,这个静态代码块的作用是注册该类到驱动管理器中【DriverManager】,为什么这么写这个是JDBC的规范
因此【Class.forName("com.mysql.cj.jdbc.Driver");】这句代码的意思是将mysql的驱动加载类实例化。
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
作用:通过驱动管理器【DriverManager】将上一步注册的myql驱动取出,并调用驱动的【connect】方法,获取一个mysql的链接对象Connection conn,
Statement st = conn.createStatement();
String sql = "select * from testtable";
//返回值为获取到结果集
ResultSet resultSet = st.executeQuery(sql);
作用:调用链接对象conn,执行对应sql并返回结果集