2017-05-01 16 views
2

ローカルの.accdbアクセスデータベースに接続してテーブルを作成しようとしました。私は、Javaでこれらの2つの行を実行するとエラーは、これらのSQL-コマンドを実行している間に存在しない:アクセスDBの自動インクリメントでテーブルを開くことができません

Statement st = d.createStatement(); 
st.executeUpdate("CREATE TABLE suppliers ([name] TEXT(255), [adress] TEXT(255), [ID] AUTOINCREMENT PRIMARY KEY);"); 
st.executeUpdate("CREATE TABLE quality ([name] TEXT(255));"); 
st.close(); 

しかし、今、私は、Microsoft Accessで作成したテーブルを開きたいと生成された2つのテーブル間に差があります。

テーブル「品質」を通常開き、いくつかの値を挿入できます。

は今、私は「サプライヤー」をオープンしようとしている場合、私は、このエラーメッセージが出ます:

error message

をそれはドイツ語であり、「データベース 『』が開かれていませんでした意味のどちらかのデータベースのdoesn。アプリケーションによって認識されないか、ファイルが破損しています。

私は「[ID] AUTOINCREMENT PRIMARY KEY」を削除しようとしましたが、これがなければ正常に動作します。したがって、エラーは "AUTOINCREMENT"によって引き起こされている必要があります。私はucanacessを使用するデータベースに接続するための

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 
c = DriverManager.getConnection("jdbc:ucanaccess://C:/bin/Test.accdb"); 

は、私は私の "AUTOINCREMENT" と間違って何かをやっていますか?

答えて

2

UCanAccess 4.0.2で問題を再現できます。最後に指定された[ID]列に関連しているようです。

sql = "CREATE TABLE suppliers ([name] TEXT(255), [adress] TEXT(255), [ID] AUTOINCREMENT PRIMARY KEY)"; 

...しかし、この順序で列を指定すると、大丈夫動作します:つまり、これが問題の原因

sql = "CREATE TABLE suppliers ([ID] AUTOINCREMENT PRIMARY KEY, [name] TEXT(255), [adress] TEXT(255))"; 

私はUCanAccess開発チームに沿って、この情報を渡します。

関連する問題