今天尝试搞了下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,大概就是这些,遇到问题,解决问题,继续走下去……