私はウェブサイトの古いユーザーですが、以前は自分で問題を解決することができました. 今回はあなたのアドバイスが必要です:)
状況: SQLJ がデータベース アクセスに使用される古い Java プロジェクト コードを継承しました。このプロジェクトにはデータベースも SQLJ も必要ありませんが、履歴を変更することはできないため、それと一緒に暮らす必要があります。話のもう 1 つの部分は、以前は JDeveloper で開発が行われていたということですが、新しい会社の標準では Eclipse (私の好みではより優れた製品) が必要です。
しかし、SQLJ を Oracle コンパイラの代わりに javac を使用して Ant で自動的にビルドするように移行する際に問題が発生しました。だからここに問題があります:
パッケージ構造の違いにより、SQLJ によって生成された Java ファイルは javac コンパイラでは有効ではありません。ただし、JDeveloper (11.1.1.0.2) は、古いオラクル コンパイラを使用する限り、そのような Java ファイルを受け入れます。問題をよりよく説明するための sqlj と Java の両方の例:
SQLJ
package Sess;
public class UserDB extends Object implements SessConstants
{
#sql public static iterator UserIterator(
String m
<cut off>
);
<cut off>
private static UserIterator UserIter = null;
}
public static boolean readNext(User theUser )
throws SQLException
{
if (iteratorOpen == false)
{
#sql UserIter = {
select
m
<cut off>
from
<cut off>
};
iteratorOpen = true;
<cut off>
生成された Java:
package Sess;
public class UserDB extends Object implements SessConstants
{
public static class UserIterator
extends sqlj.runtime.ref.ResultSetIterImpl
implements sqlj.runtime.NamedIterator
<cut off>
public static boolean readNext(User theUser )
throws SQLException
{
if (iteratorOpen == false)
{
<cut off>
{
<cut off>
UserIter = new Sess.UserDB.UserIterator(new
...
<cut off>
問題は最後のステートメントにあります
UserIter = new Sess.UserDB.UserIterator(new ...
実際には次のようになります。
UserIter = new UserDB.UserIterator(new
それなら大丈夫です。
JDeveloper の新しいバージョンには、javac も使用しているため、同じ問題があることに注意してください (私は信じています)。
回避策として、SQLJ とともに Java ファイルを保存し、変更された SQLJ から Java を再生成した後、Java を再度修正します。SQLJ を更新する必要がある場合の自動ビルド手順が無効になるため、手動で行うことにはあまり満足できません。
誰にもアイデアはありますか?あなたの助けは大歓迎です:)
乾杯