で既存のテーブルを見つけることができない私は、JavaでDerbyデータベースに接続しています:DatabaseMetaDataのは、#1のgetTablesはダービー
public EmbeddedDerbyDataConnection(String name) throws SQLException {
EmbeddedDataSource dataSource = new EmbeddedDataSource();
dataSource.setDatabaseName(name);
dataSource.setCreateDatabase("create");
this.connection = dataSource.getConnection();
init();
}
接続はOKのようです。そして、私はそれがまだ存在し、いくつかのデフォルトのデータで、この表を埋めていない場合は、テーブルを作成しますinit()
メソッドを呼び出す:
private void init() throws SQLException {
DatabaseMetaData metaData = this.connection.getMetaData();
ResultSet rs = metaData.getTables(null, null, "mytable", null);
if (rs.next()) {
System.out.println("Table already exists.");
} else {
Statement stmt = this.connection.createStatement();
String query = "CREATE TABLE mytable (...)";
stmt.executeUpdate(query);
stmt.close();
stmt = this.connection.createStatement();
query = "INSERT INTO mytable VALUES (...)";
stmt.executeUpdate(query);
stmt.close();
}
}
初めてEmbeddedDerbyDataConnectionのオブジェクトを作成した後、それはOKに見えました。私はSELECT * FROM mytable
でそれをテストし、私はこのテーブルに入れたデフォルトデータを返しました。
2回目の呼び出しの後に、私はException in thread "main" java.sql.SQLException: Table/View 'mytable' already exists in Schema 'APP'.
を取得します。init()
メソッドのResultSet rsが空であるように見えます。しかし、SELECT * FROM mytable
を呼び出した後、データが存在し、それらが正しい。
どうすればこの問題を解決できますか?どこに問題がありますか?
大文字と小文字の区別は、JDBC仕様で必要です(たとえば、パターンパラメータ_はデータベースに格納されているテーブル名と一致する必要があります)_ため、データベースが引用符で囲まれていないオブジェクト名を大文字で格納する場合、パターンは大文字でも一致するようにしてください。 –