栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

JDBC学习(一) --------- JDBC概述及初次连接数据库时遇到的问题

JDBC学习(一) --------- JDBC概述及初次连接数据库时遇到的问题

目录
  • 一、JDBC概述
    • 1. 什么是JDBC?
    • 2. JDBC原理
    • 3. JDBC本质
    • 4. JDBC中主要接口、类及方法的介绍
    • 5. JDBC访问数据库流程
  • 二、初次连接数据库会出现的问题
    • 1. 配置环境变量classpath
    • 2. 出现 java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect"错误
    • 3. 出现 java.sql.SQLException: "Unable to load authentication plugin 'caching_sha2_password' "错误
    • 4. 出现 Loading 'class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'.错误
    • 5.出现 com.mysql.cj.exceptions. Invalid Connection Attribute Exception : The server time zone .....错误
    • 6. IDEA运行JDBC
    • 7. 注意
  • 三、JDBC访问数据库代码


一、JDBC概述 1. 什么是JDBC?

JDBC(JavaDatabase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

2. JDBC原理

早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

3. JDBC本质

JDBC本质就是一套接口

4. JDBC中主要接口、类及方法的介绍
Driver接口
    - Driver接口由数据库厂家提供,对于Java开发者而言,只需要使用Driver接口就可以了。
  - 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。
  - 驱动:就是各个厂商实现Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件,jar包内包含了众多的class文件。
  - 装载mysql驱动:Class.forName("com.mysql.jdbc.Driver");
  - 装载oracle驱动:Class.forName("com.jdbc.driver.OracleDriver");

DriverManager接口
    - DriverManager接口是JDBC的管理层,作用于用户和驱动程序之间。 
    - DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。

Connection接口
    - Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。
    - DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上
    -Mysql
          Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
    -Oracle
          Connection con = DriverManager.getConnection("jdbc:oracle:thin@host:port/database", "user", "password");

Statement接口
    - 用于执行静态SQL语句并返回它所生成结果的对象。
    - 三种Statement类:
      - Statement:
         由createStatement创建,用于发送简单的SQL语句(不带参数)
      
      - PreparedStatement:
      - 继承自Statement接口,有preparedStatement创建,用于发送含有一个或者多个输入参数的SQL语句。PreparedStatement对象比Statement对象效率更高,并且是防止SQL注入。我们一般都使用PreparedStatement。

    - CallableStatement:
    - 继承自preparedStatement。由方法prePareCall创建,用于调用存储过程。

  - 常用的Statement方法 
     - execute():运行语句,返回是否有结果集。
      - executeQuery():运行select语句,返回ResultSet结果节
      - executeUpdate():运行insert/update/delete操作,返回更新的行数。
    
5. JDBC访问数据库流程
1. 注册驱动
class.forName("com.mysql.cj.jdbc.Driver");//启动类加载机制,由于Driver内部注册驱动代码放于静态代码块中,而静态代码块在类加载时执行

2. 获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT", "root", "密码");

3. 获取数据库操作对象
Statement stmt = conn.createStatment();

4. 执行sql语句
int count = stmt.executeUpdate("sql语句"); //executeUpdate()方法返回执行的语句条数

5. 处理查询结果集
若是DQL语句,则执行sql语句时用executeQuery()方法
返回值用 ResultSet rs 来接收
输出调用 rs 的getString方法

6. 关闭资源
conn.close();
stmt.close();

注意:要对conn及stmt对象进行异常处理(SQLException)

二、初次连接数据库会出现的问题 1. 配置环境变量classpath
1. 到官网上下载jar包
2. classpath=.;jar包路径
2. 出现 java.sql.SQLException: null, message from server: "Host ‘xxx’ is not allowed to connect"错误

原因 :Mysql数据库默认不支持远程链接,也就是远程服务器不允许Java程序访问它的数据库,因此对远程进行设置即可,即对权限进行修改。

解决方法:
1. 用命令行登录mysql
2. 输入use mysql
3. mysql这个数据库中有张user表, 输入select host from user;
4. 输入update user set host = "%" where host = "user";
5. 输入flush privileges 或 重启mysql辅助 

修改后user表结果如下

+-----------+
| host      |
+-----------+
| %         |
| localhost |
| localhost |
| localhost |
+-----------+
3. 出现 java.sql.SQLException: "Unable to load authentication plugin ‘caching_sha2_password’ "错误

原因: JDBC版本与Mysql版本不匹配,Mysql5与Mysql8的密码加密方式发生变化,Mysql5的加密方式为 mysql_native_password,而Mysql8的加密方式为caching_sha2_password

解决方法:到官网上安装新版本Jar包,并对原来的Jar包进行覆盖

4. 出现 Loading ‘class com.mysql.jdbc.Driver’. This is deprecated. The new driver class is ‘com.mysql.cj.jdbc.Driver’.错误

原因 : 驱动类class com.mysql.jdbc.Driver已经过时了,新版本JDBC有新的驱动类class com.mysql.cj.jdbc.Driver。

解决方法:
    将com.mysql.jdbc.Driver修改为com.mysql.cj.jdbc.Driver
5.出现 com.mysql.cj.exceptions. Invalid Connection Attribute Exception : The server time zone …错误

原因: 新版本JDBC要求在数据库url后要加上时区

解决方法:
    url后加上时区"jdbc:mysql://localhost:3306/mydatabase?serverTimezone=GMT"
6. IDEA运行JDBC
1. 在包下新建目录lib
2. 将jar包复制到lib中
3. 配置path:点左上角File,点开project structure,找到Modules--->Dependencies,点下方的加号,把刚刚引入的jar包导入即可

7. 注意

一定要注意url的格式别写错了!!!

三、JDBC访问数据库代码
Connection conn = null;
Statement stmt = null;
try {
	Driver driver = new com.mysql.jdbc.Driver();
	DriverManager.registerDriver(driver);
    String url = "jdbc:mysql://localhost:3306/mydatabase";
    String user = "root";
	String password = "111";
	conn = DriverManager.getConnection(url,user,password);
    stmt = conn.createStatement();
    int count = stmt.executeUpdate("delete from dept where deptno = 50");
    System.out.println(count == 1? "删除成功":"删除失败");
} catch(SQLException e){
	e.printStackTrace();
} finally {
	if(conn != null) {
		try {
			conn.close();
		} catch(SQLException e){
			e.printStackTrace();
	    }
	}
	if(stmt != null) {
	    try {
			stmt.close();
		} catch(SQLException e){
			e.printStackTrace();
		}
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号