eclipse连接mysql 一直处于空指针

点击 注册或者登录都是处于Null状态,连接不到数据库,昨天会报空指针异常,今天已经加了if else 没有错误 但还是处于con等于Null的状态,不能进入数据库

连接怎么获取的发出来看看,另外控制台报错也发出来

该回答引用ChatGPT4与博主@晓码自在合作编写:

Eclipse连接MySQL出现空指针异常,通常有以下几个原因:

  1. MySQL连接URL错误
    Eclipse连接MySQL需要正确的连接URL,格式为:
    jdbc:mysql://主机地址:端口/数据库名?参数=值
    如果URL格式错误,会导致连接不上数据库。你可以检查URL是否正确,端口是否开放等。
  2. 数据库用户名或密码错误
    如果MySQL的用户名或密码输入错误,也会导致连接不上数据库并报空指针异常。
  3. 数据库驱动没有导入或版本不兼容
    Eclipse需要MySQL的JDBC驱动才能连接数据库,你需要将mysql-connector-java-5.1.49-bin.jar等驱动导入到项目中。且驱动版本需要与MySQL服务器版本兼容,否则也会连接不上。
  4. 数据库服务器关闭或网络故障
    如果MySQL服务器关闭或者网络出现故障,Eclipse也无法连接上数据库,这时你需要先排除服务器或网络方面的问题。
  5. Eclipse or MySQL配置问题

有时Eclipse或MySQL的额外配置也会影响数据库连接,你可以检查:

  • Eclipse的Platform已知问题列表,看是否有已知会影响MySQL连接的问题
  • MySQL的config文件(my.cnf)是否有额外配置会影响远程连接
  • 数据库的绑定地址/端口是否正确,防火墙是否开放等

解决方法为:

  1. 检查URL和账号密码是否正确
  2. 重新导入JDBC驱动或升级驱动版本
  3. 重启Eclipse和MySQL服务器,检查网络连接
  4. 根据Eclipse和MySQL的版本调整相关配置
  5. 升级Eclipse或MySQL到最新版本,修复已知问题

连接数据库是一个常见的工作,需要对各个环节都比较熟悉才能快速定位并解决问题。以上几点都需要一一排查,定位到具体原因后进行修复。

分享最近的demo:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BaseDao {
    private static final String url = "jdbc:mysql://localhost:3306/mynewsql";
    private static final String user = "root";
    private static final String password = "123456";

    /***
     * 连接数据库的方法
     */
    public static Connection getCon() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");// 加载数据库驱动
        System.out.println("测试加载数据库成功");
        Connection con = DriverManager.getConnection(url, user, password);
        System.out.println("测试数据库链接成功");
        return con;
    }

    /***
     * 关闭数据库的方法
     */
    public static void close(Connection con, PreparedStatement ps) {
        
        
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

先引入数据库驱动jar包


package com.jianmu.tools;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author kong
 */
public class JdbcTools {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/db_jianmu_pingxuan_log?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "root";

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn(String url, String username, String password) {
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getSql(String database) {
        return "select table_name from information_schema.tables where table_schema='" + database + "'";

    }

    public static List<String> tables(String url, String username, String password, String database) {
        return tables(getConn(url, username, password), database);
    }

    public static void close(Connection conn, Statement statement, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException ignored) {

        }

        try {
            if (statement != null) {
                statement.close();
            }
        } catch (SQLException ignored) {

        }
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException ignored) {

        }
    }

    public static List<String> tables(Connection connection, String database) {
        List<String> tables = new ArrayList<>(100);
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            conn = connection;
            if (conn != null) {
                statement = conn.createStatement();
                rs = statement.executeQuery(getSql(database));

                while (rs.next()) {
                    tables.add(rs.getString(1));
                }
                rs.close();
                statement.close();
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(conn, statement, rs);
        }
        return tables;

    }
}