Java JDBC连接返回true,不带参数

Java JDBC连接返回true,不带参数,java,jdbc,Java,Jdbc,我正在构建gui,其中有一个按钮,用于测试数据库是否有连接。用户必须给出数据库参数,然后必须单击“测试连接”按钮查看数据库是否连接。但我的问题是,即使我不提供任何参数,对于连接,它仍然返回true 这是我的密码: 输入作为数据库参数发送的GUI部件: testConnection.addActionListener((ActionEvent e) -> { DatabaseController dbController = new DatabaseController(da

我正在构建gui,其中有一个按钮,用于测试数据库是否有连接。用户必须给出数据库参数,然后必须单击“测试连接”按钮查看数据库是否连接。但我的问题是,即使我不提供任何参数,对于连接,它仍然返回true

这是我的密码:

输入作为数据库参数发送的GUI部件:

testConnection.addActionListener((ActionEvent e) -> {
        DatabaseController dbController = new DatabaseController(databaseUrl.getText(), databaseName.getText(),
                databaseUser.getText(), databasePassword.getText());
        if(dbController.isDataBaseConnected()) setDatabaseConnectionStatus(connectionSuccessLabel, Color.green);
        else setDatabaseConnectionStatus(connectionFailLabel, Color.red);
    });
数据库控制器类

package dbConnection;

import java.sql.Connection;
import java.sql.SQLException;

public class DatabaseController{

private Connection connection;

public DatabaseController(String url, String dbName, String user, String password){
    defineDatabaseParameters(url, dbName, user, password);
    this.connection = new DbConnection()
            .connectToDatabase();
}

public boolean isDataBaseConnected(){
    System.out.println(connection);
    if(connection == null){
        return false;
    } else {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

private void defineDatabaseParameters(String url, String dbName, String user, String password){
    DbConnection.DB_URL = "jdbc:mysql://" + url + "/" + dbName.trim();
    DbConnection.USER = user.trim();
    DbConnection.PASS = password.trim();
}

}
package dbConnection;

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

public class DbConnection {

//   static String      JDBC_DRIVER = "com.mysql.jdbc.Driver";  
//   static String      DB_URL = "jdbc:mysql://localhost/*********";
//  
//   static String      USER = "root";
//   static String      PASS = "";

 static String      JDBC_DRIVER = "com.mysql.jdbc.Driver";  
 static String      DB_URL;

 static String      USER ;
 static String      PASS ;

 public Connection connectToDatabase(){
     Connection conn = null;
     try {
         System.out.println("Outpost 1: " + DB_URL);
         System.out.println("Outpost 2: " + USER);
         System.out.println("Outpost 3: " + PASS);
         Class.forName(JDBC_DRIVER);
         conn = DriverManager.getConnection(DB_URL,USER,PASS);
     } catch (SQLException | ClassNotFoundException e) {
         e.printStackTrace();
     }
     return conn;
 }
 }
这是我的数据库参数类

package dbConnection;

import java.sql.Connection;
import java.sql.SQLException;

public class DatabaseController{

private Connection connection;

public DatabaseController(String url, String dbName, String user, String password){
    defineDatabaseParameters(url, dbName, user, password);
    this.connection = new DbConnection()
            .connectToDatabase();
}

public boolean isDataBaseConnected(){
    System.out.println(connection);
    if(connection == null){
        return false;
    } else {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

private void defineDatabaseParameters(String url, String dbName, String user, String password){
    DbConnection.DB_URL = "jdbc:mysql://" + url + "/" + dbName.trim();
    DbConnection.USER = user.trim();
    DbConnection.PASS = password.trim();
}

}
package dbConnection;

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

public class DbConnection {

//   static String      JDBC_DRIVER = "com.mysql.jdbc.Driver";  
//   static String      DB_URL = "jdbc:mysql://localhost/*********";
//  
//   static String      USER = "root";
//   static String      PASS = "";

 static String      JDBC_DRIVER = "com.mysql.jdbc.Driver";  
 static String      DB_URL;

 static String      USER ;
 static String      PASS ;

 public Connection connectToDatabase(){
     Connection conn = null;
     try {
         System.out.println("Outpost 1: " + DB_URL);
         System.out.println("Outpost 2: " + USER);
         System.out.println("Outpost 3: " + PASS);
         Class.forName(JDBC_DRIVER);
         conn = DriverManager.getConnection(DB_URL,USER,PASS);
     } catch (SQLException | ClassNotFoundException e) {
         e.printStackTrace();
     }
     return conn;
 }
 }
现在,当我按下“测试连接”按钮并没有给出任何参数(空字符串)时,它仍然显示连接成功。我做错了什么,它仍然返回真的?以下是日志输出: 控制台输出

前哨站1:jdbc:mysql:/// 前哨站2: 前哨站3: com.mysql.jdbc。JDBC4Connection@e29ae34

好的,伙计们。我这样解决了我的问题。我将所有输入字段都设置为必填字段,这意味着用户必须添加一些URL(出于某种原因,mySQL也喜欢空URL并提供连接),并将return false添加到DatabaseController类中的isDataBaseConnected()方法中。请参见上面的编辑

我尝试了您的代码并获得了“不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果未设置explicit选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任库。java.sql.SQLException:user'@'localhost'(使用密码:否)的访问被拒绝我认为您的代码可能与您发布的代码不同。我尝试了以下代码:String-databaseUrl=“”;String-databaseName=“”;String-databaseUser=“”;String-databasePassword=“”;DatabaseController-dbController=new-DatabaseController(databaseUrl、databaseName、databaseUser、databasePassword);if(dbController.isDataBaseConnected())System.out.println(“确定”);else System.out.println(“错误”);@reos您现在的结论是访问被拒绝,但确实存在连接?也许我们正在处理一个数据库,它接受空白用户/密码和一个指向本地主机的空白url?我认为如果存在连接(不是空的)然后可以在之前创建它。并且您正在从与您发布的不同的其他类访问方法connectToDatabase。或者从不同的操作侦听器访问方法connectToDatabase。可能操作侦听器不创建DatabaseController,而是使用以前创建的方法。我建议您首先尝试使用一个main方法,并在其中放入我上一个命令的代码新界。