jdbc优化

This commit is contained in:
redkale
2023-04-03 22:17:46 +08:00
parent 8f3ae4b5a7
commit 663ca4f441

View File

@@ -2150,15 +2150,17 @@ public class DataJdbcSource extends AbstractDataSqlSource {
try { try {
String prepareSQL = info.getFindQuestionPrepareSQL(ids[0]); String prepareSQL = info.getFindQuestionPrepareSQL(ids[0]);
PreparedStatement ps = conn.prepareStatement(prepareSQL); PreparedStatement ps = conn.prepareStatement(prepareSQL);
DataJdbcResultSet rr = new DataJdbcResultSet(info);
for (Serializable pk : ids) { for (Serializable pk : ids) {
ps.setObject(1, pk); ps.setObject(1, pk);
}
ResultSet set = ps.executeQuery(); ResultSet set = ps.executeQuery();
final DataResultSet rr = createDataResultSet(info, set); rr.resultSet(set);
while (set.next()) { if (set.next()) {
list.add(getEntityValue(info, null, rr)); list.add(getEntityValue(info, null, rr));
} else {
list.add(null);
}
} }
set.close();
ps.close(); ps.close();
slowLog(s, prepareSQL); slowLog(s, prepareSQL);
return list; return list;
@@ -2553,10 +2555,24 @@ public class DataJdbcSource extends AbstractDataSqlSource {
} }
public static DataResultSet createDataResultSet(EntityInfo info, ResultSet set) { public static DataResultSet createDataResultSet(EntityInfo info, ResultSet set) {
return new DataJdbcResultSet(info).resultSet(set);
}
final ResultSet rr = set; protected static class DataJdbcResultSet implements DataResultSet {
return new DataResultSet() { EntityInfo info;
ResultSet rr;
public DataJdbcResultSet(EntityInfo info) {
this.info = info;
}
public DataJdbcResultSet resultSet(ResultSet set) {
this.rr = set;
return this;
}
@Override @Override
public <T> Serializable getObject(Attribute<T, Serializable> attr, int index, String column) { public <T> Serializable getObject(Attribute<T, Serializable> attr, int index, String column) {
@@ -2666,8 +2682,6 @@ public class DataJdbcSource extends AbstractDataSqlSource {
return info; return info;
} }
};
} }
protected class ConnectionPool implements AutoCloseable { protected class ConnectionPool implements AutoCloseable {