Я сделал одно java-приложение и хочу попытаться подключиться к базе данных sql при открытии окна. Я добавил соединитель my-sql-java-8.0.14.jar, но когда я запускаю приложение, я получаю сообщение об ошибке. Я несколько раз пытался повторно подключиться, перестроить базу данных и подключиться к новой, но все еще получаю сообщение об ошибке ниже.
Заранее спасибо за помощь
"Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Cannot connect to the dbat testDBPack.MainWindow$1.windowOpened(MainWindow.java:47)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JFrame.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.sql.SQLException: The server time zone value '????????? ??? GTB' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at testDBPack.MainWindow$1.windowOpened(MainWindow.java:45)
... 25 more
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '????????? ??? GTB' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2241)
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2265)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
... 31 more
"
Я проверил свои учетные данные, у меня работает sql, но я не могу решить проблему.
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JSeparator;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@SuppressWarnings("serial")
public class MainWindow extends JFrame {
JPanel contentPane;
static Connection conn;
public MainWindow() {
setResizable(false);
setTitle("Coding Factory");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 433, 293);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
String url = "jdbc:mysql://localhost:3306/teachers";
String username = "panos123";
String password = "panagiotis";
try {
conn = DriverManager.getConnection(url,username,password);
}catch (SQLException ex) {
throw new IllegalStateException("Cannot connect to the db",ex);
}
}
});
JLabel lblNewLabel_1 = new JLabel("Quality Assistance");
lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 30));
lblNewLabel_1.setBounds(71, 32, 295, 37);
contentPane.add(lblNewLabel_1);
JButton TeachersButton = new JButton(" ");
TeachersButton.setBounds(10, 144, 46, 34);
contentPane.add(TeachersButton);
Также у меня есть еще один класс для основного:
package testDBPack;
import java.awt.EventQueue;
public class TeachersApp {
static MainWindow mainFrame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
mainFrame = new MainWindow();
mainFrame.setVisible(true);
mainFrame.setLocationRelativeTo(null);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}




Часовой пояс не настроен. Попробуйте использовать следующий URL:
jdbc:mysql://localhost/teachers?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
привет, сообщение об ошибке для часового пояса исчезает, но теперь я все еще получаю, что я не могу подключиться к базе данных, а доступ запрещен для пользователя: исключение в потоке «AWT-EventQueue-0» java.lang.IllegalStateException: не удается подключиться к БД в testDBPack. MainWindow$1.windowOpened(MainWindow.java:47), а затем: Вызвано: java.sql.SQLSyntaxErrorException: пользователю 'panos123'@'%' отказано в доступе к базе данных 'db' в com.mysql.cj.jdbc.exceptions. SQLError.createSQLException(SQLError.java:120)
Эх, да, "db" нужно заменить на имя db, попробуйте сейчас
Если этот ответ помог вам, рассмотрите возможность пометить его как «правильный», чтобы все, у кого возникла такая же проблема, знали.
эй, это помогло, но не решило проблему, решение состояло в том, чтобы загрузить mysql-connector-java-5.1.47, чтобы работать на моем ПК,
Но устранена ли ошибка в вашем вопросе ^^ Если были другие, не связанные с этим проблемы - не беда.
Это кажется ключевым: Вызвано: com.mysql.cj.exceptions.InvalidConnectionAttributeException: значение часового пояса сервера '????????? ??? GTB не распознан или представляет более одного часового пояса. Вы должны настроить либо сервер, либо драйвер JDBC (через свойство конфигурации serverTimezone), чтобы использовать более конкретное значение часового пояса, если вы хотите использовать поддержку часового пояса.