1

私の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行を更新できるようにする方法は他にありますか?

私はダービーデータベースで働いています。

4

1 に答える 1

1

ループもSELECTまったく必要ありません。

update CASHSELL
  set dates = {fn TIMESTAMPDIFF(SQL_TSI_SECOND, timestamp ('1970-01-01 00:00:00'), "DATE") } * 1000;

TIMESTAMPDIFF1970-01-01 から列の値までの秒数を返しDATEます。aのlong値はそれ以降のミリjava.util.Date秒数であるため、結果に 1000 を掛ける必要があります。

したがって、上記のステートメントは、dates列を対応する列の long 値に更新しDATEます。

しかし、なぜそれをしたいのか理解できません。派生した値を保存することは、通常は良い考えではありません。テーブルからデータを取得するときに、いつでもその値を「オンザフライ」で計算できます。

ところで:DATE列の恐ろしい名前です。第一に、これは予約語であり、多くの混乱を招く可能性があるためです。第二に、データモデルを文書化していないためです。それは「期日」、「有効開始日」、「有効期限日」、「生年月日」….

そしてDATES、同じように混乱しています。millisecondsあなたはそれに似た名前を付けるべきでした。

于 2013-09-19T12:07:14.973 に答える