0
我想寫一些代碼,它給出了一個ID列表從數據庫中提取匹配記錄。這應該是非常簡單的。但是,ID字段的類型是CHAR(20)。這似乎是一個例子,春季數據不能正確處理,所以我的查詢(功能)不返回任何記錄。這是針對供應商產品的數據庫的,因此我對模式所做的更改是有限的。Oracle中與固定字符字段匹配的JdbcTemplate查詢
create table items (
item_id char(20)
)
insert into items (item_id) values ('12345');
和下面的應用程序代碼:
@SpringBootApplication
public class MyWorker {
@Autowired
private NamedParameterJdbcTemplate myDb;
private static final String query = "select item_id\n" +
"from items\n" +
"where item_id in (:item_ids)";
public void main(String[] args) {
SpringApplication app = new SpringApplication(MyWorker.class);
app.setWebEnvironment(false);
app.run(args);
}
public void run(String ... args) {
String[] lookupIds = new String[] { "12345" };
MapSqlParameterSource paramMap = new MapSqlParameterSource();
paramMap.addValue("item_ids", Arrays.asList(lookupIds), java.sql.Types.CHAR);
System.out.println("Starting.");
myDb.query(QueryConfiguration.skuQueryStockedById, paramMap ,
r -> {
System.out.println("Read " + r.getString(1));
});
System.out.println("Done.");
}
}
我可以調整上述如下查詢並得到這個工作,在嚴重退化性能爲代價,因爲這忽略任何索引。
select item_id
from items
where rtrim(item_id) in (:item_ids)
我還有其他解決方案嗎?我假設我可以原生使用JDBC,但是在我重寫了很多代碼之前,我想查看是否有更好的選擇。單獨查看每條記錄可能不可行,因爲我期望處理數千個這樣的記錄。