gpt4 book ai didi

jdbc - PreparedStatement.setNull(int parameterIndex, int sqlType)

转载 作者:行者123 更新时间:2023-12-04 16:32:02 26 4
gpt4 key购买 nike

问题#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);
因为 iPhoneType = rset.getInt("phone_type");将返回 0如果值为 SQL NULL ;我不想要的。

问题2

只是好奇 stmt.setString(9, null)执行什么将返回 rset.getInt("phone_type") ?

答案#2
getInt()当它在 DB 中为 null 时将返回零。您必须使用以下代码才能了解 DB NULL .

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

最佳答案

我认为使用 setNull 没有任何好处在这个字符串的情况下。
它仅用于检查空字符串“”并在数据库中插入空值。但为此我们也可以像 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);
最后,如果您在数据库中为 NUMBER(sql 类型)列插入了空值; getInt() 将只返回 0。

这与下面的空集机制无关。

stmt.setString(9, null);
stmt.setNull(9, java.sql.Types.INTEGER)

也有人告诉 DB NUMBER 列何时具有默认值;上述两行将对该默认值进行不同的考虑。但事实并非如此。即使在那种情况下,上述两行也以相同的方式执行。是设定 NULL值(value);不是默认值。

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

}
}
}
}

关于jdbc - PreparedStatement.setNull(int parameterIndex, int sqlType),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com