【发布时间】:2014-08-05 03:46:04
【问题描述】:
我们都知道,当尝试对超过 1000 个值的查询进行轰炸时,我们会看到此异常。列限制的最大值是 1000 .. 最好的解决方案是将查询分成两个。你们可以建议一些可能的代码重构方法来解决我的问题。任何帮助将不胜感激。
当 audTypeFieldIdList 大于 1000 个值时,我们会看到异常。
try {
String query = "select AUDIT_TYPE_FIELD_ID, FIELD_NAME from AUDIT_TYPE_FIELD where AUDIT_TYPE_FIELD_ID in (";
int x = 0;
for (int y = 1; y <= audTypeFieldIdList.size(); y++) {
query += audTypeFieldIdList.get(x);
if (y != audTypeFieldIdList.size()) {
query += ", ";
}
x++;
}
query += ")";
List<Long> audTypeFieldIdList, Connection connection) {
ResultSet rs = null;
Statement stmt = null;
List<AuditTypeField> audTypeFieldList = new ArrayList<AuditTypeField>();
try {
String query = "select AUDIT_TYPE_FIELD_ID, FIELD_NAME from AUDIT_TYPE_FIELD where AUDIT_TYPE_FIELD_ID in (";
int x = 0;
for (int y = 1; y <= audTypeFieldIdList.size(); y++) {
query += audTypeFieldIdList.get(x);
if (y != audTypeFieldIdList.size()) {
query += ", ";
}
x++;
}
query += ")";
stmt = connection.createStatement();
rs = stmt.executeQuery(query);
while (rs != null && rs.next()) {
AuditTypeField audTypeField = PluginSystem.INSTANCE
.getPluginInjector().getInstance(AuditTypeField.class);
audTypeField.setId(rs.getLong("AUDIT_TYPE_FIELD_ID"));
audTypeField.setName(rs.getString("FIELD_NAME"));
audTypeFieldList.add(audTypeField);
}
return audTypeFieldList;
return audTypeFieldList;
【问题讨论】:
-
列表中的 1000 多个元素从何而来?据推测,人类没有输入那么多值。它们是否来自针对数据库的不同查询?如果是这样,您希望将这两个查询结合起来。
-
是的,它来自针对数据库的两个不同查询
-
请不要大喊大叫。那么为什么要进行两个单独的查询呢?
标签: java arrays angularjs jakarta-ee oracle-sqldeveloper