我有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)
作为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)