在while循环中创建预准备语句并执行问题

时间:2013-02-09 12:13:37

标签: java sql prepared-statement

我正在从配置表中读取表名和列名,并使用动态占位符创建查询。以下是我正在形成的查询。

SELECT PRODUCTNAME,PRODUCTSKEY 
FROM PRODUCTS 
WHERE PRODUCTID=? AND BANK_ID=? AND PRODUCTSKEY='TST'            

我正在将产品idbankid传递给准备好的声明。此处的产品ID为401254401250。如果我执行下面在toad中查询它,我得到了所需的输出。

SELECT PRODUCTNAME,PRODUCTSKEY 
FROM PRODUCTS 
WHERE PRODUCTID='401254' AND BANK_ID='01'

SELECT PRODUCTNAME,PRODUCTSKEY 
FROM PRODUCTS 
WHERE PRODUCTID='401250' AND BANK_ID='01'

但如果我执行相同的查询,我得不到正确的结果。我在这里面临的问题是,当我运行带有产品ID 401254的预准备语句时,结果集没有value.(while(queryes.next()))

while(productId) {

    String queryToBeExecuted = select+space+columns+space+from+space
            +tableName+space+where+space+filter+space+additionalFilter;

    System.out.println("queryToBeExecuted>"+queryToBeExecuted);
    PreparedStatement ps = prepareStatement(conn,queryToBeExecuted,pk,bankId);
    ResultSet queryrs = ps.executeQuery();
    System.out.println("pk:"+pk);

    ResultSetMetaData meta = queryrs.getMetaData();
    int columnCount = meta.getColumnCount();
    System.out.println("columnCount:"+columnCount);
    List<Object> dataToFile = new ArrayList<Object>();

    while(queryrs.next()) {
        System.out.println("456:"+pk);
        for (int j = 1; j <= columnCount; j++) {
            String columnName = meta.getColumnName(j);
            String columnValue = queryrs.getString(j);
            String transformedColumnData = transformManager
                    .transformData(tableName,columnName,columnValue,intfcode,bankId);
            System.out.println("transformedColumnData:"+transformedColumnData);
            dataToFile.add(transformedColumnData);
        }
    }
}   

public PreparedStatement prepareStatement(Connection connection, 
        String sql, String pk,String bankid) throws SQLException {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, pk);
    preparedStatement.setObject(2, bankid);
    return preparedStatement;
}

下面的Eclipse控制台:

queryToBeExecuted>SELECT PRODUCTNAME,PRODUCTSKEY 
FROM PRODUCTS WHERE PRODUCTID=? AND BANK_ID=? AND PRODUCTSKEY='TST'
pk:401254
columnCount:2
queryToBeExecuted>SELECT PRODUCTNAME,PRODUCTSKEY 
FROM PRODUCTS WHERE PRODUCTID=? AND BANK_ID=? AND PRODUCTSKEY='TST'
pk:401250
columnCount:2
456:401250


first query execution, it didn't go to `while(queryrs.next())` and sysout 456 I'm not getting.

Need your help. thanks.

0 个答案:

没有答案