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

Eri*_*ric 13 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);
Run Code Online (Sandbox Code Playgroud)

不幸的是插入是失败的.打印出异常消息:

Incorrect integer value: 'null' for column 'val' at row 1"
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我.谢谢.

Mar*_*eel 23

您应该使用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();
Run Code Online (Sandbox Code Playgroud)


Xit*_*ias 5

作为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();
Run Code Online (Sandbox Code Playgroud)