虽然我是该网站的老用户,但之前自己设法解决了问题。这次我需要你的建议:)
情况:我继承了旧的 Java 项目代码,其中 SQLJ 用于数据库访问。项目中既不需要数据库也不需要 SQLJ,但我无法更改历史记录,因此必须忍受它。故事的另一部分是以前在 JDeveloper 中进行开发,但是新的公司标准需要 Eclipse(我更喜欢一个更好的产品)。
但是我在使用 javac 而不是 Oracle 编译器迁移 SQLJ 以使用 Ant 自动构建时遇到了问题。那么问题来了:
由于包结构的差异,SQLJ 生成的 Java 文件对 javac 编译器无效。然而,只要 JDeveloper (11.1.1.0.2) 使用旧的 oracle 编译器,它就接受此类 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 相同的问题(我相信)。
作为一种解决方法,我们将 Java 文件与 SQLJ 一起存储,并且在我们从 SQLJ 更改重新生成 java 之后,我们再次修复 Java。手动执行这些操作不是很高兴,因为在需要更新 SQLJ 的情况下,它会使自动构建过程无效。
有人有什么想法吗?非常感谢您的帮助 :)
干杯