使用 JDBC 检查 Sybase 中的列是否自动递增
要检查列是否自动递增,我可以执行以下
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_AUTOINCRMENT”是 JDBC4 的一项功能,而 jTDS 是 JDBC4 兼容的驱动程序。
To check if a column is auto incremented i can do the following
Connection con = ...
DatabaseMetaData meta = con.getMetaData();
ResultSet metaCols = meta.getColumns(catalog, schema, table, "%");
while ( metaCols.next() )
String value = rs.getString("IS_AUTOINCREMENT")
...
works fine except with Sybase databases. I've tried it with the jTDS and JConnect drivers, but with both drivers I get the this exception:
java.sql.SQLException: Invalid column name IS_AUTOINCREMENT.
Is there another the get find out, whether a column in Sybase is auto incremented or not?
I thought "IS_AUTOINCREMENT" is a feature with JDBC4 and jTDS is a JDBC4 compatible driver.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Sybase 使用“身份”列而不是“默认自动增量”,这就是我相信您收到此消息的原因。
尝试检查 TYPE_NAME 列是否包含关键字“identity”。
身份列的行为也有点不同,但这是一个题外话。
Sybase uses 'identity' columns rather than 'default autoincrement' which is why I believe you are getting this message.
Try checking if TYPE_NAME column contains keyword "identity".
The behaviour of identity columns is a little different also, but that is an aside.
抱歉,我误解了,因为您在下面使用 sp_help 发现如果标识列包含 1 那么该列就是一个标识。
还有其他方法可用。 我专注于 Java 方法,如果我知道您会对 SQL 命令(例如 sp_help、sp_columns 和从系统表中进行选择)感到满意,那么我可以在几秒钟内给您答案。
祝你好运。
Sorry, I misunderstood as you have found below using sp_help if the identity column contains a 1 then the column is an identity.
There are also other methods available. I was concentrating on Java methods when I could have given you the answer in seconds had I known you would be happy with SQL commands such as sp_help, sp_columns and selecting from systemtables.
Best of luck.
您使用什么版本的 JConnect? 尝试使用 6。它应该可以使用:
DatabaseMetaData.getTypeInfo()
PS。 抱歉,刚来这个网站,没有足够的积分来评论您的帖子:(
What version of JConnect are you using? Try using 6. It should work using:
DatabaseMetaData.getTypeInfo()
PS. Sorry new to the site, not enough points to comment on your post :(
sp_help 提供了我需要的所有信息。
该 SP 返回多个结果集。
第三个 ResultSet 包含我需要的信息。
sp_help delivers all the information I need.
This SP returns several ResultSets.
The third ResultSet contains the information I need.
这是获取身份信息的最简单方法
This is the easiest way to get the identity information
如果您希望查询检查列是否相同,可以使用系统表
syscolumns
。 因此,根据 sybase infocenter syscolumns 中status
列的值128 是identity。If you want a query to check the column is identity, you can use system table
syscolumns
. So as per sybase infocenter the value 128 of columnstatus
in syscolumns is identity.