2014-04-25 4 views
5

Это выход из программы приведены ниже:JDBC: Соединение возвращает NULL, что делать?

Connection made! 
Schema Name:null 

Successfully connected to null 
Releasing all open resources ... 

Внутри establishConnection(), сопп инициализируется как нуль. Тогда первый оператор внутри блока try должен установить соединение с базой данных, а третий оператор затем распечатает имя текущей схемы соединения.

В соответствии с API, getSchema() возвращает имя текущей схемы или null, если их нет.

Это означает, что нет схемы (я думаю, что имя схемы совпадает с именем базы данных), связанное с conn? Может ли кто-нибудь предложить, если я прав в своем ожидании, а также подскажут, почему нет схемы или null, связанных с conn?

public class ConnectDB { 

    private Connection establishConnection() throws SQLException { 
     Connection conn = null; 
     try { 
      conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/test_final1", "root", "password"); 
      System.out.println("Connection made!"); 
      System.out.println("Schema Name:"+conn.getSchema()+"\n"); 
     } catch (SQLException sqle) { 
      System.err.println("SQL Exception thrown while making connection"); 
      printSQLException(sqle); 
     } 
     return conn; 
    } 

    public static void main(String[] args) { 
     ConnectDB cdb= new ConnectDB(); 
     Connection myconn=null; 
     try{ 
      myconn=cdb.establishConnection(); 
      if(myconn!=null) System.out.println("Successfully connected to " + myconn.getSchema()); 
     }catch (SQLException e) { 
       ConnectDB.printSQLException(e); 
     } catch (Exception e) { 
      e.printStackTrace(System.err); 
     } finally { 
      ConnectDB.closeConnection(myconn); 
     } 

    } 
+2

Этот вопрос не является дубликатом. Другой вопрос о Android, очень о драйвере JTD (я не использовал это). Я отправляю этот комментарий для разъяснения, так как у меня есть комментарий, говорящий, что это дубликат, который был удален после моего объяснения. – Solace

+0

Где код, в который вы загрузили «MYSQL Driver» –

+1

Люди! Проблема заключается не в получении соединения «null», а в отношении возвращаемого значения «null» от выполнения метода «Connection # getSchema». –

ответ

6

MySQL не поддерживает концепцию схемы. Для MySQL схема фактически является базой данных. От MySQL Glossary:

схемы

Концептуально схема представляет собой совокупность взаимосвязанных объектов баз данных, таких как таблицы, столбцы таблицы, типы данных столбцов, индексы, внешние ключи, и так далее. (...)

на основе this answer from MySQL forums, вы не можете получить текущую базу данных (или баз данных) через Connection#getSchema метод (который был добавлен начиная с Java 7 с JDBC 4), но с использованием Connection#getCatalog, если не использовать последний JDBC драйвер баночка:

драйвер JDBC (из-за наследство, MySQL не вызывал их «схемы» до 5,0, и JDBC не есть способ, чтобы выбрать схемы до JDBC4), вызовы базы данных «каталоги ", поэтому вы должны вызвать getCatalogs(), чтобы получить список баз данных

Я сделал грязный быстрый, чтобы доказать курсивное предложение выше (, если вы не используете самую последнюю версию JDBC-драйвера). Использование getCatalog() работал с использованием Java 6:

public class DirtyQuickTest { 
    private static final String url = "jdbc:mysql://localhost:7841/test"; 
    private static final String user = "lmendozaj"; 
    private static final String password = "s3cr3t"; //I won't show you my password 
    public static void main(String[] args) throws Exception { 
     Connection con = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection(url, user, password); 
      //commented since doesn't exists in Java 6 
      //System.out.println(con.getSchema()); 
      System.out.println(con.getCatalog()); 
     } finally { 
      con.close(); 
     } 
    } 
} 

Выход:

test 

Тогда я выполнил тот же код в Java 8 и раскомментировал заявление, содержащее getSchema с использованием MySQL-разъем-Java-5.1.31-бункер .jar (в настоящее время последний драйвер Java Connector для MySQL).Это был выход:

null 
test 

Это означает, что они до сих пор не поддерживают getSchema метод.

Похожие:

-1

Создайте класс seprate и определите метод getConnection static. Я думаю, что это может помочь у

public class ConnectionManager { 
private static String url = "jdbc:mysql://localhost:3306/myDB";  
private static String driverName = "com.mysql.jdbc.Driver"; 
private static String usernsme = "root"; 
private static String pasword = "root"; 
private static Connection con; 
private static String url; 

public static Connection getConnection() { 
    try { 
     Class.forName(driverName); 
     try { 
      con = DriverManager.getConnection(url, username, password); 
     } catch (SQLException ex) { 

      System.out.println("Failed to create the database connection."); 
     } 
    } catch (ClassNotFoundException ex) { 

     System.out.println("Driver not found."); 
    } 
    return con; 
} 
} 

Тогда получите соединение в коде следующим образом:

private Connection con = null; 
private Statement stmt = null; 
private ResultSet rs = null; 
con = ConnectionManager.getConnection(); 
stmt = con.createStatement(); 
rs = stmt.executeQuery(sql); 
+0

Я попробовал, не помог. Во-вторых, можете ли вы прояснить, что вы подразумеваете под «определением статического класса»? – Solace

+0

Для соединения JDBC вам необходимо создать класс seprate. В моем случае я делаю класс ConnectionManager. и определить метод как статический в этом классе. как и я в этом ответе. – Vishal16

+0

Я уже пробовал это. Это не помогло. Но только для того, чтобы мне было ясно, пожалуйста, уточните, почему вы это предлагаете? Как ваше решение поможет? – Solace

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