2012-01-19 6 views
4

誰もSQLのデータベースのdatetime列にnull値を設定する方法を知っていますか?私はnullとして文字列を設定しようとしました:String date = null;しかし、私はこのエラーが表示されます:どのようにNULLの値をSQLのjavaにSQLの列に挿入する

java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting datetime from character string

また、単に文字列を宣言するだけで、文字列を値に設定しようとしました(文字列の日付;)。しかし、これはちょうど1900年1月1日として日付を設定することになります。

私は、プログラムのユーザーに月、日、年をそれぞれ選択する3つのドロップダウンボックスを使用しました。

DateNew newdateprocessed; 
int b, c; 
String d; 

//First I took the values from each drop down box. 
b = Date_Processed_Month_Mod.getSelectedIndex(); 
c = Date_Processed_Day_Mod.getSelectedIndex(); 
d = Date_Processed_Year_Mod.getSelectedItem().toString();     
newdateprocessed = new DateNew(b, c, d); 

//Then I used these values in a separate function to put them all together as just one  string 
public class DateNew extends Object { 
String newdate; 
String monthword, newdateword; 
int check=0; 

public DateNew (int month, int day, String year) { 

    //newdate = ""+ month + "/" + day + "/" + year; 

    if (month == 0 | day == 0 | year.equals("Year")) { 
     newdate=null; 
     check = 1; 
    } 

    else { 

     switch (month) { 
      case 1: 
       monthword="January"; 
       break; 
      case 2: 
       monthword="February"; 
       break; 
      case 3: 
       monthword="March"; 
       break; 
      case 4: 
       monthword="April"; 
       break; 
      case 5: 
       monthword="May"; 
       break; 
      case 6: 
       monthword="June"; 
       break; 
      case 7: 
       monthword="July"; 
       break; 
      case 8: 
       monthword="August"; 
       break; 
      case 9: 
       monthword="September"; 
       break; 
      case 10: 
       monthword="October"; 
       break; 
      case 11: 
       monthword="November"; 
       break; 
      case 12: 
       monthword="December"; 
       break; 

     } 

     newdateword= monthword + " " + day + ", " + year; 
     newdate = ""+ month + "/" + day + "/" + year; 
    } 
    check=month; 



} 

public String newdate() { 
    return newdate; 
} 

public int newdatecheck(){ 
    return check; 
} 

public String newdateword(){ 
    return newdateword; 


} 

最後に、データベースの列にnewdateprocessed.newdate()を指定します。ユーザーが日付を選択しても問題ありませんが、日付を選択しなかった場合はエラーが発生するため、null値を設定できる方法を見つけようとしています。

+0

日付列にNULLでない制約があるかどうかチェックしましたか? –

+0

はい、null値を許可するように列を設定します – meebee

答えて

0

について

setNull(index,java.sql.Types.DATE) 

呼び出すようにしてください。私はクエリで単一引用符を取り出し、これにクエリを変更し

String query = "UPDATE Licenses Set Date_Processed = '" + newdateprocessed.newdate() + "'"; 

:設定するための

String query = "UPDATE Licenses Set Date_Processed =" + newdateprocessed.newdate(); 

と私のコードで私は自分のデータベースを更新するために使用されるクエリは、もともとこのましたそれがnullだった場合、私のDateNew機能でNEWDATEの値が、私はあることを、それを設定します。

newdate = "NULL"; 

をし、それがなかった場合、私はそれがために設定します。

newdate = "'" + month + "/" + day + "/" + year + "'"; 
+1

これは正しい方法では非常に悪い "解決法"ですか?パラメータ保持者を呼び出し、@ narek.gevorgyanのように、プリペアドステートメントでsetNullを呼び出します –

3

なぜ文字列ですか?それは日時列の場合は、あなたが試みることができる:

Date date = null; 

をあなたはdatetime型の列に格納されているデータアクセスコードに文字列を渡すように見えるので、あなたは、文字列を解釈するDBMSに依存しています値を変換してdatetimeに変換します。これはnull値を処理する方法がないため、実際にDateインスタンスのような互換性のあるデータ型を渡すためにこれを行う方法を変更する必要があります。

+0

私のコードをもっと表示するために投稿を編集しました。ありがとうございます、Date変数の特定の形式はありますか? – meebee

+0

私は結果として私の答えを広げました。 –

+0

ありがとう、私は前にそれを使用していないとして、日付の使用を勉強しようとします。 – meebee

1

setStringメソッドの代わりにsetDateメソッドを使用して(nullを渡して)試してください。

+2

null値を渡したsetDateは、すべてのJDBCドライバで機能しません。仕様に準拠した方法は、setNull(index、Types.Date)を呼び出すことです。 –

+0

これは知っておきたいことです。ステファンありがとう。 –

+0

ええ!それでおしまい!ありがとう! – Pierry

14

は私が何をすべきかを考え出し例

String query = "UPDATE Licenses Set Date_Processed = ?"; 
PreparedStatement queryStatement = (PreparedStatement)connection.prepareStatement(sql); 
queryStatement.setNull(1, java.sql.Types.Date); 
+1

おそらくそれは変更されましたが、sqlTypeパラメータはjava.sql.Types.DATEになるはずです – kane

関連する問題