Проверьте, автоматически ли увеличивается столбец в Sybase с помощью JDBC - PullRequest
1 голос
/ 16 февраля 2009

Чтобы проверить, автоматически ли увеличивается столбец, я могу сделать следующее

Connection con = ...    
DatabaseMetaData meta = con.getMetaData();
ResultSet metaCols = meta.getColumns(catalog, schema, table, "%");
while ( metaCols.next() )   
     String value = rs.getString("IS_AUTOINCREMENT")    
  ...

отлично работает, за исключением баз данных Sybase. Я пробовал это с драйверами jTDS и JConnect, но с обоими драйверами я получаю это исключение:

java.sql.SQLException: Invalid column name IS_AUTOINCREMENT.

Есть ли другой способ узнать, автоматически ли увеличивается столбец в Sybase? Я думал, что «IS_AUTOINCREMENT» - это особенность JDBC4, а jTDS - это JDBC4-совместимый драйвер.

Ответы [ 6 ]

3 голосов
/ 16 февраля 2009

Sybase использует столбцы «идентичность», а не «автоинкремент по умолчанию», поэтому я считаю, что вы получаете это сообщение.

Попробуйте проверить, содержит ли столбец TYPE_NAME ключевое слово "identity".

Поведение столбцов идентификаторов также немного отличается, но это не так.

1 голос
/ 17 февраля 2009

Извините, я неправильно понял, как вы обнаружили ниже, используя sp_help, если столбец идентификаторов содержит 1, то столбец является идентификатором.

Есть и другие доступные методы. Я сосредоточился на методах Java, когда мог бы дать вам ответ за считанные секунды, если бы знал, что вы будете довольны такими командами SQL, как sp_help, sp_columns и выбором из системных таблиц.

Удачи.

0 голосов
/ 19 апреля 2018

Если вы хотите, чтобы запрос проверял идентичность столбца, вы можете использовать системную таблицу syscolumns. Так, согласно информационному центру sybase значение 128 столбца status в syscolumns является идентичным.

select * from sysobjects so
inner join syscolumns sc on so.id=sc.id
where so.name='EX_EMPLOYEE' and sc.name='ID' and sc.status=128
0 голосов
/ 26 июня 2009

Это самый простой способ получить идентификационную информацию



ResultSet tableInfo = tableInfoQuery.executeQuery("SELECT * FROM " + tableName + " WHERE 1=2");
ResultSetMetaData rsMetaData = tableInfo.getMetaData();
for (int i = 1; i < = rsMetaData.getColumnCount(); i++)
{rsMetaData.isAutoIncrement(i);}


0 голосов
/ 17 февраля 2009

sp_help предоставляет всю необходимую мне информацию. Этот SP возвращает несколько ResultSets. Третий ResultSet содержит информацию, которая мне нужна.

Statement stmt = con.createStatement();
stmt.executeQuery("sp_help " + table);
stmt.getMoreResults();
stmt.getMoreResults();
ResultSet rs = stmt.getResultSet();
//...
while( rs.next() )
   boolean identity = rs.getBoolean("Identity");
0 голосов
/ 17 февраля 2009

Какую версию JConnect вы используете? Попробуйте использовать 6. Он должен работать, используя:

DatabaseMetaData.getTypeInfo ()

PS. Извините, новичок на сайте, недостаточно баллов для комментариев к вашему сообщению: (

...