Jakarta ee 在带有jdbc的derby上:创建表而不是视图

Jakarta ee 在带有jdbc的derby上:创建表而不是视图,jakarta-ee,netbeans,jdbc,derby,Jakarta Ee,Netbeans,Jdbc,Derby,我有一个JavaEE项目,我在其中使用JPA。由于JPAs对创建视图的限制,我使用以下代码发送一条普通SQL语句来创建视图。 代码可以工作,但在提交后的数据库中有一个表而不是视图。 在netbeans IDE中执行相同的SQL语句会创建正确的结果。 为什么要创建表而不是视图 @Startup @Stateless public class Trans { @PersistenceContext EntityManager em; InitialContext ctx;

我有一个JavaEE项目,我在其中使用JPA。由于JPAs对创建视图的限制,我使用以下代码发送一条普通SQL语句来创建视图。 代码可以工作,但在提交后的数据库中有一个表而不是视图。 在netbeans IDE中执行相同的SQL语句会创建正确的结果。 为什么要创建表而不是视图

@Startup
@Stateless
public class Trans {

    @PersistenceContext
    EntityManager em;
    InitialContext ctx;
    javax.sql.DataSource ds;

    public void sqlTest() {
        try {
            ctx = new InitialContext();
            ds = (DataSource) ctx.lookup("jdbc/INCP");

            Connection connection;
            connection = ds.getConnection("incp_schema", "123");

            connection.prepareCall("CREATE VIEW \"SCHEMA\".LOGIN_VIEW AS
                SELECT USERNAME, PASSWORDHASH, GROUPNAME
                FROM USERTABLE, GROUPTABLE
                WHERE GROUPTABLE.ID=USERTABLE.GROUPTABLE_ID");
            connection.createStatement();
            connection.commit();

        } catch (NamingException | SQLException ex) {
            Logger.getLogger(Trans.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

您似乎没有执行查询。使用
prepareCall()
创建语句,使用
createStatement()
创建第二条语句,但不执行这些语句。你应该这样做:

        Connection connection;
        connection = ds.getConnection("incp_schema", "123");

        String query = "CREATE VIEW \"SCHEMA\".LOGIN_VIEW AS
            SELECT USERNAME, PASSWORDHASH, GROUPNAME
            FROM USERTABLE, GROUPTABLE
            WHERE GROUPTABLE.ID=USERTABLE.GROUPTABLE_ID";
        Statement statement = connection.createStatement();
        statement.execute(query); // This is the line that executes the statement
        connection.commit();

我认为您也可以使用
语句执行查询。executeUpdate(query)
,但不能使用
executeQuery(),因为它是保留给
选择
查询的,这些查询将返回
结果集中的行

,所以执行了我的示例,但创建了一个表,该表使用的是给定的列名而不是视图。我尝试了您的更改,但它也创建了一个表。此外,我得到了一个SQL异常和更改。你是对的,我的项目中也有一个其他问题,正因为如此,一开始它不起作用。现在它运行了。非常感谢。