JDBC简介及连接MySQL数据库
JDBC简介 JDBC(Java DataBase Connectivity)可以让我们用相同的方式访问不同的数据库,它定义了一套标准的接口,即访问数据库的通用API。它是sun公司开发的一套数据库访问编程接口,由java语言编写完成。不同的数据库厂商根据自己数据库的特性去实现JDBC提供的这套接口。 JDBC具有很好的跨平台特性,使用JDBC编写的数据
JDBC简介
JDBC具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,所以不必在不同的平台上去编写不同的应用程序。
JDBC接口
首先,JDBC接口分为四类
1:DriverManager:驱动管理接口
2:Connection,DatabaseMetaData:链接接口
3:Statement,PreparedStatement,CallableStatement:语句对象接口(用于执行SQL语句)
4:ResultSet,ResultSetMetaData:结果集合接口(执行select语句的结果)
DriverManager:管理一组JDBC驱动程序的基本服务,我们通过DriverManager来获取Connection。
Connection:通过驱动器DriverManager获取,用来获取Statement
Statement:用于执行SQL语句
ResultSet:在执行查询语句时的返回集接口
JDBC原理及工作流程
工作流程
1:加载驱动,创建链接(加载驱动靠DriverManager),通过DriverManager获取连接Connection 【调用DriverManager.getConnection()方法获取】
2:创建语句对象(通过Connection创建Statement用于执行SQL语句)
3:执行SQL语句
4:处理结果集:若执行select语句,会产生结果集ResultSet
5:关闭连接:调用Connection的close()方法
JDBC工作原理:JDBC定义接口标准,数据库厂商实现接口,程序员调用接口,实际调用的是底层数据库厂商的实现部分。
JDBC连接数据库
连接数据库之前我们需要加载驱动器(DriverManager),我们使用Class.forName()方法,如果要加 载的数据库是MySQL,那么加载驱动器的固定格式为
Class.forName("com.mysql.jdbc.Driver")( mysql-connector-java 5)
Class.forName("com.mysql.cj.jdbc.Driver")( mysql-connector-java 6)
这样就可以进行数据库的驱动加载了,但是,在驱动加载时,如果出现ClassNotFoundException,说明数据库 的jar包没有导入到项目中,如果导入包还出现这个错误,大部分原因是因为书写的驱动有错误或者导入的jar包不是对应的数据库的jar包,还要注意:如果我们导入的MySQL的jar包是mysql-connector-java用的6.0以上的,那么驱动加载的时候再使用"com.mysql.jdbc.Driver"加载的话就会出错。
如果我们使用的是Oracle数据库,那么加载驱动的方式为
Class.forName("oracle.jdbc.driver.OracleDriver");
我们可以在MySQL/Oracle的官网上下载对应的jar包,接下来我们该通过DriverManager获取数据库的Connection了。获取数据库的链接也有固定的格式
Connection coon = DriverManager.getConnection("路径","用户名","密码");
getConnection是DriverManager中的静态方法,用来获取Connection,此方法需要三个参数,后两个参数就是要登陆数据库的用户名和密码了,这个都是我们所知道的,现在主要讲一下第一个参数。
根据我们所连接的数据库的不同,此方法的第一个参数也会不一样
Oracle: "jdbc:oracle:thin:@IP地址:端口号:SID"
MySQL:"jdbc:mysql://IP地址:端口号/databaseName"
Oracle数据库默认的端口号是1521,MySQL默认的端口号是3306,如果我闷得数据库在我们自己的电脑上,IP地址就是127.0.0.1(本机地址)
连接数据库的警告
如果我们这样写,还是要注意一些事情的,例如,可能会在执行的时候出现这种警告(仅限MySQL数据库)
Tue May 29 21:04:51 CST 2018 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.
不推荐不使用服务器身份验证来建立SSL连接。如果未明确设置,MySQL 5.5.45+, 5.6.26+ and 5.7.6+版本默认要求建立SSL连接,为了符合当前不使用SSL连接的应用程序,verifyServerCertificate
属性设置为’false’,如果你不需要使用SSL连接,你需要通过设置useSSL=false
来显式禁用SSL连接,如果你需要用SSL连接,就要为服务器证书验证提供信任库,并设置useSSL=true
。我们在在链接自己的MySQL数据库的时候,是不需要使用SLL链接的,所以可以直接在第一个参数后加上useSLL = false就可以避免出现这个警告了。
"jdbc:mysql://IP地址:端口号/databaseName?useSLL = false"
还有一种警告,和我们使用的MySQL的jar包的版本有关
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
这个警告只有在我们驱动加载语句为"com.mysql.cj.jdbc.Driver"的时候才可能会出现,如果我们导入的MySQL的jar包是6以后的,我们就必须要指定时区serverTimezone,我们只需要在后面加上serverTimezone=UTC就可以了(UTC是统一标准世界时间,这个时区可以任选,例如亚洲时间Asia)
"jdbc:mysql://IP地址:端口号/databaseName?serverTimezone=UTC"
最后我们要解决乱码的问题:只需要加上useUnicode=true&characterEncoding=UTF-8就可以解决了
"jdbc:mysql://IP地址:端口号/databaseName?useUnicode=true&characterEncoding=UTF-8"
所以,结合以上三种警告,我们在获取Connection的时候的第一个参数为
"jdbc:mysql://IP地址:端口号/databaseName?useUnicode=true&characterEncoding=UTF- 8&serverTimezone=UTC&useSLL = false"
现在再来看一下数据库的链接代码
package com.company;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
String UTR = "jdbc:mysql://127.0.0.1:3306/dxy?useSSL=false&serverTimezone=UTC&characterEncoding=UTF8";
String name = "root";
String Password = " ";
String sql = "SELECT empno,ename,sal,deptno, FROM dxy";
try{//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
Connection coon = DriverManager.getConnection(UTR,name,Password);//创建连接对象
Statement statement = coon.createStatement();//创建语句对象
System.out.println(statement.execute("CREATE database aaaas"));
coon.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
连接数据库成功!我就先总结到这里,不是很详细,不过希望能对大家有所帮助。
更多推荐
所有评论(0)