簡體   English   中英

將String日期轉換為Long Date並更新derby數據庫中的行

[英]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.Datelong值是毫秒數,所以您需要將結果乘以1000。

因此,以上語句會將dates列更新為DATE列的相應long值。

但是我不明白你為什么要這么做。 存儲派生值通常不是一個好主意。 從表中檢索數據時,您始終可以“即時”計算該值。

順便說一句: DATE是列的可怕名稱。 首先,因為它是保留字,可能導致很多混亂。 其次,因為它沒有記錄數據模型。 是“到期日”,“有效期自日期”,“有效截止日期”,“出生日期”...。

DATES一樣令人困惑。 您應該將其命名為milliseconds或類似名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM