我正在从配置表中读取表名和列名,并使用动态占位符创建查询。以下是我正在形成的查询。
SELECT PRODUCTNAME,PRODUCTSKEY
FROM PRODUCTS
WHERE PRODUCTID=? AND BANK_ID=? AND PRODUCTSKEY='TST'
我正在将产品id
和bankid
传递给准备好的声明。此处的产品ID为401254
,401250
。如果我执行下面在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.