java连接mysql-8.0.11的问题一二

今天尝试搞了下Java连接mysql数据库,之前看过相关知识,了解了原理基础,但一动手就遇到了麻烦事。

前几天已经把mysql搞好了,版本是5.6.40,配置了可视化的Navicat,方便操作。今天下载jar包时没有找到相应的版本,官网上纯英文,看的头疼,选项都很神奇,于是乎一不做二不休,把老版本的mysql删了,下了最新的8.0.11,安装时显示当前运行的是5.6.40~~~然后用了 sc delete mysql清理掉老版本才能继续安装新版本,这里要说一下,比较坑的就是彻底清除mysql,大家可以去百度一下相关的教程,设计注册表及相关服务文件,还是比较麻烦的。

安装完成后需要设置系统环境变量,将对应的路径加入path即可,接着就是新建一个my.ini文件,它 是MySQL数据库中使用的配置文件,修改这个文件可以达到更新配置的目的。在这里遇到了问题,该配置文件需要给出mysql数据库的数据的存放目录,但是下载的mysql并没有data这个文件夹,这时需要设置一下:(来自百度)

打开cmd命令窗口,进入到mysql安装目录的bin目录下。然后输入命令:

mysqld --initialize-insecure --user=mysql

然后回车;

去目录下查看,已经自动创建好data文件夹。

注意这句命令 --符号前面是有一个空格的
然后是初始化数据库:mysqld --initialize-insecure,这条命令是用管理员身份运行命令行,进入安装MySQL下的bin目录输入的,就此自动生成了root用户。
然后进入命令行窗口,输入mysqld -install来安装mysql,成功后启动它:net start mysql,这两条命令都是在bin目录下进行的……一切顺利的话就可以进入mysql了,使用命令mysql -u root -p 即可,第一次登陆密码为空,接着可以设置密码啦,这里出现了各种问题,百度了好几种设置密码的方式都不行,好像是涉及了关键字要用·符号(反单引号),但是修改之后还是不行,最后还是找到了一个最新的安装教程,关于8.0.11的,他最后提到了客户端连接如果出现caching-sha2-password问题,解决方案为:

首先:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则

接着:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码

最后:FLUSH PRIVILEGES; #刷新权限

至此问题基本上解决了,用Navicat连接数据库,新建表student,如下所示:

接下来就是重点了,在Eclipse中新建一个web项目,新建一个libs文件夹,将jar包放里面,然后发布其路径,也就是将jar包添加到“项目->属性->java构建路径”中,在src中新建一个类SqlConnect,接着就是常规操作,代码较多,全是套路:
package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlConnect {

    public static void main(String[] args) {
        //声明Connection对象
        Connection con;
        //驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        //URL指向要访问的数据库名mysql
        String url = "jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC";
        //MySQL配置时的用户名
        String user = "root";
        //MySQL配置时的密码
        String password = "123456";
        //遍历查询结果集
        try {
            //加载驱动程序
            Class.forName(driver);
            //1.getConnection()方法,连接MySQL数据库!!
            con = DriverManager.getConnection(url,user,password);
            if(!con.isClosed())
                System.out.println("Succeeded connecting to the Database!");
            //2.创建statement类对象,用来执行SQL语句!!
            Statement statement = con.createStatement();
            //要执行的SQL语句
            String sql = "select * from student";
            //3.ResultSet类,用来存放获取的结果集!!
            ResultSet rs = statement.executeQuery(sql);
            System.out.println("执行结果如下所示:");  
            System.out.println("-----------------");  
            System.out.println("姓名" + "\t" + "年龄"+ "\t" + "职位");  
            System.out.println("-----------------");  
             
            String name = null;
            String position = null;
            int age=0;
            while(rs.next()){
                //获取name这列数据
            	 name = rs.getString("name");
                //获取age这列数据
                age=rs.getInt("age");
                //获取position这列数据               
                position = rs.getString("position");
                //输出结果
                System.out.println(name + "\t" + age + "\t" + position);
            }
            rs.close();
            con.close();
        } catch(ClassNotFoundException e) {   
            //数据库驱动类异常处理
            System.out.println("Sorry,can`t find the Driver!");   
            e.printStackTrace();   
            } catch(SQLException e) {
            //数据库连接失败异常处理
            e.printStackTrace();  
            }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            System.out.println("数据库数据成功获取!!");
        }
    }

}

这应该是最简单的连接数据库操作吧,不过还是出现了各种错误,讲真,错误提示真的看不懂,也不知如何调试,只能查找相关讯息,结果发现新版本有新特性,首先, 最新官方支持将com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver,此外mysql8.0是不需要建立ssl连接的,你需要显示关闭,即url中的useSSL=false;最后你需要设置CST,CST可视为美国、澳大利亚、古巴或中国的标准时间。serverTimezone是设置时区的,大家可以查一下相关知识。
最后的最后,有由于疏忽大意,在url路径后面多加了个?,结果各种神奇的错误,小错最难防啊,引以为戒……

最后运行程序效果如下:
ok,大概就是这些,遇到问题,解决问题,继续走下去……

猜你喜欢

转载自blog.csdn.net/u014483914/article/details/80330125
今日推荐