JDBC之在IDEA中连接mysql出现的问题及解决方法

8 篇文章 0 订阅

目录

创建工程,导入驱动jar包

注册驱动

获取连接

定义SQL语句

获取执行SQL对象

执行SQL

处理返回结果

释放资源

配置

 获取连接

 换了个方法一:出现第三方库API

方法二:反射实例化Driver

 方法三:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。

方法四:可以只是加载驱动,不用显示的注册驱动过了

​编辑

方法五:(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接


  • 创建工程,导入驱动jar包

我的idea是8.0.30版本,所以驱动包也是对应版本

  • 注册驱动

    Class.forName("com.mysql.jdbc.Driver");

  • 获取连接

    Connection conn = DriverManager.getConnection(url, username, password);

    Java代码需要发送SQL给MySQL服务端,就需要先建立连接

  • 定义SQL语句

String sql =  “update…” ;
  • 获取执行SQL对象

执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象

Statement stmt = conn.createStatement();
  • 执行SQL

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.”,加上还是报错

 换了个方法一:出现第三方库API

 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)

数据库抛出一个异常: 用户使用密码访问数据库时遭到拒绝

解决思路:

  1. 密码错误,重设数据库密码再登录

  2. 数据库并没有给你分配足够的权限

仔细一想我的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

  //        方法二:反射实例化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个基本要素。

 //        方法三:使用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);

    }

方法五:(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接

*此种方式的好处?
*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);

    }

说明:使用配置文件的方式保存配置信息,在代码中加载配置文件

**使用配置文件的好处:**

①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。

最终结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值