0

Java Date オブジェクトを Postgresql DATE セルに挿入するには?

私が自分のやり方でやると、それは間違っています:

Calendar date = Calendar.getInstance(); // wrong
Date date = new Date(); // wrong         

String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE +
                                "VALUES (" + date + ");";
stat.executeUpdate(addRecord)

これ以上のアイデアはありません...

PS:

public static void CreatePacjenciTable()
{
    try
    {
        Connection conn = DataBase.Connect();

        try
        {
            Statement stat = conn.createStatement();

            String createTable = "CREATE TABLE " + GlobalFields.PACJENCI_TABLE 
                + "(dataUrodzenia DATE);";

            stat.executeUpdate(createTable);
        }
        finally
        {
            conn.close();
        }
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    } 
}
4

3 に答える 3

5

そんなことは絶対にしてはいけません!

パラメータを含む SQL 文字列を作成しないでください。代わりに、PreparedStatementを作成し、それにパラメーターを設定します。このような:

    String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE + "VALUES (?);";
    PreparedStatement stmt = conn.prepareStatement(addRecord);
    stmt.setDate(1, new Date(System.currentTimeMillis()));
    stmt.executeUpdate();

時刻が常に UTC の午前 0 時である通常のサブクラスである があるDateことに注意してください。ある時点ではなく、実際の日付を表すために使用されます。または、ある瞬間を表す を使用することもできます。java.sql.Datejava.util.Datejava.sql.Timestamp

于 2012-08-29T16:53:27.920 に答える
4

これが問題です:

String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE +
                   "VALUES (" + date + ");";

を文字列に変換し、Dateそれを SQL 内に含めています。そうしないでください。ここで文字列変換を使用する必要はまったくありません。

代わりに、a を使用して、値を aまたは場合によってはパラメーター経由PreparedStatementで挿入します。java.sql.Datejava.sql.Timestamp

ほとんどの場合、SQL に値を文字列として含めることは避けてください。代わりにパラメーター化された SQL を使用し、ステートメントで値を設定してください。これにより、SQL (コード) がパラメーター (データ) から分離され、データ変換の問題のリスクが回避され、SQL インジェクション攻撃も回避されます。

于 2012-08-29T16:49:03.623 に答える
1

文字列を連結して SQL を作成する代わりに (Java の日付の文字列表現は Postgres によって理解されないため、ここで問題になります)、PreparedStatementを使用して日付をパラメーターとして渡します。他の利点 (事前にコンパイルされたステートメントなど) は別として、日付を渡すことができ、DateJDBC と基礎となるデータベース ドライバーが必要なすべてのデータ変換作業を実行できるようになります。

于 2012-08-29T16:52:25.750 に答える