SQLJ生成无效的Java代码
问题描述:
虽然我是网站的旧时用户,但之前设法自己解决问题。这一次我需要你的建议:)SQLJ生成无效的Java代码
The situation: 我已经继承了SQLJ用于数据库访问的旧Java项目代码。该项目不需要数据库和SQLJ,但我无法更改历史记录,因此不得不忍受它。这个故事的另一部分是之前的开发是在JDeveloper中完成的,然而新的公司标准需要Eclipse(我的偏好是一个更好的产品)。
但我有一个迁移SQLJs的问题,使用javac代替Oracle编译器自动构建Ant。因此,问题来了:
由于Package结构的差异,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需要更新时使自动构建过程失效。
任何人有任何想法?你的帮助是非常赞赏:)
干杯
答
好了,不多我可以得到回应,尽管这是合理的 - 专题是难得的一个。我也没有发现太多。它看起来像蚂蚁和sqlj存在一个问题需要克服。我们不得不跟上原来的解决方法。即我们编译sqlj,然后手动修改文件(scrip),然后编译它。丑陋但有用。