@Neonoviiwolf
Flutter developer

Как правильно записать URL mysql в java?

Доброго!
Первые опыты с работой БД, смотрю уроки от девколибри, там создают мавен проект и его конектят к БД. У меня мелкий проект на javaFX, но там классы разницы по классам для работы с БД нет, но нет и мавена соответсвенно. + Там использовали загрузку с помощью pom.
Так вот я скачал mysql, поставил всё и вся, добавил в библиотеку, но вот ни как не могу приконнектиться, уверен, что просто пишу не правильный url, так как не понимаю, как правильно написать.
private static String URL = "jbdc:mysql://localhost:3306/mydbtest";
    private static String name = "root";
    private static String pass = "root";

    public static void main(String[] args) {

        Connection connection;
        try {
            Driver driver = new FabricMySQLDriver();
            DriverManager.registerDriver(driver);
            connection = DriverManager.getConnection(URL, name,pass);

        } catch (SQLException e) {
            e.printStackTrace();
        }

        launch(args);
    }


971f808211d34675a0da33ea6c9d4a7f.pngb1e0f6edd6744698a43198939d628936.png
java.sql.SQLException: No suitable driver found for jbdc:mysql://localhost:3306/mydbtest
	at java.sql.DriverManager.getConnection(DriverManager.java:689)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at sample.Main.main(Main.java:66)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
  • Вопрос задан
  • 4878 просмотров
Решения вопроса 2
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Эм, не jbdc://, а jdbc://
Ответ написан
EugeneP2
@EugeneP2
Java Dev
Вообще, объект драйвера вручную никто сам не создаёт.

1. Нужный драйвер должен быть указан в classpath.

2. Перед получением коннекта к БД, вам нужно выполнить Class.forName(имя класса драйвера) - загрузчик классов загружает указанный класс, что приводит к инициализации статических полей и выполнение статических блоков этого класса. Причем тут статический блок? - в статическом блоке класса драйвера реализована регистрация в DriverManager-е.

Вот пример:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {   
static {  // статический блок
        try {   
                   java.sql.DriverManager.registerDriver(new Driver());   
             } catch (SQLException E) {   
                         throw new RuntimeException("Can't register driver!");  
             }  
       }
         // остальной код опущен
}


после чего вот это DriverManager.getConnection(URL, name,pass) без проблем находит драйвер.

Class.forName("com.mysql.jdbc.Driver");    
Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/sonoo","root","root");


Хотя вы сами вручную и регистрируете драйвер, но DriverManager ваш драйвер не увидит. Возможно это как то связано с тем, что DriverManager и класс драйвера загружены разными загрузчиками...

Но так тоже можно получить коннект, вместо
connection = DriverManager.getConnection(URL, name,pass);

использовать
connection = driver.connect(....);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
URL совершенно верно указан, если порт 3306, есть база данных mydbtest, и верные пользователь и пароль, непонятно почему вы гадаете на кофейной гуще, если есть Exception.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы