2012-05-02 2 views
0

私はデータベースのテーブルに列を追加しようとしているとJavaのJDBC:PreparedStatementのは、追加の列のクエリを実行するには、偽

PreparedStatement ps = con.prepareStatement(query); 
ps.execute(); 
ps.close(); 

クエリは(有効なSQL)

ALTER TABLE mytable ADD COLUMN mycolumn datatypeinfo 

のようなものです返しますとにかく、それは正常に実行され、列が作成されます。しかし、execute文はfalseを返します。私はexecuteUpdateで試して、0行を返します。

このすべてのことは、con.setAutoCommitがfalseに設定されたトランザクション内にあることに注意してください。だから私はそれが問題かどうか分からない。問題は、他の更新クエリを先に進める前に列を作成する必要があることです。したがって、トランザクションで実行する必要があります。

+0

あなたがResultSetを期待していないのに、なぜのexecuteUpdate()メソッドを使用しないではありませんか? http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29 – kgrittn

+0

私はそれを試みましたが、何も返されません。つまり、DDL文など何も返さないSQL文では0を返します。私は、例外がスローされたかどうかだけに頼ると思います。 – Krishna

答えて

5

戻り値​​は、成功したかどうかを示すものではなく、実行されたクエリによって結果が返された場合に表示されます。

ALTER TABLEが結果を返さないように、​​は当然Javadocsからfalse

引用返し:最初の結果がResultSetオブジェクトの場合真;

戻り値最初の結果は、更新カウントであるか、何の結果

+0

十分ですが、列が追加されているかどうかを確認するにはどうすればよいですか? DatabaseMetaDataを使用してテーブルに戻り、そのテーブルが有効かどうかを確認する必要がありますか? (本質的に、私は2つではなく1つのステップでそれを行うことができますか?) – Krishna

+4

失敗した場合、例外がスローされます。 – kgrittn

関連する問題