2009-02-16 4 views
1

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

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 драйвер.

ответ

0

процедуры 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"); 
3

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

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

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

+0

Идентичность столбцы или IDENTITY не существует. Но спасибо за совет. См. Мой ответ, который я нашел после вашего намека. –

0

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

DatabaseMetaData.getTypeInfo()

PS. К сожалению, новые на сайте, не достаточно очков, чтобы прокомментировать ваш пост :(

+0

DatabaseMetaData.getTypeInfo() возвращает только тип данных, поддерживаемый базой данных. Но эта информация не помогает найти столбец идентификатора. –

1

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

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

Удачи.

0

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



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);} 


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