在使用jdbc的derby中:创建一个表而不是一个视图



我有一个使用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);
        }
    }
}

似乎您没有执行您的查询。你用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查询,将返回ResultSet中的行。

相关内容

  • 没有找到相关文章

最新更新