在JSF中使用CallableStatement是否正确

时间:2016-11-17 14:48:19

标签: java jsf jsf-2 prepared-statement callable-statement

我还在学习JSF,但在过去,我使用Swing JDBCMySQL作为RDBMS创建了项目。所以我现在正在开展一个网络项目,以便更熟悉JSF

我在网上看到的大多数示例都使用了PreparedStatement而且我还没有看到任何使用CallableStatement

的内容

我问这个是因为我认为我需要使用SQL Transactions来执行任务。所以,CallableStatement肯定会帮助我,而我过去实际上使用过CallableStatement

另外,我注意到在我看到的示例中,他们从未使用过自动关闭资源的try-with-resources语法

请考虑下面的方法。

public void register() throws SQLException{
        String myFirstName = this.getFirstName();
        String myLastName = this.getLastName();
        String myMiddleName = this.getMiddleName();
        String myEmail = this.getEmail();
        try{
            Context context = new InitialContext();
            dataSource = (DataSource)context.lookup("java:comp/env/jdbc/myDb");
        }catch(NamingException e){
            e.printStackTrace();
        }
            if(dataSource == null){
                throw new SQLException("Can't get DataSource");
            }

        Connection connection = dataSource.getConnection();
            if(connection == null){ 
                throw new SQLException("Unable to connect to datasource"); 
            }

        try{
            String SQL = "INSERT INTO customer (firstName,lastName,middleName,email) VALUES(?,?,?,?)";
            PreparedStatement addCustomer = connection.prepareStatement(SQL);
                addCustomer.setString(1, myFirstName);
                addCustomer.setString(2, myLastName);
                addCustomer.setString(3, myMiddleName);
                addCustomer.setString(4, myEmail);

        }finally{
            connection.close();
        }

    }

我是否可以用

替换PreparedStatement addCustomer = connection.prepareStatement(SQL);
String SQL = "{call addCustomer (?,?,?,?)}";
callableStatement = conn.prepareCall(SQL);

如果没有,那么在SQL Transactions

中使用Stored Procedures中包含的JSF的最佳解决方案是什么?

我很感激任何最有帮助的例子。

谢谢。

0 个答案:

没有答案