5

このコードでは、プログラムを実行するたびにテーブルがすでに存在する場合はテーブルを削除しようとしていますが、コントロールはifステートメント内にありません。table1およびtable2データベースに存在します。私は自分のデータベースでそれをチェックしました。ステートメントに含まれていないifため、テーブルを作成しようとすると、最後の行に次のエラーが表示されますORA-00955: name is already used by an existing object。私は何が間違っているのですか?

    Statement statement = connection.createStatement();
    DatabaseMetaData md = connection.getMetaData(); 
    String[] types = {"TABLE"};
    ResultSet rs1 = md.getTables(null, null, "table1",types );
    if (rs1.next()) {
        System.out.println(rs1.getString(3));
        statement.executeUpdate("drop table table1");
    }
    rs1.close();

    ResultSet rs2 = md.getTables(null, null, "table2", types);
    if (rs2.next()) {
        statement.executeUpdate("drop table table2");
    }
    rs2.close();
    statement.executeUpdate("create table table1(" +.....
4

2 に答える 2

6

この行を置き換えます

ResultSet rs1 = md.getTables(null, null, "table1",types );

これで

ResultSet rs1 = md.getTables(null, null, "TABLE1",types );
于 2011-11-19T22:08:07.940 に答える
5

上記のプログラムによってテーブルtable1table2が作成された場合、それらの名前はOracleによって大文字になります。試す

    ResultSet rs1 = md.getTables(null, null, "TABLE1", types);

(および同様にtable2)代わりに。

または、名前に小文字を使用してテーブルを作成する場合は、名前を二重引用符で囲みます。

    statement.executeUpdate("create table \"table1\" (....)");
于 2011-11-19T22:06:33.787 に答える