2014-09-27 2 views
0

У меня есть таблица с именем test2 в моей базе. теперь я хочу проверить, существует ли он в Java-коде. Я написал эти строки кода, чтобы проверить, существует ли таблица или нет.Проверить, существует ли таблица с использованием JDBC

DatabaseMetaData dbm = conn.getMetaData(); 
      ResultSet rs = dbm.getTables(null, "APP", "test2", null); 
      if (!rs.next()) { 
       PreparedStatement create = conn.prepareStatement("create table test2(name2 varchar(33))"); 
       create.executeUpdate(); 
      }else{ 
       System.out.println("already exists"); 
      } 

Как тест2 существует в схеме APP, мое другое должно выполняться. но в моем случае, если он выполняется.

+2

Почему вы запрашиваете таблицу, в которой вы не уверены, в первую очередь? Это само по себе кажется очень, очень необычным. – Makoto

+0

Кто сказал, что я не уверен, что он существует? он существует, я хочу проверить код, который он существует, или нет. внимательно прочитайте. –

+0

@ Макото - Это имеет смысл для меня. Если у нас есть критическая таблица, которая может быть перемещена или переименована, то вы хотите, чтобы ваш код упоминал об этом. Например. Ожидание TBL_USERS, но не найдено. Вы можете обнаружить, что таблица была переименована в t_customers. –

ответ

1

Derby хранит имена таблиц в верхнем регистре (в соответствии с требованиями стандарта SQL и сделано многими другими СУБД, а)

Вам нужно передать имя таблицы в верхнем регистре, а

ResultSet rs = dbm.getTables(null, "APP", "TEST2", null); 

Водитель (все водители, о которых я знаю) пробегает по строкам:

where table_name like 'TEST2' 

для извлечения списка таблиц. Где TEST2 - это неизмененное значение от звонка до getTables(). Если у вас есть СУБД, которая делает сравнение строк с учетом регистра (что почти все СУБД делает - я думаю, что MySQL и SQL-сервер являются исключением), то очевидно, что имя таблицы должно быть передано в том же случае, что и в памяти.

Однако вы можете создать смешанные имена случае таблицы процитировать их: create table "FooBar" (...) В этом случае вам нужно будет пройти "FooBar" в getTables().

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