2012-03-12 6 views
0

データベースを使用するのが比較的新しいですが、何らかの理由でこの「実行」が機能しない場合があります。データベースクエリの問題

statment2.execute("insert into table Value (" + int + "," + date + "," + int + ",'" + string + "')"); 

エラーは「カンマがありません」です。日付は、その特定のフィールドの日付としてのみ指定されます。

私は

Date date = new Date(); 
date.setMonth(month); 
date.setYear(year); 
date.setDate(weekStart); //weekStart is always monday 

を次のようにそれを設定する私は、昔ながらの日付やdate.toStringを使用する必要がありますか?私はカレンダーを使用しようとしていましたが、カレンダーオブジェクトを使用してDB日付を設定する方法はわかりません。私は "gety/m/d"メソッドを見ていませんでした。

問題は私のクエリですか、私は不適切にDateオブジェクトを使ってデータベースに日付を設定していますか?

編集:

は、応答を試みた不正な形式を持って - 予定日は数を得ました。 はPreparedStatementを使用すると、これはそれだろう解決しないでしょう

sqlDate.valueOf(dateString I created) 
sqlDate.toString() 
sqlDate 

をしようとしましたか?私はそれがセキュリティ上の理由でより良いと思われることを認識しています。

+3

いくつかのこと - 1)データベースに依存し、すべてのデータベースには、これを処理します異なっている。彼らのドキュメントをチェックしてください。 2)私たち自身のSQLをその場で作成するのではなく、JDBCで準備されたステートメントを調べる必要があります。これらのタイプの問題のいくつかを回避することになります。 –

答えて

2

まず、PreparedStatementを使用してクエリに値を挿入する必要があります。これには、SQL Injectionの問題を回避するなど、多くの利点があります。 PreparedStatementを使用すると、今見ているエラーを避けることができます。 PreparedStatementを使用しているコードは、次のようなものになります。

Connection conn = null; 
    PreparedStatement pstmt = null; 
    try { 
     conn = getConnection(); 
     String query = "insert into table (column1,column2,column3,column4) values(?, ?, ?,?)"; 

     pstmt = conn.prepareStatement(query); 
     pstmt.setInt(1, 1); 
     pstmt.setDate(2, sqlDate); 
     pstmt.setInt(3, 3); 
     pstmt.setString(3, "test"); 
     pstmt.executeUpdate(); 
    } catch (Exception e) { 
     //log the error messages log.error(e,e); 
     //throw the actual exception upstream 
    } finally { 
     pstmt.close(); 
     conn.close(); 
    } 

"DB"の日付の意味はわかりません。あなたは、SQLの日付オブジェクトの後にある場合は、java.sql.Dateオブジェクトにこのようjava.util.Dateオブジェクトに変換することができます:

java.util.Date date = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
+0

Hmmm、間違った形式を取得する期待される日付取得番号。 – cphilpot

+0

String query = "テーブル(column1、column2、column3、column4)の値(?、?、?、?)に正確に挿入するか、column1をリテラル名で置き換えると思いますか? – cphilpot

+0

@cphilpot - column1を実名に置き換えます。これはPreparedStatementの一部ではありません。標準SQL。 – CoolBeans

関連する問題