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