1.问题描述

最近在做数据库课设时要求做一个既有前端又有后端的程序,在使用JDBC连接数据库时出现了错误。原本代码是书上的,但出现了莫名错误,只是提示存在空指针,一时间上网搜寻无果,花了几个小时后误打误撞找到了问题。

2.原本代码

import java.sql.*;
public class Connect{
    public static void main(String args[]){
        Connection con=null;
        Statement sql;
        ResultSet rs;
        public Connect() {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");//加载jdbc-mysql驱动
            }
            catch(Exception e) {}
            String url="jdbc:mysql://127.0.0.1:3306/test?&useSSL=false";
            String user="root";
            String password="123456";
            try {
                con=DriverManager.getConnection(url,user,password);
            }
            catch(SQLException e) {}
            try {
                 sql=con.createStatement();
                 rs=sql.executeQuery("select * from staff");
                 while(rs.next()) {
                      String number=rs.getString(1);
                      System.out.println(number);
                  }
                  con.close();
             }
             catch(SQLException e) {
                  System.out.println(e);
             }
         }
    }
}

3.发现问题

程序会报出NullPointException错误,并定位到第 20行,搞得我刚开始一直以为第 20行出现错误,但经过分析后觉得 url不对的可能性更大,我就用网上搜来的代码来测试数据库是否连接成功,无意间找到了问题所在,url里面要指定 serverTimezone=GMT,修改之后的代码就是下面那样。

4.修改后代码

import java.sql.*;
public class Connect{
   Connection con=null;
   Statement sql;
   ResultSet rs;
   public Connect() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载jdbc-mysql驱动
        }
        catch(Exception e) {
            System.out.println("驱动加载失败!");
            e.printStackTrace();
        }
        String url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
        String user="root";
        String password="123456";
        try {
            con=DriverManager.getConnection(url,user,password);
        }
        catch(SQLException e) {
            System.out.print("数据库连接失败!");
            e.printStackTrace();        
        }
    }
}

5.总结

问题排查:

  1. 防火墙问题
  2. eclipse中是否构建jdbc驱动路径
  3. 云主机要注意安全组设置
  4. 数据库服务或端口是否开启
Last modification:April 12th, 2021 at 10:41 pm
如果觉得我的文章对你有用,请我喝杯奶茶吧