奇怪的行爲是我使用System.currentTimeMillis()方法創建的java.sql.Timestamp存儲在我的MySQL數據庫中,如1970-01- 01 01:00:00。使用java.sql.TimeStamp和mysql數據庫遇到的奇怪行爲
兩個時間戳我創造是標誌着一個監控任務我想執行的開始和結束,中行爲發生
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])));
TimeStamp上的JavaDocs(http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/Timestamp.html)表示,自1970年1月1日以來需要幾毫秒的時間,而簡單的打印測試證實了這一點。
我所尋找的是:
- 理由,這種行爲試圖通過
java.sql.Timestamp
存儲在MySQL數據庫中的時間戳是什麼時候? - 此行爲的任何解決方案?
- 任何可能的替代品?
- 任何可能的改進?
編輯: 被要求包括哪些START_INDEX和END_INDEX是:
private static final int END_INDEX = 4;
private static final int START_INDEX = 3;
致歉不把他們在原來的職位。
爲什麼要將值轉換爲字符串並返回?爲什麼不以一種強類型的方式獲取每個參數? – 2012-03-27 15:13:07
當我最初編寫代碼時,我不確定該方法需要多少個參數,所以我決定使用String ...爲了節省我自己的時間:) – OpelMac 2012-03-27 15:21:35
我強烈建議你立即改變它。您始終可以爲參數使用單獨的「構建器」,以便您不依賴於排序。目前我們看不到什麼是START_INDEX等,所以問題*可能會在那裏......我們不知道。 – 2012-03-27 15:22:33