请问有谁请告诉我使用以下代码将获得的好处sPhoneExt是null什么时候?
if (sPhoneExt == null || sPhoneExt.trim().equals("")) {
stmt.setNull(9, java.sql.Types.INTEGER);
} else {
stmt.setString(9, sPhoneExt);
}
Run Code Online (Sandbox Code Playgroud)
代替 stmt.setString(9, sPhoneExt);
因为如果值是SQL iPhoneType = rset.getInt("phone_type");将返回; 这是我不想要的.0NULL
只是好奇stmt.setString(9, null)才会回归rset.getInt("phone_type")?
getInt()在DB中为空时将返回零.您必须使用以下代码来了解DB NULL.
if (rs.wasNull()) {
// handle NULL field value
}
Run Code Online (Sandbox Code Playgroud)
Kan*_*mar 16
setNull在这个String案例中我没有看到任何好处.它仅用于检查空字符串""并在DB中插入null.但对此我们也可以这样做stmt.setString(9, null);
但是当sPhoneExt是Integer并且保持null时,那么stmt.setInt(9, sPhoneExt); 自setInt(int, int)API 执行以来我们无法执行
; 将(Unboxing)sPhoneExt(Integer)转换为原始(int),因此您将获得NullPointerException.所以你需要stmt.setNull(9, java.sql.Types.INTEGER);
最后,如果您在DB中为NUMBER(sql类型)列插入了null; getInt()只返回0.
这与下面的空集机制无关.
stmt.setString(9, null);
stmt.setNull(9, java.sql.Types.INTEGER)
Run Code Online (Sandbox Code Playgroud)
还有人告诉DB NUMBER列有默认值; 以上两行将以不同方式考虑该默认值.但事实并非如此.即使是这种情况,上述两行也都表现相同.这是设定NULL值; 不是默认值.
create table t1 (id number default 1 );
insert into t1 (id) values (2);
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51557 次 |
| 最近记录: |