Странное поведение заключается в том, что java.sql.Timestamp, который я создаю с помощью метода System.currentTimeMillis (), хранится в моей базе данных MySQL как 1970-01-01 01: 00: 00.
Две метки времени, которые я создаю, предназначены для того, чтобы отметить начало и конец задачи мониторинга, которую я пытаюсь выполнить. Ниже приведены исключения из кода, в котором происходит поведение
final long startTime = System.currentTimeMillis();
while(numberOfTimeStepsPassed < numTimeStep) {
/*
* Code in here
*/
}
final long endTime = System.currentTimeMillis();
return mysqlConnection.insertDataInformation(matrixOfRawData, name,Long.toString(startTime),
Long.toString(endTime), Integer.toString(numTimeStep),
Integer.toString(matrixOfRawData[0].length), owner,
type);
А вот код, используемый для вставки меток времени и других данных в базу данных MySQL
public String insertDataInformation(final double [][] matrix,
final String ... params) {
getConnection(lookUpName);
String id = "";
PreparedStatement dataInformationInsert = null;
try {
dataInformationInsert =
databaseConnection.prepareStatement(DATA_INFORMATION_PREPARED_STATEMENT);
id = DatabaseUtils.createUniqueId();
int stepsMonitored = Integer.parseInt(params[STEPS_MONITORED]);
int numberOfMarkets = Integer.parseInt(params[NUMBER_OF_MARKETS]);
dataInformationInsert.setNString(ID_INDEX, id);
dataInformationInsert.setNString(NAME_INDEX, params[0]);
dataInformationInsert.setTimestamp(START_INDEX, new Timestamp(Long.parseLong(params[START_INDEX])));
dataInformationInsert.setTimestamp(END_INDEX, new Timestamp(Long.parseLong(params[END_INDEX])));
dataInformationInsert.setInt(STEPS_INDEX, stepsMonitored);
dataInformationInsert.setInt(MARKETS_INDEX, numberOfMarkets);
dataInformationInsert.setNString(OWNER_INDEX, params[OWNER]);
dataInformationInsert.setNString(TYPE_INDEX, params[TYPE]);
dataInformationInsert.executeUpdate();
insertRawMatrix(matrix, id, Integer.toString(stepsMonitored), Integer.toString(numberOfMarkets));
} catch (SQLException sqple) {
// TODO Auto-generated catch block
sqple.printStackTrace();
System.out.println(sqple.getSQLState());
} finally {
close(dataInformationInsert);
dataInformationInsert = null;
close(databaseConnection);
}
return id;
}
Важные строки кода:
dataInformationInsert.setTimestamp(START_INDEX, new Timestamp(Long.parseLong(params[START_INDEX])));
dataInformationInsert.setTimestamp(END_INDEX, new Timestamp(Long.parseLong(params[END_INDEX])));
JavaDocs на TimeStamp (http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/Timestamp.html) говорит, что это занимает время в миллисекундах с 1 января 1970 года, и простой тест печати подтверждает это.
Я ищу:
- Причина такого поведения при попытке сохранить метки времени в базе данных MySQL через
java.sql.Timestamp
?
- Какие-нибудь решения для этого поведения?
- Любые возможные альтернативы?
- Какие-нибудь возможные улучшения?
EDIT:
Было предложено указать, что такое START_INDEX и END_INDEX:
private static final int END_INDEX = 4;
private static final int START_INDEX = 3;
Извиняется за то, что не поместил их в исходное сообщение.