2012-01-17 4 views
1

Я хочу проверить, имеет ли таблица, которая имеет имя basestation, в таблице MySQL из Java-программы с использованием JDBC. Мой код:Ошибка при попытке проверить, существует ли определенная таблица в базе данных MySQL с использованием JDBC

conn = DriverManager.getConnection(url, username, password); 

DatabaseMetaData dbm = conn.getMetaData(); 

tables = dbm.getTables(null, null, "basestations", null); 

if (tables.next()) 
{ 
    //Table exists in database 
    //... 
} 
else 
{ 
    //Table does not exist 
    //... 
} 

но хотя таблица basestations существует в моей базе данных, кажется, что мой код никогда не входит в первый пункт и всегда решает, что таблица не существует, в результате чего, естественно, ошибки в table already exists in database SQL при попытке создать таблицу с начала.

+0

Можете ли вы предоставить вывод для 'getTables (null, null, null, null);'? – Viruzzo

+1

Что произойдет, если вы используете '' BASESTATIONS ''или' '\' basestations \ '' '? –

ответ

2

Не самый лучший способ сделать это ниже .. Но вы можете сделать следующее:

Использование JDBC отправить следующее заявление:

select count(*) from information_schema.tables where information_schema.table_schema='your_schema' and information_schema.table_name='basestations'; 

Разбираем JDBC привести множество.

Это должно возвращать либо 1, либо 0. Если итоговое число равно 1, то таблица существует, в противном случае - нет.

-1

Я подозреваю, что ваш getTables() ничего не возвращает. Согласно документации getTables Возвращаются только описания таблиц, соответствующие критериям каталога, схемы, имени таблицы и типа. В вашем случае каталог и схема имеют значение NULL, что может быть неверным (моя догадка), заполнить их соответствующими значениями.

+1

Прочтите документацию: 'null' означает« игнорировать эту часть фильтра ». – Viruzzo

+0

@thinksteep: нет, конечно, что-то возвращает – nikos