5

質問1

次のコードを使用して得られるメリットは何sPhoneExtですかnull

if (sPhoneExt == null || sPhoneExt.trim().equals("")) {
    stmt.setNull(9, java.sql.Types.INTEGER);
} else {
    stmt.setString(9, sPhoneExt);
}

それ以外のstmt.setString(9, sPhoneExt);

値がSQLの場合iPhoneType = rset.getInt("phone_type");に返されるため; 欲しくない。0NULL


質問2

そして、好奇心stmt.setString(9, null)が強いだけで、何が戻ってくるのrset.getInt("phone_type")でしょうか?

回答#2

getInt()DBでnullの場合、ゼロを返します。DBについて知るには、以下のコードを使用する必要がありますNULL

if (rs.wasNull()) {
    // handle NULL field value
}
4

1 に答える 1

23

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();

            }
        }
    }
}
于 2013-02-13T05:40:53.607 に答える