1

列が自動インクリメントされるかどうかを確認するには、次のようにします

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互換のドライバーだと思いました。

4

7 に答える 7

3

Sybase は、'default autoincrement' ではなく 'identity' カラムを使用しているため、このメッセージが表示されていると思います。

TYPE_NAME 列にキーワード「identity」が含まれているかどうかを確認してください。

ID 列の動作も少し異なりますが、それは余談です。

于 2009-02-16T16:31:56.053 に答える
1

申し訳ありませんが、ID 列に 1 が含まれている場合、列が ID である場合に sp_help を使用して以下で見つけたように誤解しました。

利用可能な他の方法もあります。私は Java メソッドに集中していましたが、sp_help、sp_columns などの SQL コマンドや systemtables からの選択に満足しているとわかっていれば、数秒で答えを出すことができたはずです。

幸運を祈ります。

于 2009-02-17T13:10:26.983 に答える
0

使用している JConnect のバージョンは何ですか? 6 を使用してみてください。

DatabaseMetaData.getTypeInfo()

PS。サイトに新しく申し訳ありませんが、あなたの投稿にコメントするのに十分なポイントがありません:(

于 2009-02-17T09:30:53.157 に答える
0

sp_help は、必要なすべての情報を提供します。この SP は、いくつかの ResultSet を返します。3 番目の 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");
于 2009-02-17T12:16:25.067 に答える
0

これは、ID 情報を取得する最も簡単な方法です。



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


于 2009-06-25T22:28:16.390 に答える