2013-02-22 2 views
1

Я начинаю java и пытаюсь вставить строку в db. Это первый раз в java, я выполняю операцию вставки. Примерно в 2 часа я был googling и сгорблен и не могу решить мою ошибку. Я позвонил своему другу, и он дал мне живую поддержку в командном средстве и добавил только одну строку кода в мою программу.Не найдено подходящих драйверов для jdbc: mysql: // localhost/db

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

Может кто-нибудь объяснить, почему мы должны включить это в свой код до строки подключения. Нужно ли размещать мой код там каждый раз. Пожалуйста, объясните мне подробно.

+0

Возможно, http://stackoverflow.com/questions/3816015/sqlexception-no-suitable-driver-found-for-jdbcderby-localhost1527 может помочь. – Markus

+2

См http://stackoverflow.com/questions/12933113/better-understaning-class-fornamecom-mysql-jdbc-driver-newinstance Он отвечает на ваш вопрос – mortsahl

+0

Какие JRE версии вы используете? –

ответ

0

Да, это необходимо включить каждый раз. , но вы можете использовать метод, не повторяющий коды.

, например

public void connectToMYSQL(){ 
try{ 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdatabase","username",""password); 
}catch(Exception ex) 
{ 
System.out.println(ex.getMessage()); 
} 

}

и до написания SQL заявление, просто вызовите метод, например

public void insert(String sql) 
{ 
connectToMYSQL(); 
//.. then do your stuffs 

} 
+2

Нет, нет необходимости включать его каждый раз. Когда класс загружен, он загружается. Перезагрузка не служит никакой цели. И ваш пример кода ужасен. Он плохо обрабатывает исключения и не позволяет получить соединение. –

+0

Я использую его со всеми приложениями базы данных базы данных и не даю мне никакого исключения, я ошибаюсь, если это, пожалуйста, скажите мне и покажите мне правильный путь. Спасибо – Azad

+0

Код является законным, но ненужным. Вы должны инициализировать его один раз, например, в вашем методе main(). – skuntsel

0

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

Необходимо загрузить драйвер базы данных, который вы используете. Метод forNmae() в этой строке загружает драйвер базы данных mysql.

0

Основная идея заключается в том, что это действие заставляет класс драйвера регистрироваться в диспетчере драйверов JDBC.

Метод Class.forName («полное имя класса») используется для инициализации статических полей класса и загрузки вашего класса драйвера JDBC, драйвера MySQL в вашем случае, в ваше приложение. Когда он создается, он получает зарегистрированный в DriverManager. Посредством последнего вы создаете соединения, используя Connection connection = DriverManager.getConnection («jdbc: mysql: // localhost: 3306/databasename», «login», «password») ;, которые вы позже используете для запроса база данных.

1

Вот некоторый очень упрощенный код, который показывает, как инициализация драйвера работает. есть 3 класса, пожалуйста, поместите каждый в соответствующем названии файл.

import java.util.HashMap; 
import java.util.Map; 

public class DriverMgr { 
    private static final Map<String, Class<?>> DRIVER_MAP = new HashMap<String, Class<?>>(); 

    public static void registerDriver(final String name, final Class<?> cls) { 
     DRIVER_MAP.put(name, cls); 
    } 

    public static Object getDriver(final String name) { 
     final Class<?> cls = DRIVER_MAP.get(name); 
     if (cls == null) { 
      throw new RuntimeException("Driver for " + name + " not found"); 
     } 
     try { 
      return cls.newInstance(); 
     } catch (Exception e) { 
      throw new RuntimeException("Driver instantiation failed", e); 
     } 
    } 
} 

public class MysqlDriver { 
    static { 
     // hello, I am a static initializer 
     DriverMgr.registerDriver("mysql", MysqlDriver.class); 
    } 

    @Override 
    public String toString() { 
     return "I am the mysql driver"; 
    } 
} 

public class TestProg { 
    public static void main(final String... args) { 
     try { 
      Class.forName("MysqlDriver"); // try with or without this 
     } catch (Exception e) { 
      throw new RuntimeException("Oops, failed to initialize the driver"); 
     } 
     System.out.println(DriverMgr.getDriver("mysql")); 
    } 
} 

Когда вы вызываете Class.forName, класс драйвера загружается и запускается статический инициализатор. Это, в свою очередь, регистрирует класс драйвера с менеджером драйверов, так что менеджер теперь знает об этом. Очевидно, это нужно сделать только один раз.

Смежные вопросы