目录
方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
方法五:(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
我的idea是8.0.30版本,所以驱动包也是对应版本

Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, username, password); Java代码需要发送SQL给MySQL服务端,就需要先建立连接
String sql = “update…” ;
执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
### 具体操作
* 创建新的新的项目


* 定义项目的名称,并指定位置

* 对项目进行设置,JDK版本、编译版本
选中项目→右键→打开模块设置(F4)



* 创建模块,指定模块的名称及位置


* 导入驱动包
将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件

复制驱动包mysql-connector-java-8.0.30.jar到刚刚创建的lib里
选中启动,右键→添加为库

* 在添加为库文件的时候,有如下三个选项(生效范围)
* Global Library : 全局有效
* Project Library : 项目有效
* Module Library : 模块有效(选中这个)

* 在src下创建类


* 编写代码如下
- package com.jdbc;
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.Statement;
-
- /**
- * @author 乱码酱
- * @date :2022-09-20 10:02
- * @program: JDBC
- * @create:JDBC快速入门
- */
- public class JDBCdemo {
- public static void main(String[] args) throws Exception {
- //1. 注册驱动
- // Class.forName("com.mysql.jdbc.Driver");
- //2. 获取连接
- String url = "jdbc:mysql://127.0.0.1:3306/db1";
- String username = "root";
- String password = "1234";
- Connection conn = DriverManager.getConnection(url, username, password);
- //3. 定义sql
- String sql = "update account set pasword = 111 where id = 1";
- //4. 获取执行sql的对象 Statement
- Statement stmt = conn.createStatement();
- //5. 执行sql
- int count = stmt.executeUpdate(sql);//受影响的行数
- //6. 处理结果
- System.out.println(count);
- //7. 释放资源
- stmt.close();
- conn.close();
- }
- }

不出意外的话应该是出了意外
报错:
Exception in thread "main"java.sql.sQLException:Access denied for user 'root '@ localhost’ (using password: YES) 线程“main”中的异常java.sql.sQLException:拒绝用户‘root’@localhost‘的访问(使用密码:YES)

新版本类名前要加“cj.”,加上还是报错

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.
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
加载类com.mysql.jdbc.Driver。‘com.mysql.cj.jdbc.Driver’这个驱动程序是通过SPL自动注册的,手动加载驱动程序类通常是不必要的。
//解决方法
把com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver 即可

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
数据库抛出一个异常: 用户使用密码访问数据库时遭到拒绝
密码错误,重设数据库密码再登录
数据库并没有给你分配足够的权限
仔细一想我的mysql密码终于想起来了,登录上了
完整代码:
- public class ConnectionTest {
- @Test
- public void testConnection1()throws SQLException {
-
- try {
- //1.提供java.sql.Driver接口实现类的对象
- Driver driver = new com.mysql.cj.jdbc.Driver();
-
- //2.提供url,指明具体操作的数据
- String url = "jdbc:mysql://localhost:3306/jdbc";
- //jdbc :mysql:协议
- //localhost :ip地址
- //3306:默认mysql的端口号
- //jdbc:jdbc数据库
-
- //3.提供Properties的对象,指明用户名和密码
- Properties info = new Properties();
- info.setProperty("user", "root");
- info.setProperty("password", "123321");
-
- //4.调用driver的connect(),获取连接
- Connection conn = driver.connect(url, info);
- System.out.println(conn);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
说明:上述代码中显式出现了第三方数据库的API

- // 方法二:反射实例化Driver
- @Test
- public void testConnection2() throws Exception {
- // 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
- try {
- //1.使用反射获取Driver实现类对象
- Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
- Driver driver = (Driver) clazz.newInstance();
-
- // 2.提供要连接的数据库
- String url = "jdbc:mysql://localhost:3306/jdbc";
-
- //3.提供Properties的对象,指明用户名和密码
- Properties info = new Properties();
- info.setProperty("user", "root");
- info.setProperty("password", "123321");
-
- //4.调用driver的connect(),获取连接
- Connection conn = driver.connect(url, info);
- System.out.println(conn);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- // 方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。
- @Test
- public void testConnection3() throws Exception {
- // 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
- try {
- //1.使用反射获取Driver实现类对象
- Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
- Driver driver = (Driver) clazz.newInstance();
-
- // 2.提供另外三个连接的基本信息
- String url = "jdbc:mysql://localhost:3306/jdbc";
- String user = "root";
- String password = "123321";
-
- //3.注册驱动
- DriverManager.registerDriver(driver);
-
- // 4.获取连接
- Connection conn = DriverManager.getConnection(url, user, password);
- System.out.println(conn);
-
- } catch (SQLException e) {
- e.printStackTrace();
- }
-
- }

说明:不必显式的注册驱动了。因为在DriverManager的源码中已经存在静态代码块,实现了驱动的注册。

- // 方法四:可以只是加载驱动,不用显示的注册驱动过了
- @Test
- public void testConnection4() throws Exception {
- // 一开始是 ClassNotFoundException,去掉前缀,使其范围扩大
- // 1.提供数据库连接的4个基本要素
- String url = "jdbc:mysql://localhost:3306/jdbc";
- String user = "root";
- String password = "123321";
- String driverName = "com.mysql.cj.jdbc.Driver";
-
- //2.加载Driver实现类对象
- Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
- // 相较于方法三,可以省略如下操作:
- // Driver driver = (Driver) clazz.newInstance();
- // //3.注册驱动
- // DriverManager.registerDriver(driver);
- /*
- 可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:
- static {
- try {
- DriverManager.registerDriver(new Driver());
- } catch (SQLException var1) {
- throw new RuntimeException("Can't register driver!");
- }
- }
- */
-
- // 4.获取连接
- Connection conn = DriverManager.getConnection(url, user, password);
- System.out.println(conn);
-
- }
*此种方式的好处?
*1.实现了数据与代码的分离。实现了解耦
*2.如果需要修改配置文件信息,可以避免程序重新打包

其中,配置文件声明在工程的src目录下:【jdbc.properties】
src右键→新建→文件jdbc.properties
- #提供数据库连接的4个基本要素
- url = jdbc:mysql://localhost:3306/jdbc
- user = root
- password = 123321
- driverClass = com.mysql.cj.jdbc.Driver

-
- //方式五(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
- /*此种方式的好处?
- *1.实现了数据与代码的分离。实现了解耦
- *2.如果需要修改配置文件信息,可以避免程序重新打包。*/
- @Test
- public void testConnection5() throws Exception {
- InputStream is = JDBCdemo.class.getClassLoader().getResourceAsStream("jdbc.properties");
- Properties pros = new Properties();
- pros.load(is);
-
- //2.读取配置信息
- String user = pros.getProperty("user");
- String password = pros.getProperty("password");
- String url = pros.getProperty("url");
- String driverClass = pros.getProperty("driverClass");
-
- //3.加载驱动
- Class.forName(driverClass);
-
- //4.获取连接
- Connection conn = DriverManager.getConnection(url,user,password);
- System.out.println(conn);
-
- }
说明:使用配置文件的方式保存配置信息,在代码中加载配置文件
**使用配置文件的好处:**
①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。
最终结果:
