如何在mysql中插入NULL,尤其是INT dataType

时间:2013-08-26 17:34:26

标签: java mysql jdbc

我有80000个需要插入数据库的重新编码,特别是在表中:temp(ts,temp) temp是INT。

问题是将近20000个重新编码为空,所以我想知道当dataType为INT时如何在DB中插入NULL。

我试过了:

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"
希望有人可以帮助我。谢谢。

6 个答案:

答案 0 :(得分:20)

您应该使用PreparedStatement并使用setNull(int, int)

String sql = "INSERT INTO temp(val) VALUES (?)";
PreparedStatement st = con.prepareStatement(sql);
if (/* int value is not null */) {
   st.setInt(1, value);
} else {
   set.setNull(1, Types.INTEGER);
}
count  = st.executeUpdate();

答案 1 :(得分:4)

作为Mark Rotteveel答案的替代方案,您还可以使用PreparedStatement.setObject(int, Object, int)

指定SQL类型(第3个参数),如果对象为null,则自动插入null。它更快更容易。

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

答案 2 :(得分:2)

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

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)。

答案 3 :(得分:1)

您应该考虑使用准备好的陈述。如果您这样做,您将找到有关如何处理空值here和其他地方的信息。

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

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

答案 4 :(得分:0)

您应该将NULL显式CAST作为INT

...VALUES(...CAST(NULL AS INT)

答案 5 :(得分:0)

听起来你应该发送一个int时发送“null”。也许尝试像

这样的东西

(val == null?“”:val)