201711671208 《Java程序设计》之Java初尝连接MySQL数据库 第十周学习计划

首先报一个重要前提:我的jdk是从  1.8.0-102升的 1.8.0-191,这个是个重大铺垫

然后用MySQL官方下载器下载的MySQL数据库以及 JDBC-MySQL数据库驱动,以下是我的版本号

看的是耿祥义编写的《Java2实用教程》Example11-1,其中书里给出的源码是这样的:

import java.sql.*; 
public class Example11_1 {
   public static void main(String args[]) {
      Connection con=null;
      Statement sql; 
      ResultSet rs;
      try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
      }
      catch(Exception e){}
      String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";
      String user ="root";
      String password ="";
      try{  
         con = DriverManager.getConnection(uri,user,password); //连接代码
      }
      catch(SQLException e){ }
      try { 
          sql=con.createStatement();
          rs=sql.executeQuery("SELECT * FROM mess"); //查询mess表
          while(rs.next()) {
             String number=rs.getString(1);
             String name=rs.getString(2);
             Date date=rs.getDate(3);
             float height=rs.getFloat(4);
             System.out.printf("%s\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date); 
             System.out.printf("%.2f\n",height);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println(e);
      }
  }
}

然后我报一下耿祥义所用的 jdk版本是1.8.0-102,数据库驱动版本号是5.1.40。对比一下我用的驱动版本可以看出版本相差的有点儿远了。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

开始实验了。

把上面的那段代码扔进idea里运行,报错如下:

1.没有找到合适的数据库驱动

明明我的MySQL Installer安装了数据库驱动 Connector/J 为什么仍然会报错没有找到驱动呢?原来还需要把该驱动复制到JDK的拓展目录中!根据MySQL Installer提示的安装路径找到原来的驱动安装位置。

把该目录下面的 mysql-connector-java-8.0.13.jar 文件扔到Java JDK1.8.0-191安装路径的ext文件夹内,再次运行,然而仍然没有报错没有找到数据驱动,我看了看还有个旧版本1.8.0-102呢,点开这个文件夹里一看发现即使升级了jdk仍然有文件残余,这个文件夹里也有个ext文件夹,于是把 mysql-conector-java-8.0.13.jar 也扔了进去这个ext文件夹里。在运行,数据库驱动总算找到了,然而又报了另外一个错误。

2.不能连接到数据库,连接失败。

我想起来还要进行数据库初始化并启动MySQL服务器两个重要步骤!我用管理员身份进入 cmd ,之所以用管理员身份是因为之前有过非管理员身份操作C盘的东西会显示“访问失败”的先例。登入后 cd 到MySQL的安装路径下的bin目录下面,依次输入

--initialize-insecure

//按回车键

mysqld

//按回车键

虽然没有任何提示,但已经是初始化成功并启动了服务器了。再运行,又报一个错误。

3.代码里的  Class.forName("com.mysql.jdbc.Driver");   已经被弃用。

我上网搜了一下,把这个语句改为  Class.forName("com.mysql.jdbc.Driver");    便可以解决问题,之所以出现这个报错大概是因为JDK版本号差异所致的吧,耿祥义所用的 jdk版本是1.8.0-102,我的是1.8.0-191,然后再次运行,又跳出来一个错误。

4.这个报错可长了,甚至还包含乱码: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. 

看上去好像和时间有点关系,把这串东西百度一下,解决方法是 在   String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";   内加入一段serverTimezone=UTC,最后成为  

String uri = "jdbc:mysql://localhost:3306/jxgl?user=root&password=&useSSL=true&serverTimezone=UTC";

注意的是在末尾加去前添加了符号“&”。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最后的最后,把  rs=sql.executeQuery("SELECT * FROM mess");    改成 rs=sql.executeQuery("SELECT * FROM student");

把  String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";  改成  String uri = "jdbc:mysql://localhost:3306/jxgl?user=root&password=&useSSL=true&serverTimezone=UTC";

因为在之前自己建立了一个名为 jxgl 的数据库,里面有一个 student 的表。运行结果如下:

总算大功告成了!!

尝试过在Java里写SQL语句大小写没什么区别,把student 写成 STUDENT照样能打印出来,数据库建表时定义为小整型的年龄Sage也能以String的形式打印出来,看上去效果一样。但如果在某些时候要区别开来还是要注意一下类型更好。

最后贴一下最终代码:

import java.sql.*;
class findjxgl {
    public static void main(String args[]) {
        Connection con =null;
        Statement sql;
        ResultSet rs;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
        }
        String uri = "jdbc:mysql://localhost:3306/jxgl?user=root&password=&useSSL=true&serverTimezone=UTC";
        /*String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";*/
        String user = "root";
        String password = "";
        try {
            con = DriverManager.getConnection(uri, user, password);
        } catch (SQLException e) {
        }


        try {
            con = DriverManager.getConnection(uri);
        } catch (SQLException e) {
            System.out.println(e);
        }
        try {
            sql = con.createStatement();
            rs = sql.executeQuery("SELECT * FROM STUDENT");
            while (rs.next()) {
                String Sno = rs.getString(1);
                String Sname=rs.getString(2);
                String Ssex = rs.getString(3);
                int Sage = rs.getInt(4);
                String Sdept = rs.getString(5);
                System.out.printf("%s\t", Sno);
                System.out.printf("%s\t",Sname);
                System.out.printf("%s\t", Ssex);
                System.out.printf("%d\t", Sage);
                System.out.printf("%s\n", Sdept);
            }
            con.close();
        } catch (SQLException e) {
            System.out.println(e);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u011633428/article/details/84197391
今日推荐