Java 检查一列是否在Sybase和JDBC中自动递增

Java 检查一列是否在Sybase和JDBC中自动递增,java,jdbc,metadata,sybase,Java,Jdbc,Metadata,Sybase,要检查列是否自动递增,我可以执行以下操作 Connection con = ... DatabaseMetaData meta = con.getMetaData(); ResultSet metaCols = meta.getColumns(catalog, schema, table, "%"); while ( metaCols.next() ) String value = rs.getString("IS_AUTOINCREMENT") ... 除

要检查列是否自动递增,我可以执行以下操作

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兼容的驱动程序。

Sybase使用“identity”列而不是“default AUTOINCREMENT”,这就是我相信您会收到此消息的原因

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


标识列的行为也有点不同,但这只是一个旁白。

Sybase使用“标识”列而不是“默认自动增量”,这就是我认为您收到此消息的原因

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


标识列的行为也有点不同,但这只是旁白。

您使用的是什么版本的JConnect?尝试使用6。它应该通过以下方式工作:

DatabaseMetaData.getTypeInfo()


注:很抱歉,新到该站点,没有足够的点来评论您的帖子:(

您使用的是什么版本的JConnect?尝试使用6。使用以下方法应该可以工作:

DatabaseMetaData.getTypeInfo()


注:很抱歉,新到该站点,没有足够的点来评论您的帖子:(

sp\u帮助提供了我需要的所有信息。 此SP返回多个结果集。 第三个结果集包含我需要的信息

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

sp_帮助提供了我需要的所有信息。 此SP返回多个结果集。 第三个结果集包含我需要的信息

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

抱歉,我误解了您在下面使用sp_帮助时发现的内容。如果标识列包含1,则该列是标识

还有其他可用的方法。我专注于Java方法,如果我知道您会喜欢使用SQL命令,例如sp_help、sp_columns和selection from systemtables,我本可以在几秒钟内给您答案


祝您好运。

抱歉,我误解了您在下面使用sp_帮助时发现的内容。如果标识列包含1,则该列就是标识

还有其他可用的方法。我专注于Java方法,如果我知道您会喜欢使用SQL命令,例如sp_help、sp_columns和selection from systemtables,我本可以在几秒钟内给您答案


祝你好运。

这是获取身份信息的最简单方法



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



ResultSet tableInfo=tableInfoQuery.executeQuery(“从“+tableName+”中选择*,其中1=2”);
ResultSetMetaData rsMetaData=tableInfo.getMetaData();
对于(int i=1;i<=rsMetaData.getColumnCount();i++)
{rsMetaData.isAutoIncrement(i);}

这是获取身份信息的最简单方法



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



ResultSet tableInfo=tableInfoQuery.executeQuery(“从“+tableName+”中选择*,其中1=2”);
ResultSetMetaData rsMetaData=tableInfo.getMetaData();
对于(int i=1;i<=rsMetaData.getColumnCount();i++)
{rsMetaData.isAutoIncrement(i);}

如果要查询检查列是否为标识,可以使用系统表
syscolumns
。因此,根据syscolumns is identity中column
status
的值128

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

如果希望查询检查列is identity,可以使用系统表syscolumns。因此,根据syscolumns is identity中column
status
的值128

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
连接连接;
ResultSet rs1=conn.createStatement().executeQuery(“从表1中选择*);
ResultSetMetaData rsmd1=rs1.getMetadata();
对于(int i=1;i
连接接头;
ResultSet rs1=conn.createStatement().executeQuery(“从表1中选择*);
ResultSetMetaData rsmd1=rs1.getMetadata();

for(int i=1;i列标识或标识不存在。但是感谢您的建议。请参阅我在您的提示后找到的答案。列标识或标识不存在。但是感谢您的建议。请参阅我在您的提示后找到的答案。DatabaseMetaData.getTypeInfo()仅返回数据库支持的数据类型。但此信息对查找标识列没有帮助。DatabaseMetaData.getTypeInfo()仅返回数据库支持的数据类型。但此信息对查找标识列没有帮助。对于将来的参与者,您可以检查“我的下方答案”以进行查询以检查列是否标识对于将来的参与者,您可以检查“我的下方答案”以进行查询以检查列是否标识