2013-02-22 5 views
0

Я работаю над новым модулем для проекта, который должен подключаться к базе данных SQL с помощью драйвера JDBC. Мне необходимо реализовать интерфейс подключения с методом getConnection(), который имеет тип возврата org.forgerock.opendj.ldap.Connection. Однако драйвер JDBC возвращает соединение типа com.mysql.jdbc.JDBC4Connection. Кастинг дает мне следующую ошибку:Кастинг JDBC Connection

Exception in thread "main" java.lang.ClassCastException: 
    com.mysql.jdbc.JDBC4Connection cannot be cast to org.forgerock.opendj.ldap.Connection 
    at org.forgerock.opendj.virtual.JDBCConnectionFactory.getConnection(JDBCConnectionFactory.java:105) 

Что бы быть лучшим способом, чтобы получить соединение типа org.forgerock.opendj.ldap.Connection вместо com.mysql.jdbc.JDBC4Connection?

JDBCConnectionFactory класс:

public class JDBCConnectionFactory implements ConnectionFactory{ 
    private final String driverName = "com.mysql.jdbc.Driver"; 
    private Connection con = null; 
    private String ConnectionUrl = ""; 
    private final String Host; 
    private final int Port; 
    private final String DbName; 
    private final String UserName; 
    private final String UserPass; 

public JDBCConnectionFactory(final String host, final int port, final String dbName, final String userName, final String userPass) { 
     this.Host = host; 
     this.Port = port; 
     this.DbName = dbName; 
     this.UserName = userName; 
     this.UserPass = userPass; 
     this.ConnectionUrl="jdbc:mysql://" 
       .concat(this.Host+":") 
       .concat(this.Port+"/") 
       .concat(this.DbName); 

     try { 
       Class.forName(driverName); 
      } catch (ClassNotFoundException e) { 
       System.out.println(e.toString()); 
      } 
    } 

Метод GetConnection:

@Override 
    public org.forgerock.opendj.ldap.Connection getConnection()throws ErrorResultException { 
     try { 

      con = DriverManager 
          .getConnection(this.ConnectionUrl,this.UserName,this.UserPass); 

      org.forgerock.opendj.ldap.Connection newcon = (org.forgerock.opendj.ldap.Connection) con; 
      System.out.println("Connection created."); 
      return newcon; 
      } catch (SQLException e) { 
      System.out.println(e.toString()); 
      return null; 
      } 


    } 
+4

Вы создаете соединение MySQL JDBC с помощью драйвера MySQL. Почему вы думаете, что у вас будет что-то другое? –

+0

@BrianAgnew Я не ожидаю ничего другого, кроме com.mysql.jdbc.JDBC4Connection от драйвера, я просто ищу лучший способ конвертировать его в тип org.forgerock.opendj.ldap.Connection. – Glenn

+1

Так что отливка не является * конвертированием *. И я все еще подозреваю, что вы подключаетесь к базе данных MySQL и пытаетесь интерпретировать ее как сервер LDAP. –

ответ

3

Короткий ответ вы не можете .Heres почему

org.forgerock.opendj.ldap.Connectionне распространяетсяjava.sql.Connection

Это должно дать вам больше информации, как то, что разрешено в Java

+0

Я предполагаю, что вы имеете в виду «' com.mysql.jdbc.JDBC4Connection' не расширяет 'org.forgerock.opendj.ldap.Connection'. Ваше утверждение, как написано сейчас, совершенно неверно. –

+0

Разве он не расширяет ConnectionImpl, а * тот * реализует соединение? –

+0

@Brian: Поскольку org.forgerock.opendj.ldap.Connection - это интерфейс, он должен расширять java.sql.Соединение для каста для работы – Sudhakar

1

Вы не можете использовать JDBC API для создания соединения LDAP. Вы должны использовать предоставленный API org.forgerock.opendj.ldap для его создания.

Вы уверены, что вам нужно подключиться к базе данных SQL, а не к базе данных LDAP?

Проверьте это руководство для подключения к серверу LDAP и получить вид связи вам необходимо:

Getting OpenDJ LDAP SDK