2009-02-16 42 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返回多个结果集。 第三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使用“身份”列而不是“默认自动增量”,这就是为什么我相信您会收到此消息。

尝试检查TYPE_NAME列是否包含关键字“identity”。

身份列的行为也有点不同,但这是一个问题。

+0

列标识或标识不存在的最简单的方法。但感谢您的建议。看到我的回答后,我发现你的提示。 – 2009-02-17 08:28:53

0

您使用的是哪种JConnect版本?尝试使用6.它应该使用:

了DatabaseMetaData.getTypeInfo()

PS。对不起新的网站,没有足够的积分,您的文章:(

+0

DatabaseMetaData.getTypeInfo()只返回数据库支持的数据类型。但是,这些信息对于查找身份列无效。 – 2009-02-17 12:12:20

1

对不起,我误会你发现下面如果标识列包含一个1,则列是标识使用的sp_help。

还有其他可用的方法。我专注于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);}