setNull
この String ケースで使用するメリットはありません。空の文字列 "" をチェックし、DB に null を挿入するためにのみ使用されます。しかし、そのためにも次のようにすることができますstmt.setString(9, null);
ただし、sPhoneExt が Integer で null を保持している場合
stmt.setInt(9, sPhoneExt);
、setInt(int, int)
API が実行されるため実行できません。sPhoneExt (Integer) をプリミティブ (int) に変換 (Unboxing) すると、NullPointerException が発生します。だからあなたは必要ですstmt.setNull(9, java.sql.Types.INTEGER);
最後に、NUMBER (SQL 型) 列の DB に null を挿入した場合。getInt() は 0 のみを返します。
これは、以下のヌル セット メカニズムとは関係ありません。
stmt.setString(9, null);
stmt.setNull(9, java.sql.Types.INTEGER)
また、誰かが DB NUMBER 列にデフォルト値があることを伝えました。そのデフォルト値は、上記の 2 行によって異なるように考慮されます。しかし、そうではありません。その場合でも、上記の行は両方とも同じように機能します。設定NULL
値です。デフォルト値ではありません。
create table t1 (id number default 1 );
insert into t1 (id) values (2);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestDB {
public static void main(String args[]) {
PreparedStatement stmt = null;
ResultSet rs = null;
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@10.201.32.92:1521:psprd1", "username", "password");
String query = null;
String l = null;
ResultSet rset = null;
int paramIndex = 1;
query = "UPDATE t1 " + " SET id = ?";
stmt = con.prepareStatement(query);
stmt.setInt(paramIndex++, null);
// stmt.setNull(1, java.sql.Types.INTEGER);
stmt.executeUpdate();
stmt.close();
query = "select id from t1 ";
stmt = con.prepareStatement(query);
rset = stmt.executeQuery();
rset.next();
System.out.println(rset.getString("id"));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}