0

java.util.Dateは日付を取得するために使用し、このような日付形式を取得します

土 6 月 29 日 11:07:25 CDT 2013

を使用してデータベースに挿入しようとすると

String QueryString = "INSERT INTO db (day) Values ('"+d+"');";
    st.executeUpdate(QueryString);

私はこれを得る

「文字列から日時を変換する際、変換に失敗しました。」

そのタイプの日付をデータベースに挿入するにはどうすればよいですか?

文字列として宣言する必要がありますか?

4

4 に答える 4

4

そのタイプの日付をデータベースに挿入するにはどうすればよいですか? 文字列として宣言する必要がありますか?

いいえ -現在使用している文字列変換も避けるべきです。そのように SQL を動的に構築するべきではありません。これは、SQL インジェクション攻撃、読みにくいコード、および変換の失敗のレシピです。

代わりに、を使用し、次を使用PreparedStatementしてパラメーターを設定しますsetDate

// TODO: Closing the statement cleanly in a finally block or try-with-resources
PreparedStatement pst = conn.prepareStatement("INSERT INTO db (day) Values (?)");
pst.setDate(1, new java.sql.Date(d.getTime()));
pst.executeUpdate();

java.sql.Dateは のサブクラスですjava.util.Dateが、多少異なることに注意してください。特定の時点を実際の日付に変換するためにどのタイムゾーンが使用されているかは、私には明確ではありませんでした。ドキュメントはあまり役に立ちません。私の見解では設計上壊れていますが、それは別の問題です。タイムゾーンに使用される - をsetDate受け入れる別のオーバーロードを使用できます。Calendarまだすべてが恐ろしく不明確ですが、希望する結果が得られることを願っています。

于 2013-06-29T17:15:30.717 に答える
1

java.sql.Dateを使用 して、データベースと互換性を持たせます

于 2013-06-29T17:15:06.837 に答える
0

SimpleDateFormatを使用して Date オブジェクトをフォーマットできます

Date d = Calendar.getInstance().getTime(); //Your date

String dateString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);

String QueryString = "INSERT INTO db (day) Values ('"+dateString+"');";
st.executeUpdate(QueryString);
于 2013-06-30T01:31:28.857 に答える
0

または、更新可能な ResultSetを使用します。

ResultSet rs = conn.createStatement("select day from db", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs.moveToInsertRow();
rs.updateDate(1, yourJavaSqlDateObject);
rs.insertRow();
rs.first();

ただし、ドライバー/データベースによっては、テーブルに書き込みロックがある場合があります。

日付の書式設定は、入力ではなく出力で行う必要があります。データベースに日付の最適な保存方法を決定させます。

于 2013-06-29T17:22:54.657 に答える