我正在尝试构建一个Jframe应用,该应用从本地mysql数据库获取信息并填写GUI中的列表视图。我无法使程序连接到数据库。我在Mac上,我想知道这是否与操作系统中的权限有关,或者我只是在代码中缺少某些内容。
package dataBaseConnection;
import java.sql.*;
import javax.swing.*;
public class DBConnection
{
public static Connection dbConnection()
{
try
{
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://mysql@localhost:3306/login";
String username = "root";
String password = "TestTestTestTest";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
JOptionPane.showMessageDialog(null, "Connected to the database");
return conn;
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, "Could not connect to the database...");
return null;
}
}
}
package dataBaseConnection;
import java.awt.EventQueue;
import java.sql.*;
import javax.swing.JFrame;
public class Login {
private JFrame frame;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
Login window = new Login();
window.frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
DBConnection myConn = new DBConnection();
public Login()
{
initialize();
DBConnection.dbConnection();
}
private void initialize()
{
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
无论我尝试什么,我都找不到问题。它不会连接到我的本地mysql数据库。
[异常是:java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:是)
如果您在本地主机上运行服务器,建议您首先尝试使用mysqlworkbench连接数据库。如果您无法通过这种方法进行连接,则会遇到其他问题。
尝试检查您的MySQL凭据,检查用户名和密码
Access denied for user 'root'@'localhost' (using password: YES)
,您可以使用带有用户名和密码的终端进行检查
$ mysql -u root -p
如果忘记了密码,请查看如何重设密码
我在打印错误后才知道。这是两个问题,第一个是登录密码。搞定了。但是我遇到了TimeZone错误。
第二个错误:java.sql.SQLException:服务器时区值'MDT'无法识别或代表多个时区。如果要利用时区支持,则必须配置服务器或JDBC驱动程序(通过“ serverTimezone”配置属性)以使用更特定的时区值。
通过将timeZone与URL传递给客户端来解决此问题。
“ jdbc:mysql:// localhost:3306 / login?useUnicode = true&characterEncoding = utf8&useSSL = false&useLegacyDatetimeCode = false&serverTimezone = UTC”;
此问题已解决。