JDBC(Java DataBase Connectivity java数据库连接)是JAVA官方提供的一套接口,用于连接并操作数据库。
不同的数据库厂商都提供了一套JDBC的实现类,并以jar包形式发布,用于使我们的程序可以通过这套实现类来操作其数据库,这套jar称为”驱动”。我们无需记住这些数据库提供商提供的JDBC实现类的名字,只要使用JDBC接口看待它们即可,以多态形式调用它们来操作数据库。
DriverManager是实现类,用于加载数据库驱动,并与数据库连接连接,成功建立后产生Connection
表示与数据库的连接,负责管理事务,创建Statement实例
负责执行SQL语句
查询结果集
mysql-connector-java 5:com.mysql.jdbc.Driver
mysql-connector-java 6以上 :com.mysql.cj.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
存数据时:数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
取数据时:在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
//JDBC驱动名及数据库URL
static final String jdbc_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/test?" +
"userUnicode=true&" +
"characterEncoding=utf-8&" +
"useSSL=false";
//账号和密码
static final String username = "root";
static final String password = "123456";
Connection conn = DriverManager.getConnection(DB_URL, username, password);
Statement state = conn.createStatement();
专门用来执行DML语句的方法,返回值是一个整数用来表示执行了该DML语句后影响了表中多少条数据。
专门用来指定DQL语句的方法,返回值为查询结果集。
所有SQL语句都可以执行,但由于DML、DQL有专门的方法,所以该方法一般用来执行DDL语句。返回值为true时说明执行后有返回值,但是若执行不是DQL语句,其他类型语句执行后返回值都是false。
String sql = "CREATE TABLE userinfo( "+
" id NUMBER(6), "+
" username VARCHAR2(32), "+
" password VARCHAR2(32), "+
" email VARCHAR2(50), "+
" nickname VARCHAR2(32), "+
" account NUMBER(10,2) " +
")";
state.execute(sql);
conn.close();
如果依赖使用6以上版本但Class.forName还是使用com.mysql.jdbc.Driver代码执行会出现如下信息
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.
解决方法:将com.mysql.jdbc.Driver更换为com.mysql.cj.jdbc.Driver或把依赖mysql-connector-java版本降低到6以下
MySQL 5.5.45+, 5.6.26+ and 5.7.6+版本默认要求建立SSL连接 可以通过useSSL=false禁用SSL连接,否则会出现如下警告
WARN: Establishing SSL connection without server’s identity verification is not recommended.
According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection
must be established by default if explicit option isn’t set.
For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’.
You need either to explicitly disable SSL by setting useSSL=false,
or set useSSL=true and provide truststore for server certificate verification.