diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index a535bc0d6..2fd0b37a3 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -2150,15 +2150,17 @@ public class DataJdbcSource extends AbstractDataSqlSource { try { String prepareSQL = info.getFindQuestionPrepareSQL(ids[0]); PreparedStatement ps = conn.prepareStatement(prepareSQL); + DataJdbcResultSet rr = new DataJdbcResultSet(info); for (Serializable pk : ids) { ps.setObject(1, pk); + ResultSet set = ps.executeQuery(); + rr.resultSet(set); + if (set.next()) { + list.add(getEntityValue(info, null, rr)); + } else { + list.add(null); + } } - ResultSet set = ps.executeQuery(); - final DataResultSet rr = createDataResultSet(info, set); - while (set.next()) { - list.add(getEntityValue(info, null, rr)); - } - set.close(); ps.close(); slowLog(s, prepareSQL); return list; @@ -2553,120 +2555,132 @@ public class DataJdbcSource extends AbstractDataSqlSource { } 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; - @Override - public Serializable getObject(Attribute attr, int index, String column) { - Class t = attr.type(); + ResultSet rr; - if (t == java.util.Date.class) { - Object val = index > 0 ? getObject(index) : getObject(column); + public DataJdbcResultSet(EntityInfo info) { + this.info = info; - if (val - == null) { - return null; - } - return new java.util.Date( - ((java.sql.Date) val).getTime()); - } else if (t == java.time.LocalDate.class) { - Object val = index > 0 ? getObject(index) : getObject(column); + } - if (val - == null) { - return null; - } - return ((java.sql.Date) val).toLocalDate(); - } else if (t == java.time.LocalTime.class) { - Object val = index > 0 ? getObject(index) : getObject(column); + public DataJdbcResultSet resultSet(ResultSet set) { + this.rr = set; + return this; + } - if (val - == null) { - return null; - } - return ((java.sql.Time) val).toLocalTime(); - } else if (t == java.time.LocalDateTime.class) { - Object val = index > 0 ? getObject(index) : getObject(column); + @Override + public Serializable getObject(Attribute attr, int index, String column) { + Class t = attr.type(); - if (val - == null) { - return null; - } - return ((java.sql.Timestamp) val).toLocalDateTime(); - } else if (t.getName().startsWith("java.sql.")) { - return index > 0 ? (Serializable) getObject(index) : (Serializable) getObject(column); + if (t == java.util.Date.class) { + Object val = index > 0 ? getObject(index) : getObject(column); + + if (val + == null) { + return null; } - return DataResultSet.getRowColumnValue(this, attr, index, column); - } + return new java.util.Date( + ((java.sql.Date) val).getTime()); + } else if (t == java.time.LocalDate.class) { + Object val = index > 0 ? getObject(index) : getObject(column); - @Override - public boolean next() { - try { - return rr.next(); - } catch (SQLException e) { - throw new SourceException(e); + if (val + == null) { + return null; } - } + return ((java.sql.Date) val).toLocalDate(); + } else if (t == java.time.LocalTime.class) { + Object val = index > 0 ? getObject(index) : getObject(column); - @Override - public List getColumnLabels() { - try { - ResultSetMetaData meta = rr.getMetaData(); - int count = meta.getColumnCount(); - List labels = new ArrayList<>(count); - for (int i = 1; i <= count; i++) { - labels.add(meta.getColumnLabel(i)); - } - return labels; - } catch (SQLException e) { - throw new SourceException(e); + if (val + == null) { + return null; } - } + return ((java.sql.Time) val).toLocalTime(); + } else if (t == java.time.LocalDateTime.class) { + Object val = index > 0 ? getObject(index) : getObject(column); - @Override - public boolean wasNull() { - try { - return rr.wasNull(); - } catch (SQLException e) { - throw new SourceException(e); + if (val + == null) { + return null; } + return ((java.sql.Timestamp) val).toLocalDateTime(); + } else if (t.getName().startsWith("java.sql.")) { + return index > 0 ? (Serializable) getObject(index) : (Serializable) getObject(column); } + return DataResultSet.getRowColumnValue(this, attr, index, column); + } - @Override - public void close() { - try { - rr.close(); - } catch (SQLException e) { - throw new SourceException(e); + @Override + public boolean next() { + try { + return rr.next(); + } catch (SQLException e) { + throw new SourceException(e); + } + } + + @Override + public List getColumnLabels() { + try { + ResultSetMetaData meta = rr.getMetaData(); + int count = meta.getColumnCount(); + List labels = new ArrayList<>(count); + for (int i = 1; i <= count; i++) { + labels.add(meta.getColumnLabel(i)); } + return labels; + } catch (SQLException e) { + throw new SourceException(e); } + } - @Override - public Object getObject(int index) { - try { - return rr.getObject(index); - } catch (SQLException e) { - throw new SourceException(e); - } + @Override + public boolean wasNull() { + try { + return rr.wasNull(); + } catch (SQLException e) { + throw new SourceException(e); } + } - @Override - public Object getObject(String column) { - try { - return rr.getObject(column); - } catch (SQLException e) { - throw new SourceException(e); - } + @Override + public void close() { + try { + rr.close(); + } catch (SQLException e) { + throw new SourceException(e); } + } - @Override - public EntityInfo getEntityInfo() { - return info; + @Override + public Object getObject(int index) { + try { + return rr.getObject(index); + } catch (SQLException e) { + throw new SourceException(e); } + } - }; + @Override + public Object getObject(String column) { + try { + return rr.getObject(column); + } catch (SQLException e) { + throw new SourceException(e); + } + } + + @Override + public EntityInfo getEntityInfo() { + return info; + } }