JDBC相关
文章仅供本人目前学习总结用
一.JDBC原理
JAVA设计者想要通过对JAVA本身做一些接口,来满足各个不同数据库的连接并对其进行操作。但是在设计后发现每一个不同的数据库,其本身的内部结构与其他类型的数据库大不相同,于是JAVA就发布了一套标准,每一个数据库想要与JAVA连接,就必须实现这个标准中所规定的接口(JDBC API)。当各个数据库的开发公司实现这套标准中的接口后,JAVA只需要调用接口中的方法就能达到与数据库连接以及操作数据库的目的。这些实现了接口的实现类被打包成一个jar文件,该文件就叫做JDBC驱动文件。
二.JDBC连接操作步骤
在进行注册驱动前,必须将对应的连接数据库驱动jar文件加入到项目中。
import com.mysql.cj.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* @author 11963
* JDBC相关
*/
public class MyJdbcTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
// 注册驱动
// (有关驱动:如果使用的是驱动模式,则必须要通过Driver类来进行驱动的实现,
// 而注册驱动就是告诉本程序应该使用哪一个数据库的驱动)
// 连接准备工作
/* 需要说明在Mysql 8.0 以后的版本中 url 需要添加时区
url格式为:jdbc:连接数据库://ip地址:监听端口/数据库名称?serverTimezone(时区)=地区/城市*/
String url="jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai";
// 方式一:这里的new方式属于静态加载 灵活性很低。
// Driver driver= new Driver();
// 方式二:采用反射机制完成动态加载
// 再复习一下反射机制:
// java在进行每一个类的加载时,都会通过加载器将该类对应的class类对象放入到堆中,而这个
// Class对象就包含了该类的各种方法以及字段,而该对象的newInstance()方法就是获取一个本类实例
// Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
// 如果不转换成Driver,会出现编译错误,实际上aClass的运行类就是Driver.
// Driver driver= (Driver) aClass.newInstance();
// 方式三:采用驱动管理(上课讲的方法)
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
String username="root";
String password="tuyipan1217";
// 对获取到的驱动器进行注册
DriverManager.deregisterDriver(driver);
// 进行数据库连接
// DriverManager.getConnection(),该方法返回一个连接对象(
// 也可以通过Properties来传入参数
// 获取连接类
Connection connection=DriverManager.getConnection(url,username,password);
// 将用户名与密码储存在配置文件Properties中,Properties存储方式为键值对
Properties properties = new Properties();
// 需要注意的是user与password是规定好的key
properties.setProperty("user","root");
properties.setProperty("password","tuyipan1217");
// 进行连接工作,使用Connection类进行连接
// Connection connection=driver.connect(url,properties);||方式二
// 连接成功后,进行数据库操作
// Sql语句编写
String sql="select * from student";
String sql2="insert into student values(20,'图',STR_TO_Date('2017-01-06 10:20:30','%Y-%m-%d %H:%i:%s'),'男')";
/* Statement--> 静态sql语句的执行者,返回sql语句操作完成后的对象
要操作数据库必须通过Statement
Statement由连接对象进行产生(认为连接对象负责整个数据库的总工作,
将分配这些工作给Statment对象,由Statment对象来进行SQL语句的执行)*/
Statement statement = connection.createStatement();
// 调用statement对象的执行方法,根据sql语句的类型选择不同的执行方法
// Query-->询问,查询。
// Update-->更新,修改。
// 很明显查询语句返回的是一张临时表,更新语句返回的是受影响的行数。
statement.executeQuery(sql);
statement.executeUpdate(sql2);
// 关闭连接
// 很好理解,在进行完JDBC操作后需要关闭连接释放资源
// 必须注意关闭顺序
statement.close();
connection.close();
}
}
···
public class MyJdbcTest2 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
// 方式四
// 需要注意的是反射语句在mysql driver5.1.6以后无需再写
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver= (Driver) aClass.newInstance();
String username="root";
String password="tuyipan1217";
String url="jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai";
Connection connection=DriverManager.getConnection(url,username,password);
// 很明显方式四是最好的一种,不需要进行驱动器注册,
// 这是由于在对Driver类进行加载时,其内部的静态代码会自动注册
}
}
三.疑问
为什么要进行注册驱动:
首先,由JDBC的运行原理可以知道,JDBC是采用了驱动的运作模式,而在JAVA中对驱动的操作必须由Driver类来实现,所以需要用到Driver类,而注册驱动就是告诉程序应该使用哪一个数据库的驱动类型。