2012-01-19 119 views
4

有谁知道如何设置空值到数据库中的日期时间列sql?我试图设置字符串为空:String date = null;但我会得到这个错误:如何将空值插入到SQL的日期时间列与java

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

此外,我试图通过简单地声明它(String date;)来设置我的字符串没有值。然而,这只会将日期设置为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()到我的数据库中的列。如果用户选择一个日期,它会工作正常,但如果他们没有选择一个日期,我会得到一个错误,这就是为什么我试图找到一种方法能够将一个空值。

+0

您是否检查过日期列是否存在非空约束? –

+0

是的,我设置列允许空值 – meebee

回答

0

我想通了,做什么。我用于更新我的数据库查询原是这样的:

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

我在查询中拿出了单引号,并改变了查询到这一点:

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

,并在我的设置代码newdate在我DateNew功能的价值,如果它是空我将其设置为:

newdate = "NULL"; 

,如果它不是我将其设置为:

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

这是一个非常糟糕的“解决方案”正确的方法是使用?参数保持器并在准备好的语句上调用setNull,如@ narek.gevorgyan所示 –

3

为什么一个字符串?如果它是一个datetime列,你可以尝试:

Date date = null; 

你似乎在传递一个字符串数据访问代码,它被存储在一个日期时间列,所以你依靠DBMS来解释字符串值并将其转换为日期时间。这是无法处理空值的,所以你将不得不改变你这样做的方式来实际传递一个兼容的数据类型,如Date实例。

+0

我刚刚编辑我的帖子,以显示更多的我的代码。谢谢,有一个Date变量的特定格式吗? – meebee

+0

我已经扩展了我的答案。 –

+0

谢谢,我会尝试研究日期的使用,因为我以前没有使用它。 – meebee

1

尝试使用setDate方法(并传递null)而不是setString方法。

+2

传递了null值的setDate不适用于所有JDBC驱动程序。规范兼容的方式是调用setNull(index,Types.Date) –

+0

这很好理解。谢谢斯蒂芬。 –

+0

耶!而已!谢谢! – Pierry

14

尝试调用

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

例如

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

相关问题