使用预准备语句连接到不同的模式

时间:2017-10-26 18:11:45

标签: java prepared-statement

我有以下代码正常运行,一个sql语句selectEmpShowDocs_SQL引用schema1。在这种情况下,我将empID的值硬编码为2,如下面的sql所示:

private String selectEmpShowDocs_SQL = 
            "SELECT " + 
                "emp_doc " +
            "FROM " + 
                "schema1.emp_info " +               
            "WHERE " +              
                "doc_id = ? "+
            "AND"+
                 "empID = 2";   

现在,我有另一个sql语句正在检索emp_id值,而不是像上面empID那样对值进行硬编码,我希望传递emp_id的值从以下sql语句获取到上面的sql语句。这是指schema2的陈述。

 private String selectEmpIDSQL = 
            "SELECT " + 
                "emp_id " +
            "FROM " + 
                "schema2.emp_id " +             
            "WHERE " +              
                "company_id = 435 " 

我想知道是否可以使用一个预准备语句连接两个不同的模式? Here有人提到准备好的声明与特定数据库绑定,在这种情况下,如果不可能,对我来说最好的方法是什么?

以下是仅使用引用schema1的SQL查询的完整代码。

public List<EmployeeDocument>  getEmployeeDocument(String docId, Integer employeeID) throws DaoException
    {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();                      
        DataSource ds = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        List<EmployeeDocument> empShowDocs = new ArrayList<EmployeeDocument>();         
        try {
            ds = jdbcTemplate.getDataSource();
            conn = ds.getConnection();
            pstmt = conn.prepareStatement(selectEmpShowDocs_SQL);
            logger.debug("sql query :" + selectEmpShowDocs_SQL);
            System.out.println(selectEmpShowDocs_SQL);
            pstmt.setString(1, docId);                  
            logger.debug("sql parameters, docId:" + docId);
            rs = pstmt.executeQuery();          
            while(rs.next()) {              
                EmployeeDocument empShowDocRecord = new EmployeeDocument();     
                empShowDocRecord.setEmp_Content(rs.getString("emp_doc")));  
                empShowDocs.add(empShowDocRecord);
            }
        } catch(Throwable th) {
            throw new DaoException(th.getMessage(), th);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {                  
                    e.printStackTrace();
                }
                rs = null;
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch(SQLException sqe) {
                    sqe.printStackTrace();
                }
                pstmt = null;
            } 
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException sqle) {
                    sqle.printStackTrace();
                }
                conn = null;
            }
            if (ds != null) {               
                ds = null;
            }
        }       
        return empShowDocs;
    }

    private String selectEmpShowDocs_SQL = 
            "SELECT " + 
                "emp_doc " +
            "FROM " + 
                "schema1.emp_info " +               
            "WHERE " +              
                "doc_id = ? "+
            "AND"+
                 "empID = 2";           



    private String selectEmpIDSQL = 
            "SELECT " + 
                "emp_id " +
            "FROM " + 
                "schema2.emp_id " +             
            "WHERE " +              
                "company_id = 435 " 

0 个答案:

没有答案