0

我有一个使用 JPA 的 JavaEE 项目。由于 JPA 对创建视图的限制,我使用以下代码发送纯 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);
        }
    }
}
4

1 回答 1

1

您似乎没有执行查询。您使用 创建一个语句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();

我认为您也可以使用 执行查询statement.executeUpdate(query),但不能使用executeQuery(),因为它保留给SELECT将在 a 中返回行的查询ResultSet

于 2013-06-05T10:46:22.953 回答