【问题标题】:On derby with jdbc: creates a table instead of a view在 derby 上使用 jdbc:创建表而不是视图
【发布时间】:2013-06-05 09:32:54
【问题描述】:

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

【问题讨论】:

    标签: jakarta-ee netbeans jdbc derby


    【解决方案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 查询,这些查询将在ResultSet 中返回行。

    【讨论】:

    • 我的示例已执行,但使用给定的列名而不是视图创建了一个表。
    • 我尝试了您的更改,但它也创建了一个表。此外,我得到一个带有更改的 SQL 异常。
    • 你说得对,我的项目中也遇到了另一个问题,因此一开始它不起作用。现在它运行了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多