我希望在数据库中插入一个空值,而不是插入默认的原始值。
我有一个班级
class Test
(
private int first;
private int second;
public Test() {}
public void setFirst(int val) {first = val;}
public void setSecond(int val) {second = val;}
public int getFirst() {return first;}
public int getSecond() {return second;}
)
我有一些初始化Test类的代码:
测试我的=新测试(); my.setFirst(100);
所以我们现在有: 第一个= 100; 秒= 0; - 因为我没有初始化它,它默认为零" 0"对于int。
现在我将数据插入数据库表Test ...
Create table Test
(
first number,
second number
)
Java call ...
Test my = new Test();
my.setFirst(100);
String sql = "INSERT INTO TEST VALUES(?,?)";
PrepareStatement ps = connection.prepareStatement(sql);
ps.setInt(1, my.getFirst()); // will insert 100
ps.setInt(2, my.getSecond()); // will insert 0
我希望将插入NULL插入" second"我的代码中没有设置Test.second的字段。我使用以下技巧:
class Test
(
private int first = -999;
private int second = -999;
public Test() {}
public void setFirst(int val) {first = val;}
public void setSecond(int val) {second = val;}
public int getFirst() {return first;}
public int getSecond() {return second;}
)
Test my = new Test();
my.setFirst(100);
String sql = "INSERT INTO TEST VALUES(?,?)";
PrepareStatement ps = connection.prepareStatement(sql);
if (my.getFirst() == -999)
ps.setNull(1, java.sql.Types.INTEGER) // will insert NULL
else
ps.setInt(1, my.getFirst()); // will insert 100
if (my.getSecond() == -999)
ps.setNull(2, java.sql.Types.INTEGER) // will insert NULL
else
ps.setInt(2, my.getSecond()); // will insert 0
有人有最好/最好的解决方案来实现吗?
使用Integer时我得到NullPointerException,这是正确的,因为var没有初始化或者我错过了一些东西:
java.lang.NullPointerException
at UserQuiz.getFrom_flags_challenge_nid(UserQuiz:113)
UserQuiz. java
...
private Integer from_flags_challenge_nid;
public int getFrom_flags_challenge_nid() {
return from_flags_challenge_nid;
}
public void setFrom_flags_challenge_nid(int from_flags_challenge_nid) {
this.from_flags_challenge_nid = from_flags_challenge_nid;
}
...
答案 0 :(得分:2)
将您的int
更改为Integer
(无处不在 - 字段,setter的参数和getter的返回类型),然后您可以尝试这样做:
ps.setObject(1, my.getFirst()/*may return null*/, java.sql.Types.INTEGER);
ps.setObject(2, my.getSecond()/*may return null*/, java.sql.Types.INTEGER);
请注意这样的代码:
private Integer from_flags_challenge_nid;
public int getFrom_flags_challenge_nid() {
return from_flags_challenge_nid;
}
如果from_flags_challenge_nid
包含null
,将抛出NullPointerException。
答案 1 :(得分:1)
如果您想添加此类行为,为什么不扩展PreparedStatement
并提供您自己的实施?
class MyPreparedStatement extends PreparedStatement {
public void setNullableInt(int parameterIndex, int x)
throws SQLException
if (x == 0) {
setNull(parameterIndex, java.sql.Types.INTEGER)
}
else {
setInt(parameterIndex, x);
}
}
}
现在,问题是0
在逻辑上不等同于null
,并且实际上不应该这样对待。-1
如果您通常使用正整数来处理正整数的常用方法是使用类似{{1}}的内容来表示非价值'。