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中columnstatus
的值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()仅返回数据库支持的数据类型。但此信息对查找标识列没有帮助。对于将来的参与者,您可以检查“我的下方答案”以进行查询以检查列是否标识对于将来的参与者,您可以检查“我的下方答案”以进行查询以检查列是否标识