Ява не дает Ошибка! - PullRequest
       35

Ява не дает Ошибка!

2 голосов
/ 21 августа 2009

Вот мой код - я просто проверяю соединение с базой данных MySQL.
Но сначала я успешно скомпилировал и запустил программу. но потом я прокомментировал строку Class.forName.
Тем не менее, когда я компилирую, он работает успешно, без каких-либо ошибок. Почему?

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


public class FirstJbdc {
    public static void main(String[] args) {
        Connection cn=null;
        try {
            //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("Driver loaded successfully");
            cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java");
            System.out.println("Database connected successfully....");
            System.out.println(cn);
        } catch (Exception e) {
            // TODO: handle exception
                        e.printStackTrace();
        }
    }
}

Ответы [ 5 ]

8 голосов
/ 21 августа 2009

Я выкидываю ошибку, хорошо. Просто

catch (Exception e){
     // here the exception is instantiated, but nothing is done about it
}

предложение молча проглатывает ваше исключение.

Попробуйте

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

в предложении поймать

7 голосов
/ 21 августа 2009

Java 1.6 может найти драйвер JDBC даже без использования Class.forName.

Вот соответствующая часть документации :

Методы DriverManager getConnection и getDrivers были расширены для поддержки механизма поставщика услуг Java Standard Edition. Драйверы JDBC 4.0 должны включать файл META-INF/services/java.sql.Driver. Этот файл содержит имя реализации драйверов JDBC java.sql.Driver. Например, чтобы загрузить класс my.sql.Driver, файл META-INF/services/java.sql.Driver будет содержать запись:

my.sql.Driver

Приложениям больше не нужно явно загружать драйверы JDBC с помощью Class.forName (). Существующие программы, которые в настоящее время загружают драйверы JDBC с использованием Class.forName (), будут продолжать работать без изменений.

1 голос
/ 21 августа 2009

ПРИМЕЧАНИЕ: это относится только к драйверам, предшествующим JDBC 4.0.

Драйверы JDBC должны иметь раздел static, который регистрирует их с java.sql.DriverManager при загрузке класса, поэтому требуется Class.forName(String).

Подробно здесь: http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/drivermanager.html

0 голосов
/ 21 августа 2009

Без Class.forName() драйвер моста JDBC-ODBC не загружен. Согласно спецификации JDBC, getConnection() возвращает ноль, если для URL не найден драйвер, исключение не выдается. Так что это ожидаемое поведение.

0 голосов
/ 21 августа 2009

try {

     //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      System.out.println("Driver loaded successfully");
      cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java");
      System.out.println("Database connected successfully....");
      System.out.println(cn);
} catch (Exception e) {
    // add the following statement
    System.out.println(e.getMessage());
}

Если вы добавите инструкцию в блок catch, затем скомпилируете и запустите, вы должны увидеть сообщение об ошибке вроде -

[ Некоторые Com ] [ Некоторые Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...