2009-05-12 13 views
5

JDBCインサートでキーを自動生成できる一般的なRDMSがありますか?たとえば、私は、主キー、IDを持つテーブル、およびint型の値がある場合:SQL ServerのJDBCインサートでキーを自動生成

create table test (
    id int not null, 
    myNum int null 
) 

を、私はjava.sql.SQLExceptionを取得挿入

PreparedStatement statement = connection.prepareStatement("insert into test(myNum) values(?)", Statement.RETURN_GENERATED_KEYS); 
statement.setInt(1, 555); 
statement.executeUpdate(); 
     statement.close(); 

の操作を行います。値を挿入することはできませんがNULLを列 'id'に挿入します。

私はこれが完全にRDMSに依存していると感じています。私たちはSQL Server 2005を使用しており、私は運がないテーブルで

CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 1) ON [PRIMARY] 

を設定しました。

答えて

6

これはデータベースに完全に依存します。 1つの主キーの定義の隣に自動インクリメントキーワードを可能にするDBMSと、シーケンスジェネレータを提供する2つのDBMS(PKの新しい値を生成するために使用することができます。挿入前に新しい値を列に自動的に挿入する「挿入前」トリガー)。

私の知る限りでは:

  1. Firebirdのは
  2. DB2は、 "IDENTITY AS がGENERATED BY DEFAULT" として列を定義することを可能にするシーケンスを使用しています。
  3. InterBaseは、MySQLが "AUTO_INCREMENT" 句
  4. OracleはPostgreSQLが
  5. SQLServerのは、 "IDENTITY(1,1)" 句
を持つシーケンスを使用
  • シーケンスを使用している(発電機と呼ばれる)配列
  • を使用しています
  • +0

    DB2では、ID列とシーケンスのどちらかを選択できます。私は他のrdbmsのためにこの数をイメージすることもできます。 – rudolfson

    +0

    清算していただきありがとうございます。しかし、これは他のrdbmsには当てはまりません。少なくともOracleにとってはそうではありません。 –

    1

    私が知っている限り、データベースに依存しています。同様にタイムスタンプを挿入する。ヌルを挿入すると現在の時刻が挿入されるものもあります。

    2

    IDを自動作成するには、テストテーブルのID列を設定する必要があります。 SQL Serverの場合、ID列にIDENTITY()プロパティを設定する必要があります。

    2

    これはデータベースに依存します。 OracleではSEQUENCEを作成する必要があり、MySQLでは列を自動増分として設定するだけです。

    いつでもHibernateを使用できます。

    +0

    これをもう少し説明すると、Hibernateを使ってDDLを生成したり、起動時にHibernateですべてのマップされたテーブルを作成させることさえできます。適切な "方言"を使ってターゲットデータベースをHibernateに伝えるだけでよいでしょう。 – rudolfson