我有一个JavaEE项目,我在其中使用JPA。由于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);
}
}
}
答案 0 :(得分: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
中的行。< / p>