JDBC: Урок 4. Connection - Получаем соединение к БД

Все уроки тут: https://www.youtube.com/playlist?list=PLIU76b8Cjem5qdMQLXiIwGLTLyUHkTqi2 Офф. сайт: http://devcolibri.com Мы в VK: http://vk.com/devcolibri

Comments

Илья Голуб: Самый актуальный сейчас способо ибо сам столкнулся с этой проблемой
pom:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
</dependencies>
main:
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb"+
"?verifyServerCertificate=false"+
"&useSSL=false"+
"&requireSSL=false"+
"&useLegacyDatetimeCode=false"+
"&amp"+
"&serverTimezone=UTC";
try {
Connection connection=DriverManager.getConnection(url,"root","root");
System.out.println("work");
} catch (SQLException e) {
System.out.println(e);
}

Серж Тэвэ: ПОМОГИТЕ РАЗОБРАТЬСЯ !!!
У меня драйвер регистрирует а подключатся не хочет выдаёт:
Зарегистрирован драйвер MySQL JDBC!
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Ошибка соединения! Проверить выходную консоль
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at Connection.JDBCExample.main(JDBCExample.java:26)

ПОМОГИТЕ РАЗОБРАТЬСЯ !!!

Aleksandrs Kozaletovs: Dobrij, ja vse napisal pravilno no mne vidajet oshibku "Neudalosj soedinitjsja s klasom drivera " podskazite shto delatj

HeavyMetal TarasTom: Вот это работает:
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/mydbtest?"
+ "useUnicode=true&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false"
+"&serverTimezone=UTC", USER, PASS);
if(!connection.isClosed())
System.out.println("Connection is ready....");
connection.close();
if(connection.isClosed())
System.out.println("Connection is close....");
} catch (ClassNotFoundException e) {
System.out.println("Connection is ClassNotFoundExceptionError....");
}catch (SQLException e) {
System.out.println("Connection is SQLExceptionError....");
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
} catch (IllegalAccessException e) {
System.out.println("Connection is IllegalAccessExceptionError....");
} catch (InstantiationException e) {
System.out.println("Connection is InstantiationExceptionError....");
}

Ant: Многие проблемы решает поднастроенный url: private final static String URL ="jdbc:mysql://localhost:3306/devcoltest?autoReconnect=true&useSSL=FALSE&useLegacyDatetimeCode=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";

Макс Куркудюк: private static final String URL = "jdbc:mysql://localhost:3306/mydbtest?useSSL=false&serverTimezone=UTC";
і можна користуватись MySQL Connector/J » 8.0.11

Gleb Remniov: Лайк за Замая

Максим Бродский: Решение:
String url = "jdbc:mysql://127.0.0.1:3306/mydbtest?autoReconnect=true&useSSL=false&serverTimezone=UTC";

String username = "root";
String password = "root";
System.out.println("Connecting database...");

try {
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("Database connected!");
} catch (SQLException e) {
throw new IllegalStateException("Cannot connect the database!", e);
}

kruvv: Привет всем. У кого не создается new FabricMySLDriver(); вот решение
https://ru.stackoverflow.com/questions/551454/jdbc-%D0%9D%D0%B5-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D1%82%D1%81%D1%8F-driver-new-fabricmysqldriver-java-se

Артём Смирнов: Вопрос: а если БД не локальная? У меня есть имя сервера и имя самой БД, и она находится вообще в другом месте. Что я должен прописывать, чтобы соединение прошло через Интернет?

Алексей Федотов: "Примерно вот так" - это не пояснение. Было бы не плохо рассказать что такое groupid и artifactid

VR: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html

Тарлан Хакимзаде: Вместо FabricMySQLDriver используйте new com.mysql.jdbc.Driver();

Stanislav Konovalov: Всё, спасибо, исправил.

Stanislav Konovalov: Здравствуйте, вот такое предупреждение:
Thu Sep 28 20:29:17 ALMT 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Когда запускаю, все сообщения выдаёт успешно, но вот это непонятно, ошибку прочитал, перевёл, но как это сделать - не понял. Подскажите, пожалуйста!

DSI: У кого ошибка FabricMySQLDrive() вместо этого пишем com.mysql.cj.jdbc.Driver. Должно получиться вот так

Driver driver = new com.mysql.cj.jdbc.Driver();

У кого такая вот ошибка WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established... Идея ругается на отсутствие SSL соединения. Просто в объявлении переменной URL пишем в присваиваемом значении вот это
?autoReconnect=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
У вас должна получиться вот такая переменная

private static final String url = "jdbc:mysql://localhost:3306/mydbtest?autoReconnect=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC";

302: Уроки у Вас хорошие, объясняете доступно и грамотно одновременно и все в Ваших видео было бы просто 10/10, если бы не это злоебучее музыкальное интро в начале каждого видео.

A X: Ребят подскажите, что нужно сделать что бы не вылазила вот эта запись .
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

John Smith: Дополню для Java1.8:
Больше нет нужды вручную закрывать соединение - используйте try-с-ресурсами

Pavel Ivanov: Ребят, урок на текущее время, все нюансы:
1. <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
2. private static final String URL = "jdbc:mysql://localhost:3306/mydbtest?useUnicode=true&useSSL=true&useJDBCCompliantTimezoneShift=true" +
"&useLegacyDatetimeCode=false&serverTimezone=UTC";
3. Никакого драйвера с фабрикой не нужно.
Connection connection;
try {
connection = DriverManager.getConnection(URL, USER, PASS);
if(!connection.isClosed()){
System.out.println("Соединение с БД установлено");
}