Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在mysql特别是INT数据类型中插入NULL_Java_Mysql_Jdbc - Fatal编程技术网

Java 如何在mysql特别是INT数据类型中插入NULL

Java 如何在mysql特别是INT数据类型中插入NULL,java,mysql,jdbc,Java,Mysql,Jdbc,我有80000个代码需要插入数据库,特别是在表temp(ts,temp)中 温度是整数 问题是几乎20000个记录都是null,所以我想知道当数据类型为INT时如何将null插入DB 我试过这个: String val = null; //insert(ts, val) into temp String sql = "INSERT INTO temp" + "(val)" + " VALUES" + "('" + val + "')"; Statement st = (Statement)

我有80000个代码需要插入数据库,特别是在表temp(ts,temp)中 温度是整数

问题是几乎20000个记录都是null,所以我想知道当数据类型为INT时如何将null插入DB

我试过这个:

String val = null;

//insert(ts, val) into temp 
String sql = "INSERT INTO temp" + "(val)" + " VALUES" + "('" + val + "')";
Statement st = (Statement) conn.createStatement();
count  = st.executeUpdate(sql);
不幸的是,插入失败了。打印出异常消息:

Incorrect integer value: 'null' for column 'val' at row 1"

希望有人能帮我。谢谢。

您应该明确地
将空值转换为INT


…VALUES(…CAST(NULL为INT)

听起来您应该在发送INT时发送“NULL”。也许可以尝试类似的方法


(Val==NULL?):“VAL”< /P> < P>你应该考虑使用准备好的语句。如果你这样做,你会发现关于如何处理空值和其他地方的信息。

如果您100%确定
val
值是干净的,并且不会导致SQL注入(罕见,但可能),那么“构建字符串”方法在定义值时需要显式使用
null

String sql = "INSERT INTO temp (val) VALUES (";
if (val == null) {
  sql += "null";
} else {
  sql += val;
}
sql += ")";

我已经解决了这个问题。 代码更新如下:

String sql= null;
if(val.isEmpty()){
System.out.println(val);
System.out.println("Insert ts: " + ts + " val: null");
sql= "INSERT INTO " + table + "(ts,val,pointId)" + " VALUES" + "(" + "'" + ts + "'" + ", " + "NULL" + " , " + "'" + pointId + "'" + ")";
}
else{
System.out.println("Insert ts: " + ts + " val: " + val);
sql= "INSERT INTO " + table + "(ts,val,pointId)" + " VALUES" + "(" + "'" + ts + "'" + ", " + "'" + val + "'" + ", " + "'" + pointId + "'" + ")";
}

Statement st = (Statement) conn.createStatement();  //create the instances of statement
count = st.executeUpdate(sql);

基本上,如果将null插入数据库,只需将val值(null)插入表中即可。

您应该使用
PreparedStatement
并使用:


作为Mark Rotterveel答案的替代方案,您还可以使用

您可以指定SQL类型(第三个参数),如果对象为空,它会自动插入空值。这样更快更容易

String sql = "INSERT INTO temp(val) VALUES (?)";
PreparedStatement st = con.prepareStatement(sql);
st.setObject(1, value, Types.INTEGER);
count  = st.executeUpdate();

谢谢,你是对的。我走错了方向。如果值为null,就意味着记录为null,即使它有时间戳。所以我需要保留不为null的记录。非常感谢。在你告诉我PrepardStatement之前,我不知道。这是我问题的答案。来自API:void setNull(int parameterIndex,int sqlType)抛出SQLException:将指定的参数设置为SQL NULL。这是一个完全合法的解决方案(tho is可以缩短一点),太糟糕了,它在没有任何解释的情况下被否决了
String sql = "INSERT INTO temp(val) VALUES (?)";
PreparedStatement st = con.prepareStatement(sql);
st.setObject(1, value, Types.INTEGER);
count  = st.executeUpdate();