简体   繁体   English

如何使用java在sql中的datetime列中插入null值

[英]how to insert null value into datetime column in sql with java

Does anyone know how to set a null value into a datetime column in a database in sql? 有谁知道如何在sql中的数据库中将null值设置为datetime列? I tried setting the String as null: String date = null; 我尝试将String设置为null: String date = null; but i would get this error: 但我会得到这个错误:

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

Also I tried setting my string to no value by simply declaring it (String date;). 此外,我尝试通过简单地声明它(String date;)来将我的字符串设置为无值。 however this would just end up setting the date as January 1, 1900. 然而,这最终会将日期设定为1900年1月1日。

I used 3 dropdown boxes for the user of the program to choose the month, day, and year each. 我为程序用户使用了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;


}

Lastly, I would give newdateprocessed.newdate() to the column in my database. 最后,我将newdateprocessed.newdate()提供给我的数据库中的列。 It would work fine if the user would choose a date, but if they did not choose a date that I would get an error, which is why I am trying to find a way to be able to put a null value. 如果用户选择日期,它会正常工作,但如果他们没有选择我会收到错误的日期,这就是为什么我试图找到一种能够放置空值的方法。

Try to call 试着打电话

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

For example 例如

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

Why a string? 为什么是字符串? If it's a datetime column, you could try: 如果是日期时间列,您可以尝试:

Date date = null;

You seem to be passing a string to your data access code, which is being stored in a datetime column, so you are relying on the DBMS to interpret the string value and convert it to a datetime. 您似乎将一个字符串传递给您的数据访问代码,该代码存储在datetime列中,因此您依靠DBMS来解释字符串值并将其转换为日期时间。 There is no way this can handle a null value, so you are going to have to change the way you are doing this to actually pass a compatible data type like a Date instance. 这样就无法处理空值,因此您将不得不改变执行此操作的方式来实际传递兼容的数据类型,如Date实例。

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

i figured out what to do. 我想出了该怎么做。 the query that i used for updating my database was originally this: 我用来更新我的数据库的查询最初是这样的:

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

i took out the single quotation marks in the query and changed the query to this: 我在查询中取出单引号并将查询更改为:

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

and in my code for setting the value of newdate in my DateNew function, if it was null i set it to be: 并在我的代码中设置我的DateNew函数中newdate的值,如果它为null我将其设置为:

newdate = "NULL";

and if it wasn't i set it to be: 如果不是我将它设置为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM