[英]Convert a String date to Long Date and update rows in derby database
在我的Java應用程序中,我試圖用長日期值更新一些行。 我在下面粘貼了我的代碼。 此處的表名稱為"CASHSELL"
"DATE VARCHAR(20)
和"DATES BIGINT"
。
String query = "SELECT DATE, DATES FROM CASHSELL";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
try{
conn = new connection().db();
stmtt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmtt.executeQuery(query);
while (rs.next()){
String dat = rs.getString("DATE");
Date d = (Date) sdf.parse(dat);
long longDate = d.getTime();
rs.updateLong("DATES", longDate);
rs.updateRow();
conn.commit();
}
}
catch(SQLException | ParseException ex){JOptionPane.showMessageDialog(null, ex);
}
finally{try{rs.close(); conn.close(); stmtt.close();}catch(SQLException ex){} }
無論如何,此方法不起作用。 我在這里犯了什么錯誤? 也沒有錯誤信息嗎? 我想念什么嗎? 還是不是使用JDBC更新的正確方法? 還有其他方法,這樣我就可以通過將字符串日期轉換為長日期來更新1,00,000行?
我正在Derby數據庫中工作。
完全不需要循環或SELECT
。
update CASHSELL
set dates = {fn TIMESTAMPDIFF(SQL_TSI_SECOND, timestamp ('1970-01-01 00:00:00'), "DATE") } * 1000;
TIMESTAMPDIFF
將返回從1970-01-01到DATE
列的值之間的秒數。 因為從那時起java.util.Date
的long
值是毫秒數,所以您需要將結果乘以1000。
因此,以上語句會將dates
列更新為DATE
列的相應long值。
但是我不明白你為什么要這么做。 存儲派生值通常不是一個好主意。 從表中檢索數據時,您始終可以“即時”計算該值。
順便說一句: DATE
是列的可怕名稱。 首先,因為它是保留字,可能導致很多混亂。 其次,因為它沒有記錄數據模型。 是“到期日”,“有效期自日期”,“有效截止日期”,“出生日期”...。
和DATES
一樣令人困惑。 您應該將其命名為milliseconds
或類似名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.