2015-12-11 4 views
1

Я искал интернет, пытаясь найти решения по использованию java и JDBC для подключения к MySQL. К сожалению, я нашел несколько ответов, и никто из них не решил мою проблему.Подключение к MySQL с использованием JDBC

Я загрузил JDBC из MySQL и распаковал файл, чтобы найти .jar. Я поместил .jar в папку C:/Program Files (X86)/Java/JDK .../JRE/lib/ext. Я установил свой путь к классам экологических переменные (может быть CLASSPATH, ClassPath ??) к следующему:

%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext 

Я использую скрипт я написал на основе всех различных решений, которые я видел, чтобы получить это:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 


public class MySql { 

    public static void main(String[] args) 
    { 
     Connection con = getConnection(); 
     if (con != null) { 
      System.out.println("Connection Made"); 
     } 
     else { 
      System.out.println("Connection not made"); 
     } 
    } 

    private static Connection getConnection() { 


     Connection con = null; 
     try { 
      Class.forName("com.mysql.jdbc"); 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java"); 
      System.out.println("Connection Made"); 

      conn.close(); 

     } 
     catch (SQLException e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(0); 
     } 
     catch (ClassNotFoundException e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(0); 
     } 
     return con; 
    } 


} 

Скомпилируется с javac MySql.java. Затем, когда он запускается (java MySql), я получаю com.mysql.jdbc. Я прочитал, что мне не нужно регистрировать драйвер, но когда я удаляю Class.forName, все, что я получаю, это ошибка «не удается найти драйвер JDBC».

Я не могу сузить свою проблему до: 1). Путь классов не настроен правильно. 2). Неподходящий код подключения Java. 3). Не удалось найти сервер MySQL.

Любая помощь будет оценена по достоинству.

Edit -

Я поместил .jar файл на рабочий стол для целей тестирования. Изменен переменный путь к классам системы:

%CLASSPATH%;.;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar 

Затем, когда я добавить след за заявление ошибки я получаю:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at java.net.URLClassLoader.findClass<Unkown Source> 
    at java.lang.ClassLoader.loadclass (Unknown source) 
    at sun.misc.Launcher$AppClassLoader.loadclass(Unkown Source) 
    etc. 
    etc. 

редактировать 2 - я провел два дня с помощью Connect Java to a MySQL database в качестве ресурса, и ни один из инструкций Я последовал, решил мою проблему.

+0

Можете ли вы сделать e.printStackTrace() в случае исключения и вставить полное исключение в свой вопрос? Само сообщение не слишком помогает. – Jan

+0

Вы включили банку JDBC в свой путь сборки? –

+1

Пришло время уйти от привычки бросать вещи в «.../jre/lib/ext», поскольку очевидно, что опция [будет удалена в Java 9] (https://blogs.oracle.com/java-platform -группа/запись/planning_safe_removal_of_under). –

ответ

3

Вместо

System.out.println(e.getMessage()); 

ли это

e.printStackTrace(); 

Вы увидите, что исключение составляет:

java.lang.ClassNotFoundException: com.mysql.jdbc 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at MySql.getConnection(MySql.java:24) 
    at MySql.main(MySql.java:10) 

Снимите Class.forName. Вы можете получить отказ в доступе или какую-либо другую ошибку, но она решит ClassNotFoundException. Вот окончательный отредактированный вариант, который должен работать:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class MySql { 

    public static void main(String[] args) 
    { 
     Connection con = getConnection(); 
     if (con != null) { 
      System.out.println("Connection Made"); 
     } 
     else { 
      System.out.println("Connection not made"); 
     } 
    } 

    private static Connection getConnection() { 
     Connection con = null; 
     try { 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java"); 
      System.out.println("Connection Made"); 
      conn.close(); 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
     return con; 
    } 
} 
+0

Class.forName() необходим для того, чтобы класс драйвера загружался загрузчиком классов. Я бы не убрал его. –

+0

@AndreasVogl - * "Class.forName() необходимо ..." * - Не с JDBC 4 (около Java 6). –

+0

Я получаю ошибку java.sql.SQLException: Не найдено подходящего драйвера для jdbc: mysql: // localhost: 3306/sakila –

0

Я думаю, вы должны добавить путь, включая имя файла банки водителя в вашем пути к классам. Как так:

%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext\mysql-connector-java-xxx.jar 
1

Если вам нужно Class.forName() вы должны использовать правильный класс:

 Class.forName("com.mysql.jdbc.Driver"); 

Но с JDBC 4, который стал больше не нужен.

Создайте полные трассировки стека исключений и используйте результат для поиска здесь - наиболее распространенные ошибки были решены здесь раньше.

NoSuitableDriverFound очень сильный указание вашего mysql-connector.jar (не .zip ....) отсутствует в вашем пути к классу при запуске вашего кода.

Вы можете попробовать так:

Run java -cp .;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar MySql

0

Если Java является версия 6 или выше вам не нужно Class.formName(...) код. И для обеспечения того, чтобы все работало, компилировало и выполняло ваш код в следующем порядке. Для компиляции:

java -cp PATH_TO_DRIVER; YOUR_CLASS.java 

Для выполнения:

java -cp PATH_TO_DRIVER; YOUR_CLASS 

Изменить YOUR_CLASS на имя вашего класса и PATH_TO_DRIVER на пути, где скачать драйвер MySQL.

Надеюсь, это поможет!

+0

Вам не нужно указывать драйвер в этом месте, он может быть где угодно в вашей системе, поскольку вы указываете местоположение при компиляции или запуске своего кода (или обоих). Способ, которым я предлагал, можно избежать изменения переменной среды classpath. – avaz

+0

Вы просто попробуете предложение, чтобы узнать, работает ли это как способ сузить место, где может быть ваша проблема. Возможно, ваша конфигурация пути в классе неправильная или, может быть, ваш код или, возможно, банка, которую вы положили в это место, не является реальным драйвером mysql. Способ, предложенный, менее подвержен ошибкам, потому что вы уменьшаете зависимость от внешней конфигурации системы. – avaz

+0

Я получаю java.sql.SQLException: Не найдено подходящего драйвера для jdbc: mysql: // localhost: 3306/sakila –

0

Попробуйте этот код!

public static void main(String[] argv) { 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Where is your MySQL JDBC Driver?"); 
     e.printStackTrace(); 
     return; 
    } 

    System.out.println("MySQL JDBC Driver Registered!"); 
    Connection connection = null; 

    try { 
     connection = DriverManager 
     .getConnection("jdbc:mysql://localhost:3306/yourSCHEMAname,"login", "password"); 

    } catch (SQLException e) { 
     System.out.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
     return; 
    } 

    if (connection != null) { 
     System.out.println("You made it, take control your database now!"); 
    } else { 
     System.out.println("Failed to make connection!"); 
    } 
    } 
} 
Смежные вопросы