2016-04-16 2 views
0

Unten ist eine Funktion, die Zeilen in ein Array von Datensätzen lädt. jedes Objekt in der ‚DatensätzeVon Postgres mit JDBC abgerufene Zeilen sind alle gleich

private static List<Record> LoadFromDb(String query, Connection connection, long take, long skip, Date minDate) 
{ 
    PreparedStatement preparedStatement = null; 
    ResultSet resultSet = null; 
    Logger logger = null; 
    Record record = new Record(); 
    ArrayList<Record> records = new ArrayList<Record>(); 

    try 
    { 
     preparedStatement = connection.prepareStatement(query); 
     preparedStatement.setDate(1, new java.sql.Date(minDate.getTime())); 
     preparedStatement.setLong(2, take); 
     preparedStatement.setLong(3, skip); 
     resultSet = preparedStatement.executeQuery(); 

     while (resultSet.next()) 
     { 
      record.by = resultSet.getString(1); 
      record.category = resultSet.getString(2); 
      record.channel = resultSet.getString(3); 
      record.event_id = resultSet.getLong(4); 
      record.message = resultSet.getString(5); 
      record.package_type = resultSet.getString(6); 
      record.sensor_type = resultSet.getString(7); 
      record.serial_num = resultSet.getString(8); 
      record.stamp = resultSet.getTimestamp(9); 
      record.target = resultSet.getString(10); 
      record.tbname = resultSet.getString(11); 
      record.timezone = resultSet.getString(12); 
      record.uuid = UUID.fromString(resultSet.getString(13)); 
      records.add(record); 
     } 
    } 
    catch (Exception ex) 
    { 
     logger = Logger.getLogger(DbLoadSave.class.getName()); 
     logger.log(Level.SEVERE, ex.getMessage(), ex); 
    } 
    finally 
    { 
     try 
     { 
      if (resultSet != null) 
      { 
       resultSet.close(); 
      } 
      if (preparedStatement != null) 
      { 
       preparedStatement.close(); 
      } 
     } 
     catch (SQLException ex) 
     { 
      logger = Logger.getLogger(DbLoadSave.class.getName()); 
      logger.log(Level.WARNING, ex.getMessage(), ex); 
     } 
    } 

    return records; 
} 

Die Record-Klasse ist als

import java.sql.Timestamp; 
import java.util.UUID; 

final class Record 
{ 
    public String by; 
    public String category; 
    public String channel; 
    public long event_id; 
    public String message; 
    public String package_type; 
    public String sensor_type; 
    public String serial_num; 
    public Timestamp stamp; 
    public String target; 
    public String tbname; 
    public String timezone; 
    public UUID uuid; 

    public Record() 
    { 
     by = ""; 
     category = ""; 
     channel = ""; 
     event_id = 0; 
     message = ""; 
     package_type = ""; 
     sensor_type = ""; 
     serial_num = ""; 
     stamp = null; 
     target = ""; 
     tbname = ""; 
     timezone = ""; 
     uuid = null; 
    } 
} 

Die Abfrage folgt, die in LoadFromDb geben wird() ist

SELECT by, category, channel, event_id, message, package_type, sensor_type, serial, stamp, target, tbname, timezone, uuid FROM all_events WHERE stamp > ? LIMIT ? OFFSET ?; 

Wenn LoadFromDb() beendet die Ausführung, 'Array ist genau das gleiche. Warum ist das? Jede Hilfe, die Sie zur Verfügung stellen können, wäre sehr willkommen.

+0

Können Sie bestätigen, dass, wenn Sie die SELECT-Anweisung direkt in Postgres ausführen, die Zeilen unterschiedlich sind, oder? – stackoverflowuser2010

Antwort

2

Sie müssen die new Record() Anweisung in Ihre while Schleife verschieben.

// Record record = new Record(); // <-- REMOVE THIS 
    ArrayList<Record> records = new ArrayList<Record>(); 

    try 
    { 
     preparedStatement = connection.prepareStatement(query); 
     preparedStatement.setDate(1, new java.sql.Date(minDate.getTime())); 
     preparedStatement.setLong(2, take); 
     preparedStatement.setLong(3, skip); 
     resultSet = preparedStatement.executeQuery(); 

     while (resultSet.next()) 
     { 
      Record record = new Record(); // <-- MOVE TO HERE 
      record.by = resultSet.getString(1); 
      record.category = resultSet.getString(2); 
Verwandte Themen